Skip to content

Commit f7708d0

Browse files
klopez4212Terpbrow
authored
Polish mobile onboarding and profile setup (#8438)
Originally stacked on #8375, now merged. Rebased onto main. Polishes the onboarding landing page, community-link entry, and recovery sheets. Profile setup uses a consistent sheet with a larger avatar, inline display name, and draft photo/emoji/animated editing; iOS uses native controls and coordinated avatar/sheet transitions. Validation: mobile analysis, full tests, and normal pre-push checks passed after rebase. Prior iOS build and device walkthrough passed; native validation was not repeated after this rebase. Snapshots omitted as requested. --------- Signed-off-by: kenny lopez <klopez4212@gmail.com> Signed-off-by: Tom Brow <tomb@block.xyz> Co-authored-by: Terp <5856f6900e8e0a4e0ea1f4f8d2ee33e4753d2119bc122f94ecafc660b46c0511@buzz.block.builderlab.xyz> Co-authored-by: Tom Brow <tomb@block.xyz>
1 parent 8260b6e commit f7708d0

45 files changed

Lines changed: 3749 additions & 172 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎mobile/ios/Runner.xcodeproj/project.pbxproj‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
F84380010000000000000001 /* ProfileSetupRecoveryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84380010000000000000002 /* ProfileSetupRecoveryTests.swift */; };
1011
BBAA00000000000000000011 /* IdentityFilePlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBAA00000000000000000012 /* IdentityFilePlugin.swift */; };
1112
BBAA00000000000000000001 /* HostedHpkeBackup.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBAA00000000000000000002 /* HostedHpkeBackup.swift */; };
1213
DAAB00000000000000000001 /* NativeTabler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAAB00000000000000000002; };
@@ -35,6 +36,8 @@
3536
4A71C0152F40B00100A17E01 /* HuddleMediaPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A71C0162F40B00100A17E01 /* HuddleMediaPlugin.swift */; };
3637
4A71C0172F40C00100A17E01 /* HuddleAudioEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A71C0182F40C00100A17E01 /* HuddleAudioEngine.swift */; };
3738
4A71C0192F40D00100A17E01 /* NativeProfileTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A71C01A2F40D00100A17E01 /* NativeProfileTextEditor.swift */; };
39+
7B81D0192F40D00100A17E01 /* NativeCommunityEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B81D01A2F40D00100A17E01 /* NativeCommunityEntry.swift */; };
40+
7B81D0192F40D00100A17E91 /* NativeProfileSetup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B81D01A2F40D00100A17E91 /* NativeProfileSetup.swift */; };
3841
4A71C01B2F40E00100A17E01 /* NativeSkinToneControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A71C01C2F40E00100A17E01 /* NativeSkinToneControl.swift */; };
3942
4A71C01D2F40F00100A17E01 /* ThemePaginationGlassControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A71C01E2F40F00100A17E01 /* ThemePaginationGlassControl.swift */; };
4043
CA8300012F50000100A17E01 /* IosMediaCarousel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA8300022F50000100A17E01 /* IosMediaCarousel.swift */; };
@@ -98,6 +101,7 @@
98101
/* End PBXCopyFilesBuildPhase section */
99102

100103
/* Begin PBXFileReference section */
104+
F84380010000000000000002 /* ProfileSetupRecoveryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileSetupRecoveryTests.swift; sourceTree = "<group>"; };
101105
BBAA00000000000000000012 /* IdentityFilePlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdentityFilePlugin.swift; sourceTree = "<group>"; };
102106
BBAA00000000000000000002 /* HostedHpkeBackup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostedHpkeBackup.swift; sourceTree = "<group>"; };
103107
DAAB00000000000000000002 /* NativeTabler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeTabler.swift; sourceTree = "<group>"; };
@@ -129,6 +133,8 @@
129133
4A71C0162F40B00100A17E01 /* HuddleMediaPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HuddleMediaPlugin.swift; sourceTree = "<group>"; };
130134
4A71C0182F40C00100A17E01 /* HuddleAudioEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HuddleAudioEngine.swift; sourceTree = "<group>"; };
131135
4A71C01A2F40D00100A17E01 /* NativeProfileTextEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeProfileTextEditor.swift; sourceTree = "<group>"; };
136+
7B81D01A2F40D00100A17E01 /* NativeCommunityEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeCommunityEntry.swift; sourceTree = "<group>"; };
137+
7B81D01A2F40D00100A17E91 /* NativeProfileSetup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeProfileSetup.swift; sourceTree = "<group>"; };
132138
4A71C01C2F40E00100A17E01 /* NativeSkinToneControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeSkinToneControl.swift; sourceTree = "<group>"; };
133139
4A71C01E2F40F00100A17E01 /* ThemePaginationGlassControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemePaginationGlassControl.swift; sourceTree = "<group>"; };
134140
CA8300022F50000100A17E01 /* IosMediaCarousel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IosMediaCarousel.swift; sourceTree = "<group>"; };
@@ -202,6 +208,7 @@
202208
isa = PBXGroup;
203209
children = (
204210
331C807B294A618700263BE5 /* RunnerTests.swift */,
211+
F84380010000000000000002 /* ProfileSetupRecoveryTests.swift */,
205212
AB1200132F40400100A17E01 /* NativeMessageImageLoaderTests.swift */,
206213
AB1200132F40400100A17E09 /* IdentityFilePluginTests.swift */,
207214
BZZ0000000000000000002C /* BuzzCommunicationNotificationTests.swift */,
@@ -305,6 +312,8 @@
305312
C0AF00000000000000000022 /* NativePresenceMenu.swift */,
306313
C0AF00000000000000000012 /* NativeAddMembersSheet.swift */,
307314
4A71C01A2F40D00100A17E01 /* NativeProfileTextEditor.swift */,
315+
7B81D01A2F40D00100A17E01 /* NativeCommunityEntry.swift */,
316+
7B81D01A2F40D00100A17E91 /* NativeProfileSetup.swift */,
308317
4A71C01A2F40D00100A17E02 /* MeAvatarLoader.swift */,
309318
4A71C01C2F40E00100A17E01 /* NativeSkinToneControl.swift */,
310319
4A71C01E2F40F00100A17E01 /* ThemePaginationGlassControl.swift */,
@@ -609,6 +618,7 @@
609618
buildActionMask = 2147483647;
610619
files = (
611620
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
621+
F84380010000000000000001 /* ProfileSetupRecoveryTests.swift in Sources */,
612622
AB1200032F40400100A17E01 /* NativeMessageImageLoaderTests.swift in Sources */,
613623
AB1200032F40400100A17E09 /* IdentityFilePluginTests.swift in Sources */,
614624
BZZ0000000000000000002B /* BuzzCommunicationNotificationTests.swift in Sources */,
@@ -647,6 +657,8 @@
647657
C0AF00000000000000000021 /* NativePresenceMenu.swift in Sources */,
648658
C0AF00000000000000000011 /* NativeAddMembersSheet.swift in Sources */,
649659
4A71C0192F40D00100A17E01 /* NativeProfileTextEditor.swift in Sources */,
660+
7B81D0192F40D00100A17E01 /* NativeCommunityEntry.swift in Sources */,
661+
7B81D0192F40D00100A17E91 /* NativeProfileSetup.swift in Sources */,
650662
4A71C0192F40D00100A17E02 /* MeAvatarLoader.swift in Sources */,
651663
4A71C01B2F40E00100A17E01 /* NativeSkinToneControl.swift in Sources */,
652664
4A71C01D2F40F00100A17E01 /* ThemePaginationGlassControl.swift in Sources */,

‎mobile/ios/Runner/AppDelegate.swift‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ import os.log
3030
endpointGrantStore: endpointGrantStore,
3131
keychainAccessGroup: pushKeychainAccessGroup
3232
)
33+
private var communityKeyboardChannel: FlutterMethodChannel?
34+
private var communityKeyboardObserver: NSObjectProtocol?
3335
private var hapticsChannel: FlutterMethodChannel?
3436
private var qrScannerChannel: FlutterMethodChannel?
3537
private var inlinePhotoPickerSupportChannel: FlutterMethodChannel?
@@ -44,6 +46,8 @@ import os.log
4446
private var nativeEmojiPickerCoordinator: NativeEmojiPickerCoordinator?
4547
private var nativeAddMembersSheetCoordinator: NativeAddMembersSheetCoordinator?
4648
private var nativeConfirmationDialogCoordinator: NativeConfirmationDialogCoordinator?
49+
private var nativeProfileSetupCoordinator: NativeProfileSetupCoordinator?
50+
private var nativeCommunityEntryCoordinator: NativeCommunityEntryCoordinator?
4751
private var nativeProfileTextEditorCoordinator: NativeProfileTextEditorCoordinator?
4852
private var nativeMessageActionSurfaceSupportChannel: FlutterMethodChannel?
4953
private var identityFilePlugin: IdentityFilePlugin?
@@ -68,6 +72,20 @@ import os.log
6872
}
6973

7074
let messenger = engineBridge.applicationRegistrar.messenger()
75+
let keyboardChannel = FlutterMethodChannel(
76+
name: "buzz/community_keyboard", binaryMessenger: messenger)
77+
communityKeyboardChannel = keyboardChannel
78+
if let observer = communityKeyboardObserver {
79+
NotificationCenter.default.removeObserver(observer)
80+
}
81+
communityKeyboardObserver = NotificationCenter.default.addObserver(
82+
forName: UIResponder.keyboardWillShowNotification, object: nil, queue: .main
83+
) { _ in
84+
// Deliver after UIKit finishes preparing the keyboard in this run-loop turn.
85+
DispatchQueue.main.async {
86+
keyboardChannel.invokeMethod("willShow", arguments: nil)
87+
}
88+
}
7189
identityFilePlugin = IdentityFilePlugin(messenger: messenger)
7290
browserAuthBridge = BuzzBrowserAuthBridge(messenger: messenger)
7391
hostedHpkeChannel = FlutterMethodChannel(name: "buzz/hosted_hpke", binaryMessenger: messenger)
@@ -292,6 +310,12 @@ import os.log
292310
)?.viewController
293311
)
294312

313+
nativeProfileSetupCoordinator = NativeProfileSetupCoordinator(messenger: messenger) { [weak self] engine in
314+
let channel = FlutterMethodChannel(name: "buzz/media_upload", binaryMessenger: engine.binaryMessenger)
315+
channel.setMethodCallHandler { [weak self] call, result in self?.handleMediaUploadMethodCall(call, result: result) }
316+
}
317+
nativeCommunityEntryCoordinator = NativeCommunityEntryCoordinator(messenger: messenger)
318+
295319
let nativeProfileTextEditorRegistrar = engineBridge.pluginRegistry.registrar(
296320
forPlugin: "BuzzNativeProfileTextEditor"
297321
)

0 commit comments

Comments
 (0)