From 294601f08702dd637e210449d04f227328ba02f7 Mon Sep 17 00:00:00 2001 From: YuryR Date: Wed, 19 Oct 2016 19:08:53 -0700 Subject: [PATCH] implement swift auth customization controllers --- .../project.pbxproj | 104 +++++++++--- .../Base.lproj/Main.storyboard | 61 ++++--- .../Samples/Auth/FIRAuthViewController.swift | 15 +- .../FIRCustomAuthPickerViewController.swift | 28 ++++ .../FIRCustomAuthPickerViewController.xib | 39 +++++ .../Auth/FIRCustomAuthUIDelegate.swift | 61 +++++++ .../FIRCustomEmailEntryViewController.swift | 74 +++++++++ .../FIRCustomEmailEntryViewController.xib | 84 ++++++++++ ...CustomPasswordRecoveryViewController.swift | 84 ++++++++++ ...IRCustomPasswordRecoveryViewController.xib | 97 +++++++++++ ...IRCustomPasswordSignInViewController.swift | 95 +++++++++++ .../FIRCustomPasswordSignInViewController.xib | 113 +++++++++++++ ...IRCustomPasswordSignUpViewController.swift | 99 ++++++++++++ .../FIRCustomPasswordSignUpViewController.xib | 151 ++++++++++++++++++ ...omPasswordVerificationViewController.swift | 95 +++++++++++ ...stomPasswordVerificationViewController.xib | 101 ++++++++++++ 16 files changed, 1253 insertions(+), 48 deletions(-) create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomAuthPickerViewController.swift create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomAuthPickerViewController.xib create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomAuthUIDelegate.swift create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomEmailEntryViewController.swift create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomEmailEntryViewController.xib create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordRecoveryViewController.swift create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordRecoveryViewController.xib create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignInViewController.swift create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignInViewController.xib create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignUpViewController.swift create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignUpViewController.xib create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordVerificationViewController.swift create mode 100644 samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordVerificationViewController.xib diff --git a/samples/swift/FirebaseUI-demo-swift.xcodeproj/project.pbxproj b/samples/swift/FirebaseUI-demo-swift.xcodeproj/project.pbxproj index a3d445e1e1f..97b1997e304 100644 --- a/samples/swift/FirebaseUI-demo-swift.xcodeproj/project.pbxproj +++ b/samples/swift/FirebaseUI-demo-swift.xcodeproj/project.pbxproj @@ -7,7 +7,7 @@ objects = { /* Begin PBXBuildFile section */ - 5154BD6792C6C1EDD6769E62 /* Pods_FirebaseUI_demo_swift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F0C19A9F22453BD22C1A8BD /* Pods_FirebaseUI_demo_swift.framework */; }; + 19877FB24F4E45159B4C8B51 /* Pods_FirebaseUI_demo_swiftTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2DBA0AFBF780C260346490A /* Pods_FirebaseUI_demo_swiftTests.framework */; }; 8D5F93B01D9B192D00D5A2E4 /* FIRStorageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D5F93AF1D9B192D00D5A2E4 /* FIRStorageViewController.swift */; }; 8DABC9891D3D82D600453807 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DABC9881D3D82D600453807 /* AppDelegate.swift */; }; 8DABC98E1D3D82D600453807 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8DABC98C1D3D82D600453807 /* Main.storyboard */; }; @@ -15,14 +15,27 @@ 8DABC9931D3D82D600453807 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8DABC9911D3D82D600453807 /* LaunchScreen.storyboard */; }; 8DABC99E1D3D82D600453807 /* FirebaseUI-demo-swiftTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DABC99D1D3D82D600453807 /* FirebaseUI-demo-swiftTests.swift */; }; 8DD51E371D873B0D00E2CA51 /* UIStoryboardExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DD51E361D873B0D00E2CA51 /* UIStoryboardExtension.swift */; }; - C2B80D664FB8CC29E977A3C0 /* Pods_FirebaseUI_demo_swiftTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6C92E41E38A9A82488FA8DE /* Pods_FirebaseUI_demo_swiftTests.framework */; }; C302C1DC1D91CC7B00ADBD41 /* FIRAuthViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C302C1D51D91CC7B00ADBD41 /* FIRAuthViewController.swift */; }; C302C1DD1D91CC7B00ADBD41 /* FIRChatCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C302C1D71D91CC7B00ADBD41 /* FIRChatCollectionViewCell.swift */; }; C302C1DE1D91CC7B00ADBD41 /* FIRChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C302C1D81D91CC7B00ADBD41 /* FIRChatViewController.swift */; }; C302C1DF1D91CC7B00ADBD41 /* FIRSamplesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C302C1D91D91CC7B00ADBD41 /* FIRSamplesViewController.swift */; }; C302C1E01D91CC7B00ADBD41 /* FIRSample.swift in Sources */ = {isa = PBXBuildFile; fileRef = C302C1DA1D91CC7B00ADBD41 /* FIRSample.swift */; }; C302C1E11D91CC7B00ADBD41 /* FIRSampleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C302C1DB1D91CC7B00ADBD41 /* FIRSampleCell.swift */; }; + C39833AD1DB7ECB300D257EF /* FIRCustomAuthUIDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39833AC1DB7ECB300D257EF /* FIRCustomAuthUIDelegate.swift */; }; + C39BC03D1DB7F74B0060F6AF /* FIRCustomAuthPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39BC03B1DB7F74B0060F6AF /* FIRCustomAuthPickerViewController.swift */; }; + C39BC03E1DB7F74B0060F6AF /* FIRCustomAuthPickerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C39BC03C1DB7F74B0060F6AF /* FIRCustomAuthPickerViewController.xib */; }; + C39BC0411DB811630060F6AF /* FIRCustomEmailEntryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39BC03F1DB811630060F6AF /* FIRCustomEmailEntryViewController.swift */; }; + C39BC0421DB811630060F6AF /* FIRCustomEmailEntryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C39BC0401DB811630060F6AF /* FIRCustomEmailEntryViewController.xib */; }; + C39BC0451DB811E70060F6AF /* FIRCustomPasswordRecoveryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39BC0431DB811E70060F6AF /* FIRCustomPasswordRecoveryViewController.swift */; }; + C39BC0461DB811E70060F6AF /* FIRCustomPasswordRecoveryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C39BC0441DB811E70060F6AF /* FIRCustomPasswordRecoveryViewController.xib */; }; + C39BC0491DB812030060F6AF /* FIRCustomPasswordSignInViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39BC0471DB812030060F6AF /* FIRCustomPasswordSignInViewController.swift */; }; + C39BC04A1DB812030060F6AF /* FIRCustomPasswordSignInViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C39BC0481DB812030060F6AF /* FIRCustomPasswordSignInViewController.xib */; }; + C39BC04D1DB812190060F6AF /* FIRCustomPasswordSignUpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39BC04B1DB812190060F6AF /* FIRCustomPasswordSignUpViewController.swift */; }; + C39BC04E1DB812190060F6AF /* FIRCustomPasswordSignUpViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C39BC04C1DB812190060F6AF /* FIRCustomPasswordSignUpViewController.xib */; }; + C39BC0511DB812330060F6AF /* FIRCustomPasswordVerificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39BC04F1DB812330060F6AF /* FIRCustomPasswordVerificationViewController.swift */; }; + C39BC0521DB812330060F6AF /* FIRCustomPasswordVerificationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C39BC0501DB812330060F6AF /* FIRCustomPasswordVerificationViewController.xib */; }; C3F23ECD1D80F3300020509F /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C3F23ECC1D80F3300020509F /* GoogleService-Info.plist */; }; + E7F9144B31800250B34EFA16 /* Pods_FirebaseUI_demo_swift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C01904E28D7A26F3281335EE /* Pods_FirebaseUI_demo_swift.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -36,9 +49,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 369D658EA96647034D5A600C /* Pods-FirebaseUI-demo-swiftTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUI-demo-swiftTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-FirebaseUI-demo-swiftTests/Pods-FirebaseUI-demo-swiftTests.release.xcconfig"; sourceTree = ""; }; - 3D5469E689731FBB399D6DA0 /* Pods-FirebaseUI-demo-swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUI-demo-swift.release.xcconfig"; path = "Pods/Target Support Files/Pods-FirebaseUI-demo-swift/Pods-FirebaseUI-demo-swift.release.xcconfig"; sourceTree = ""; }; - 7F0C19A9F22453BD22C1A8BD /* Pods_FirebaseUI_demo_swift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FirebaseUI_demo_swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7610266FD082466CE20ADACB /* Pods-FirebaseUI-demo-swiftTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUI-demo-swiftTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-FirebaseUI-demo-swiftTests/Pods-FirebaseUI-demo-swiftTests.debug.xcconfig"; sourceTree = ""; }; 8D5F93AF1D9B192D00D5A2E4 /* FIRStorageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRStorageViewController.swift; sourceTree = ""; }; 8DABC9851D3D82D600453807 /* FirebaseUI-demo-swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "FirebaseUI-demo-swift.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 8DABC9881D3D82D600453807 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -50,16 +61,32 @@ 8DABC99D1D3D82D600453807 /* FirebaseUI-demo-swiftTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FirebaseUI-demo-swiftTests.swift"; sourceTree = ""; }; 8DABC99F1D3D82D600453807 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8DD51E361D873B0D00E2CA51 /* UIStoryboardExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIStoryboardExtension.swift; sourceTree = ""; }; - 90BCB6E456E1A1DFF7CC4287 /* Pods-FirebaseUI-demo-swiftTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUI-demo-swiftTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-FirebaseUI-demo-swiftTests/Pods-FirebaseUI-demo-swiftTests.debug.xcconfig"; sourceTree = ""; }; - B4266D801923FB18FC210626 /* Pods-FirebaseUI-demo-swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUI-demo-swift.debug.xcconfig"; path = "Pods/Target Support Files/Pods-FirebaseUI-demo-swift/Pods-FirebaseUI-demo-swift.debug.xcconfig"; sourceTree = ""; }; + 91EA2EBA2D4CA65CDD805954 /* Pods-FirebaseUI-demo-swiftTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUI-demo-swiftTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-FirebaseUI-demo-swiftTests/Pods-FirebaseUI-demo-swiftTests.release.xcconfig"; sourceTree = ""; }; + A30D14E17BEF99F520C1EE48 /* Pods-FirebaseUI-demo-swift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUI-demo-swift.debug.xcconfig"; path = "Pods/Target Support Files/Pods-FirebaseUI-demo-swift/Pods-FirebaseUI-demo-swift.debug.xcconfig"; sourceTree = ""; }; + C01904E28D7A26F3281335EE /* Pods_FirebaseUI_demo_swift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FirebaseUI_demo_swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C2DBA0AFBF780C260346490A /* Pods_FirebaseUI_demo_swiftTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FirebaseUI_demo_swiftTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C302C1D51D91CC7B00ADBD41 /* FIRAuthViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRAuthViewController.swift; sourceTree = ""; }; C302C1D71D91CC7B00ADBD41 /* FIRChatCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRChatCollectionViewCell.swift; sourceTree = ""; }; C302C1D81D91CC7B00ADBD41 /* FIRChatViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRChatViewController.swift; sourceTree = ""; }; C302C1D91D91CC7B00ADBD41 /* FIRSamplesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRSamplesViewController.swift; sourceTree = ""; }; C302C1DA1D91CC7B00ADBD41 /* FIRSample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRSample.swift; sourceTree = ""; }; C302C1DB1D91CC7B00ADBD41 /* FIRSampleCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRSampleCell.swift; sourceTree = ""; }; + C326B7EB1DA6D364004B818F /* FirebaseUI-demo-swift.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "FirebaseUI-demo-swift.entitlements"; sourceTree = ""; }; + C39833AC1DB7ECB300D257EF /* FIRCustomAuthUIDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRCustomAuthUIDelegate.swift; sourceTree = ""; }; + C39BC03B1DB7F74B0060F6AF /* FIRCustomAuthPickerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRCustomAuthPickerViewController.swift; sourceTree = ""; }; + C39BC03C1DB7F74B0060F6AF /* FIRCustomAuthPickerViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FIRCustomAuthPickerViewController.xib; sourceTree = ""; }; + C39BC03F1DB811630060F6AF /* FIRCustomEmailEntryViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRCustomEmailEntryViewController.swift; sourceTree = ""; }; + C39BC0401DB811630060F6AF /* FIRCustomEmailEntryViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FIRCustomEmailEntryViewController.xib; sourceTree = ""; }; + C39BC0431DB811E70060F6AF /* FIRCustomPasswordRecoveryViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRCustomPasswordRecoveryViewController.swift; sourceTree = ""; }; + C39BC0441DB811E70060F6AF /* FIRCustomPasswordRecoveryViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FIRCustomPasswordRecoveryViewController.xib; sourceTree = ""; }; + C39BC0471DB812030060F6AF /* FIRCustomPasswordSignInViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRCustomPasswordSignInViewController.swift; sourceTree = ""; }; + C39BC0481DB812030060F6AF /* FIRCustomPasswordSignInViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FIRCustomPasswordSignInViewController.xib; sourceTree = ""; }; + C39BC04B1DB812190060F6AF /* FIRCustomPasswordSignUpViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRCustomPasswordSignUpViewController.swift; sourceTree = ""; }; + C39BC04C1DB812190060F6AF /* FIRCustomPasswordSignUpViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FIRCustomPasswordSignUpViewController.xib; sourceTree = ""; }; + C39BC04F1DB812330060F6AF /* FIRCustomPasswordVerificationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FIRCustomPasswordVerificationViewController.swift; sourceTree = ""; }; + C39BC0501DB812330060F6AF /* FIRCustomPasswordVerificationViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FIRCustomPasswordVerificationViewController.xib; sourceTree = ""; }; C3F23ECC1D80F3300020509F /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; - D6C92E41E38A9A82488FA8DE /* Pods_FirebaseUI_demo_swiftTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FirebaseUI_demo_swiftTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F2D23511A2406F596B51C5DA /* Pods-FirebaseUI-demo-swift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FirebaseUI-demo-swift.release.xcconfig"; path = "Pods/Target Support Files/Pods-FirebaseUI-demo-swift/Pods-FirebaseUI-demo-swift.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -67,7 +94,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5154BD6792C6C1EDD6769E62 /* Pods_FirebaseUI_demo_swift.framework in Frameworks */, + E7F9144B31800250B34EFA16 /* Pods_FirebaseUI_demo_swift.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -75,18 +102,18 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C2B80D664FB8CC29E977A3C0 /* Pods_FirebaseUI_demo_swiftTests.framework in Frameworks */, + 19877FB24F4E45159B4C8B51 /* Pods_FirebaseUI_demo_swiftTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 82233E233DF61FB36E0DBCF1 /* Frameworks */ = { + 8B89FBD7E1B4129820D8415D /* Frameworks */ = { isa = PBXGroup; children = ( - 7F0C19A9F22453BD22C1A8BD /* Pods_FirebaseUI_demo_swift.framework */, - D6C92E41E38A9A82488FA8DE /* Pods_FirebaseUI_demo_swiftTests.framework */, + C01904E28D7A26F3281335EE /* Pods_FirebaseUI_demo_swift.framework */, + C2DBA0AFBF780C260346490A /* Pods_FirebaseUI_demo_swiftTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -106,8 +133,8 @@ 8DABC9871D3D82D600453807 /* FirebaseUI-demo-swift */, 8DABC99C1D3D82D600453807 /* FirebaseUI-demo-swiftTests */, 8DABC9861D3D82D600453807 /* Products */, - 8EA7B2D9B35F06EB95273B18 /* Pods */, - 82233E233DF61FB36E0DBCF1 /* Frameworks */, + AA75DD540B7C0559CCBB503C /* Pods */, + 8B89FBD7E1B4129820D8415D /* Frameworks */, ); sourceTree = ""; }; @@ -143,13 +170,13 @@ path = "FirebaseUI-demo-swiftTests"; sourceTree = ""; }; - 8EA7B2D9B35F06EB95273B18 /* Pods */ = { + AA75DD540B7C0559CCBB503C /* Pods */ = { isa = PBXGroup; children = ( - B4266D801923FB18FC210626 /* Pods-FirebaseUI-demo-swift.debug.xcconfig */, - 3D5469E689731FBB399D6DA0 /* Pods-FirebaseUI-demo-swift.release.xcconfig */, - 90BCB6E456E1A1DFF7CC4287 /* Pods-FirebaseUI-demo-swiftTests.debug.xcconfig */, - 369D658EA96647034D5A600C /* Pods-FirebaseUI-demo-swiftTests.release.xcconfig */, + A30D14E17BEF99F520C1EE48 /* Pods-FirebaseUI-demo-swift.debug.xcconfig */, + F2D23511A2406F596B51C5DA /* Pods-FirebaseUI-demo-swift.release.xcconfig */, + 7610266FD082466CE20ADACB /* Pods-FirebaseUI-demo-swiftTests.debug.xcconfig */, + 91EA2EBA2D4CA65CDD805954 /* Pods-FirebaseUI-demo-swiftTests.release.xcconfig */, ); name = Pods; sourceTree = ""; @@ -171,6 +198,19 @@ isa = PBXGroup; children = ( C302C1D51D91CC7B00ADBD41 /* FIRAuthViewController.swift */, + C39833AC1DB7ECB300D257EF /* FIRCustomAuthUIDelegate.swift */, + C39BC03B1DB7F74B0060F6AF /* FIRCustomAuthPickerViewController.swift */, + C39BC03C1DB7F74B0060F6AF /* FIRCustomAuthPickerViewController.xib */, + C39BC03F1DB811630060F6AF /* FIRCustomEmailEntryViewController.swift */, + C39BC0401DB811630060F6AF /* FIRCustomEmailEntryViewController.xib */, + C39BC0431DB811E70060F6AF /* FIRCustomPasswordRecoveryViewController.swift */, + C39BC0441DB811E70060F6AF /* FIRCustomPasswordRecoveryViewController.xib */, + C39BC0471DB812030060F6AF /* FIRCustomPasswordSignInViewController.swift */, + C39BC0481DB812030060F6AF /* FIRCustomPasswordSignInViewController.xib */, + C39BC04B1DB812190060F6AF /* FIRCustomPasswordSignUpViewController.swift */, + C39BC04C1DB812190060F6AF /* FIRCustomPasswordSignUpViewController.xib */, + C39BC04F1DB812330060F6AF /* FIRCustomPasswordVerificationViewController.swift */, + C39BC0501DB812330060F6AF /* FIRCustomPasswordVerificationViewController.xib */, ); path = Auth; sourceTree = ""; @@ -236,7 +276,7 @@ attributes = { LastSwiftUpdateCheck = 0730; LastUpgradeCheck = 0800; - ORGANIZATIONNAME = morganchen; + ORGANIZATIONNAME = "Firebase, Inc."; TargetAttributes = { 8DABC9841D3D82D600453807 = { CreatedOnToolsVersion = 7.3.1; @@ -273,10 +313,16 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + C39BC04A1DB812030060F6AF /* FIRCustomPasswordSignInViewController.xib in Resources */, + C39BC03E1DB7F74B0060F6AF /* FIRCustomAuthPickerViewController.xib in Resources */, 8DABC9931D3D82D600453807 /* LaunchScreen.storyboard in Resources */, C3F23ECD1D80F3300020509F /* GoogleService-Info.plist in Resources */, + C39BC0421DB811630060F6AF /* FIRCustomEmailEntryViewController.xib in Resources */, 8DABC9901D3D82D600453807 /* Assets.xcassets in Resources */, + C39BC04E1DB812190060F6AF /* FIRCustomPasswordSignUpViewController.xib in Resources */, 8DABC98E1D3D82D600453807 /* Main.storyboard in Resources */, + C39BC0461DB811E70060F6AF /* FIRCustomPasswordRecoveryViewController.xib in Resources */, + C39BC0521DB812330060F6AF /* FIRCustomPasswordVerificationViewController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -390,12 +436,19 @@ 8DD51E371D873B0D00E2CA51 /* UIStoryboardExtension.swift in Sources */, C302C1DF1D91CC7B00ADBD41 /* FIRSamplesViewController.swift in Sources */, C302C1DC1D91CC7B00ADBD41 /* FIRAuthViewController.swift in Sources */, + C39BC0451DB811E70060F6AF /* FIRCustomPasswordRecoveryViewController.swift in Sources */, + C39BC03D1DB7F74B0060F6AF /* FIRCustomAuthPickerViewController.swift in Sources */, 8D5F93B01D9B192D00D5A2E4 /* FIRStorageViewController.swift in Sources */, + C39BC0491DB812030060F6AF /* FIRCustomPasswordSignInViewController.swift in Sources */, + C39BC04D1DB812190060F6AF /* FIRCustomPasswordSignUpViewController.swift in Sources */, C302C1DD1D91CC7B00ADBD41 /* FIRChatCollectionViewCell.swift in Sources */, C302C1DE1D91CC7B00ADBD41 /* FIRChatViewController.swift in Sources */, + C39BC0411DB811630060F6AF /* FIRCustomEmailEntryViewController.swift in Sources */, C302C1E11D91CC7B00ADBD41 /* FIRSampleCell.swift in Sources */, C302C1E01D91CC7B00ADBD41 /* FIRSample.swift in Sources */, + C39BC0511DB812330060F6AF /* FIRCustomPasswordVerificationViewController.swift in Sources */, 8DABC9891D3D82D600453807 /* AppDelegate.swift in Sources */, + C39833AD1DB7ECB300D257EF /* FIRCustomAuthUIDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -531,7 +584,7 @@ }; 8DABC9A31D3D82D600453807 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B4266D801923FB18FC210626 /* Pods-FirebaseUI-demo-swift.debug.xcconfig */; + baseConfigurationReference = A30D14E17BEF99F520C1EE48 /* Pods-FirebaseUI-demo-swift.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; BITCODE_GENERATION_MODE = ""; @@ -548,11 +601,12 @@ }; 8DABC9A41D3D82D600453807 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3D5469E689731FBB399D6DA0 /* Pods-FirebaseUI-demo-swift.release.xcconfig */; + baseConfigurationReference = F2D23511A2406F596B51C5DA /* Pods-FirebaseUI-demo-swift.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; BITCODE_GENERATION_MODE = ""; CLANG_ENABLE_MODULES = YES; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "FirebaseUI-demo-swift/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.google.firebase.firebaseui.FirebaseUI-demo-swift"; @@ -564,7 +618,7 @@ }; 8DABC9A61D3D82D600453807 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 90BCB6E456E1A1DFF7CC4287 /* Pods-FirebaseUI-demo-swiftTests.debug.xcconfig */; + baseConfigurationReference = 7610266FD082466CE20ADACB /* Pods-FirebaseUI-demo-swiftTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = "FirebaseUI-demo-swiftTests/Info.plist"; @@ -578,7 +632,7 @@ }; 8DABC9A71D3D82D600453807 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 369D658EA96647034D5A600C /* Pods-FirebaseUI-demo-swiftTests.release.xcconfig */; + baseConfigurationReference = 91EA2EBA2D4CA65CDD805954 /* Pods-FirebaseUI-demo-swiftTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = "FirebaseUI-demo-swiftTests/Info.plist"; diff --git a/samples/swift/FirebaseUI-demo-swift/Base.lproj/Main.storyboard b/samples/swift/FirebaseUI-demo-swift/Base.lproj/Main.storyboard index 0831ded08d3..17f3b12a330 100644 --- a/samples/swift/FirebaseUI-demo-swift/Base.lproj/Main.storyboard +++ b/samples/swift/FirebaseUI-demo-swift/Base.lproj/Main.storyboard @@ -189,19 +189,6 @@ - - - - - - - - - - - - - @@ -213,12 +200,35 @@ + + + + + + + + + + + + + + + + + + + - + @@ -230,7 +240,7 @@ - + @@ -242,7 +252,7 @@ - + @@ -254,7 +264,7 @@ - + @@ -275,7 +285,7 @@ - + @@ -299,14 +309,25 @@ + + + + + + + + + + - + + @@ -377,7 +398,7 @@ - + diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRAuthViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRAuthViewController.swift index 5e1392d130c..fdc4f8270c8 100644 --- a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRAuthViewController.swift +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRAuthViewController.swift @@ -34,6 +34,7 @@ class FIRAuthViewController: UITableViewController { fileprivate(set) var auth: FIRAuth? = FIRAuth.auth() fileprivate(set) var authUI: FIRAuthUI? = FIRAuthUI.default() + fileprivate(set) var customAuthUIDelegate: FIRAuthUIDelegate = FIRCustomAuthUIDelegate() @IBOutlet weak var cellSignedIn: UITableViewCell! @IBOutlet weak var cellName: UITableViewCell! @@ -42,7 +43,8 @@ class FIRAuthViewController: UITableViewController { @IBOutlet weak var cellAccessToken: UITableViewCell! @IBOutlet weak var cellIdToken: UITableViewCell! - @IBOutlet weak var btnAuthorization: UIBarButtonItem! + @IBOutlet weak var authorizationButton: UIBarButtonItem! + @IBOutlet weak var customAuthorizationSwitch: UISwitch! override func viewWillAppear(_ animated: Bool) { @@ -64,6 +66,8 @@ class FIRAuthViewController: UITableViewController { self.authStateDidChangeHandle = self.auth?.addStateDidChangeListener(self.updateUI(auth:user:)) + + self.navigationController?.isToolbarHidden = false; } override func viewWillDisappear(_ animated: Bool) { @@ -71,6 +75,8 @@ class FIRAuthViewController: UITableViewController { if let handle = self.authStateDidChangeHandle { self.auth?.removeStateDidChangeListener(handle) } + + self.navigationController?.isToolbarHidden = true; } override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { @@ -89,7 +95,10 @@ class FIRAuthViewController: UITableViewController { } } else { + self.authUI?.delegate = self.customAuthorizationSwitch.isOn ? self.customAuthUIDelegate : nil; + let controller = self.authUI!.authViewController() + controller.navigationBar.isHidden = self.customAuthorizationSwitch.isOn self.present(controller, animated: true, completion: nil) } } @@ -102,14 +111,14 @@ class FIRAuthViewController: UITableViewController { self.cellEmail.textLabel?.text = user.email ?? "(null)" self.cellUid.textLabel?.text = user.uid - self.btnAuthorization.title = "Sign Out"; + self.authorizationButton.title = "Sign Out"; } else { self.cellSignedIn.textLabel?.text = "Not signed in" self.cellName.textLabel?.text = "null" self.cellEmail.textLabel?.text = "null" self.cellUid.textLabel?.text = "null" - self.btnAuthorization.title = "Sign In"; + self.authorizationButton.title = "Sign In"; } self.cellAccessToken.textLabel?.text = getAllAccessTokens() diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomAuthPickerViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomAuthPickerViewController.swift new file mode 100644 index 00000000000..cee4a7a7085 --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomAuthPickerViewController.swift @@ -0,0 +1,28 @@ +// +// Copyright (c) 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import FirebaseAuthUI + +@objc(FIRCustomAuthPickerViewController) + +class FIRCustomAuthPickerViewController: FIRAuthPickerViewController { + + @IBAction func onClose(_ sender: AnyObject) { + self.cancelAuthorization() + } + +} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomAuthPickerViewController.xib b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomAuthPickerViewController.xib new file mode 100644 index 00000000000..4184a41ddf3 --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomAuthPickerViewController.xib @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomAuthUIDelegate.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomAuthUIDelegate.swift new file mode 100644 index 00000000000..3e122960cf5 --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomAuthUIDelegate.swift @@ -0,0 +1,61 @@ +// +// Copyright (c) 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import FirebaseAuthUI +import FirebaseAuth + +class FIRCustomAuthUIDelegate: NSObject, FIRAuthUIDelegate { + + func authUI(_ authUI: FIRAuthUI, didSignInWith user: FIRUser?, error: Error?) { + guard let authError = error else { return } + + let errorCode = UInt((authError as NSError).code) + + switch errorCode { + case FIRAuthUIErrorCode.userCancelledSignIn.rawValue: + print("User cancelled sign-in"); + break + default: + let detailedError = (authError as NSError).userInfo[NSUnderlyingErrorKey] ?? authError + print("Login error: \((detailedError as! NSError).localizedDescription)"); + } + } + + func authPickerViewController(for authUI: FIRAuthUI) -> FIRAuthPickerViewController { + return FIRCustomAuthPickerViewController(authUI: authUI) + } + + func emailEntryViewController(for authUI: FIRAuthUI) -> FIREmailEntryViewController { + return FIRCustomEmailEntryViewController(authUI: authUI) + } + + func passwordRecoveryViewController(for authUI: FIRAuthUI, email: String) -> FIRPasswordRecoveryViewController { + return FIRCustomPasswordRecoveryViewController(authUI: authUI, email: email) + } + + func passwordSignInViewController(for authUI: FIRAuthUI, email: String) -> FIRPasswordSignInViewController { + return FIRCustomPasswordSignInViewController(authUI: authUI, email: email) + } + + func passwordSignUpViewController(for authUI: FIRAuthUI, email: String) -> FIRPasswordSignUpViewController { + return FIRCustomPasswordSignUpViewController(authUI: authUI, email: email) + } + + func passwordVerificationViewController(for authUI: FIRAuthUI, email: String, newCredential: FIRAuthCredential) -> FIRPasswordVerificationViewController { + return FIRCustomPasswordVerificationViewController(authUI: authUI, email: email, newCredential: newCredential) + } +} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomEmailEntryViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomEmailEntryViewController.swift new file mode 100644 index 00000000000..c0e8789ce88 --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomEmailEntryViewController.swift @@ -0,0 +1,74 @@ +// +// Copyright (c) 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import FirebaseAuthUI + +@objc(FIRCustomEmailEntryViewController) + +class FIRCustomEmailEntryViewController: FIREmailEntryViewController, UITextFieldDelegate { + @IBOutlet weak var emailTextField: UITextField! + @IBOutlet weak var nextButton: UIBarButtonItem! + + override func viewDidLoad() { + super.viewDidLoad() + + //override action of default 'Next' button to use custom layout elements' + self.navigationItem.rightBarButtonItem?.target = self + self.navigationItem.rightBarButtonItem?.action = #selector(onNextButton(_:)) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + //update state of all UI elements (e g disable 'Next' buttons) + self.updateEmailValue(emailTextField) + } + + @IBAction func onBack(_ sender: AnyObject) { + self.onBack() + } + @IBAction func onNextButton(_ sender: AnyObject) { + if let email = emailTextField.text { + self.onNext(email) + } + } + @IBAction func onCancel(_ sender: AnyObject) { + self.cancelAuthorization() + } + + @IBAction func onViewSelected(_ sender: AnyObject) { + emailTextField.resignFirstResponder() + } + + @IBAction func updateEmailValue(_ sender: UITextField) { + if emailTextField == sender, let email = emailTextField.text { + nextButton.isEnabled = !email.isEmpty + self.didChangeEmail(email) + } + } + +// MARK: - UITextFieldDelegate methods + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + if textField == emailTextField, let email = textField.text { + self.onNext(email) + } + + return false + } + +} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomEmailEntryViewController.xib b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomEmailEntryViewController.xib new file mode 100644 index 00000000000..244cd94f6f7 --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomEmailEntryViewController.xib @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordRecoveryViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordRecoveryViewController.swift new file mode 100644 index 00000000000..e692daa6bdd --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordRecoveryViewController.swift @@ -0,0 +1,84 @@ +// +// Copyright (c) 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import FirebaseAuthUI + +@objc(FIRCustomPasswordRecoveryViewController) + +class FIRCustomPasswordRecoveryViewController: FIRPasswordRecoveryViewController, UITextFieldDelegate { + @IBOutlet weak var emailTextField: UITextField! + @IBOutlet weak var recoverButton: UIBarButtonItem! + + override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, authUI: FIRAuthUI, email: String?) { + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil, authUI: authUI, email: email) + + emailTextField.text = email + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } + + override func viewDidLoad() { + super.viewDidLoad() + + //override action of default 'Next' button to use custom layout elements' + self.navigationItem.rightBarButtonItem?.target = self + self.navigationItem.rightBarButtonItem?.action = #selector(onRecover(_:)) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + //update state of all UI elements (e g disable 'Next' buttons) + self.updateEmailValue(emailTextField) + } + + @IBAction func onBack(_ sender: AnyObject) { + self.onBack() + } + + @IBAction func onRecover(_ sender: AnyObject) { + if let email = emailTextField.text { + self.recoverEmail(email) + } + } + @IBAction func onCancel(_ sender: AnyObject) { + self.cancelAuthorization() + } + + @IBAction func updateEmailValue(_ sender: UITextField) { + if emailTextField == sender, let email = emailTextField.text { + recoverButton.isEnabled = !email.isEmpty + self.didChangeEmail(email) + } + } + + @IBAction func onViewSelected(_ sender: AnyObject) { + emailTextField.resignFirstResponder() + } + + // MARK: - UITextFieldDelegate methods + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + if textField == emailTextField, let email = textField.text { + self.recoverEmail(email) + } + + return false + } +} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordRecoveryViewController.xib b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordRecoveryViewController.xib new file mode 100644 index 00000000000..89396a4cce7 --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordRecoveryViewController.xib @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignInViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignInViewController.swift new file mode 100644 index 00000000000..69d244f8ce9 --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignInViewController.swift @@ -0,0 +1,95 @@ +// +// Copyright (c) 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import FirebaseAuthUI + +@objc(FIRCustomPasswordSignInViewController) + +class FIRCustomPasswordSignInViewController: FIRPasswordSignInViewController { + @IBOutlet weak var emailTextField: UITextField! + @IBOutlet weak var passwordTextField: UITextField! + @IBOutlet weak var nextButton: UIBarButtonItem! + + override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, authUI: FIRAuthUI, email: String?) { + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil, authUI: authUI, email: email) + + emailTextField.text = email + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } + + override func viewDidLoad() { + super.viewDidLoad() + + //override action of default 'Next' button to use custom layout elements' + self.navigationItem.rightBarButtonItem?.target = self + self.navigationItem.rightBarButtonItem?.action = #selector(onNext(_:)) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + //update state of all UI elements (e g disable 'Next' buttons) + self.updateTextFieldValue(nil) + } + + @IBAction func onForgotPassword(_ sender: AnyObject) { + if let email = emailTextField.text { + self.forgotPassword(forEmail: email) + } + } + + @IBAction func onNext(_ sender: AnyObject?) { + if let email = emailTextField.text, let password = passwordTextField.text { + self.signIn(withEmail: email, andPassword: password) + } + } + + @IBAction func onCancel(_ sender: AnyObject) { + self.cancelAuthorization() + } + + @IBAction func onBack(_ sender: AnyObject) { + self.onBack() + } + + @IBAction func onViewSelected(_ sender: AnyObject) { + emailTextField.resignFirstResponder() + passwordTextField.resignFirstResponder() + } + + @IBAction func updateTextFieldValue(_ sender: AnyObject?) { + if let email = emailTextField.text, let password = passwordTextField.text { + nextButton.isEnabled = !email.isEmpty && !password.isEmpty + self.didChangeEmail(email, andPassword: password) + } + } + + // MARK: - UITextFieldDelegate methods + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + if textField == emailTextField { + passwordTextField.becomeFirstResponder() + } else if textField == passwordTextField { + self.onNext(nil) + } + + return false + } +} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignInViewController.xib b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignInViewController.xib new file mode 100644 index 00000000000..a4ccdbbd8da --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignInViewController.xib @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignUpViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignUpViewController.swift new file mode 100644 index 00000000000..6ec96d53439 --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignUpViewController.swift @@ -0,0 +1,99 @@ +// +// Copyright (c) 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import FirebaseAuthUI + +@objc(FIRCustomPasswordSignUpViewController) + +class FIRCustomPasswordSignUpViewController: FIRPasswordSignUpViewController, UITextFieldDelegate { + + @IBOutlet weak var emailTextField: UITextField! + @IBOutlet weak var usernameTextField: UITextField! + @IBOutlet weak var passwordTextField: UITextField! + @IBOutlet weak var nextButton: UIBarButtonItem! + + override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, authUI: FIRAuthUI, email: String?) { + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil, authUI: authUI, email: email) + + emailTextField.text = email + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } + + override func viewDidLoad() { + super.viewDidLoad() + + //override action of default 'Next' button to use custom layout elements' + self.navigationItem.rightBarButtonItem?.target = self + self.navigationItem.rightBarButtonItem?.action = #selector(onNext(_:)) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + //update state of all UI elements (e g disable 'Next' buttons) + self.updateTextFieldValue(nil) + } + + @IBAction func onNext(_ sender: AnyObject?) { + if let email = emailTextField.text, + let password = passwordTextField.text, + let username = usernameTextField.text { + self.signUp(withEmail: email, andPassword: password, andUsername: username) + } + } + + @IBAction func onCancel(_ sender: AnyObject) { + self.cancelAuthorization() + } + + @IBAction func onBack(_ sender: AnyObject) { + self.onBack() + } + @IBAction func onViewSelected(_ sender: AnyObject) { + emailTextField.resignFirstResponder() + passwordTextField.resignFirstResponder() + usernameTextField.resignFirstResponder() + } + + // MARK: - UITextFieldDelegate methods + + @IBAction func updateTextFieldValue(_ sender: AnyObject?) { + if let email = emailTextField.text, + let password = passwordTextField.text, + let username = usernameTextField.text { + + nextButton.isEnabled = !email.isEmpty && !password.isEmpty && !username.isEmpty + self.didChangeEmail(email, orPassword: password, orUserName: username) + } + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + if textField == emailTextField { + usernameTextField.becomeFirstResponder() + } else if textField == usernameTextField { + passwordTextField.becomeFirstResponder() + } else if textField == passwordTextField { + self.onNext(nil) + } + + return false + } + +} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignUpViewController.xib b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignUpViewController.xib new file mode 100644 index 00000000000..4cd1fef8a82 --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordSignUpViewController.xib @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordVerificationViewController.swift b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordVerificationViewController.swift new file mode 100644 index 00000000000..2e50a6e018e --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordVerificationViewController.swift @@ -0,0 +1,95 @@ +// +// Copyright (c) 2016 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import FirebaseAuthUI +import FirebaseAuth + +@objc(FIRCustomPasswordVerificationViewController) + +class FIRCustomPasswordVerificationViewController: FIRPasswordVerificationViewController, UITextFieldDelegate { + fileprivate(set) var userEmail: String + + @IBOutlet weak var infoLabel: UILabel! + @IBOutlet weak var passwordTextField: UITextField! + @IBOutlet weak var nextButton: UIBarButtonItem! + + override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, authUI: FIRAuthUI, email: String?, newCredential: FIRAuthCredential) { + userEmail = email ?? "" + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil, authUI: authUI, email: email, newCredential: newCredential) + + infoLabel.text = "You’ve already used \(userEmail). Enter your password for that account to sign in." + } + + required init?(coder aDecoder: NSCoder) { + userEmail = "" + super.init(coder: aDecoder) + } + + override func viewDidLoad() { + super.viewDidLoad() + + //override action of default 'Next' button to use custom layout elements' + self.navigationItem.rightBarButtonItem?.target = self + self.navigationItem.rightBarButtonItem?.action = #selector(onNext(_:)) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + //update state of all UI elements (e g disable 'Next' buttons) + self.updateTextFieldValue(nil) + } + + @IBAction func onForgotPassword(_ sender: AnyObject) { + self.forgotPassword() + } + + @IBAction func onNext(_ sender: AnyObject?) { + if let password = passwordTextField.text { + self.verifyPassword(password) + } + } + + @IBAction func onCancel(_ sender: AnyObject) { + self.cancelAuthorization() + } + + @IBAction func onBack(_ sender: AnyObject) { + self.onBack() + } + + @IBAction func onViewSelected(_ sender: AnyObject) { + passwordTextField.resignFirstResponder() + } + + // MARK: - UITextFieldDelegate methods + + @IBAction func updateTextFieldValue(_ sender: AnyObject?) { + if let password = passwordTextField.text { + nextButton.isEnabled = !password.isEmpty + self.didChangePassword(password) + } + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + if textField == passwordTextField { + self.onNext(nil) + } + + return false + } +} diff --git a/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordVerificationViewController.xib b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordVerificationViewController.xib new file mode 100644 index 00000000000..74e519d0c93 --- /dev/null +++ b/samples/swift/FirebaseUI-demo-swift/Samples/Auth/FIRCustomPasswordVerificationViewController.xib @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +