- handled theme 2 player pause while the radio is opened and closed

- Completed forget username flow with hindi language
- Completed app update functionality, need the api to be updated as the version will not be a double, its going to be string
This commit is contained in:
2024-08-20 19:50:11 +05:30
parent 9b9e95301e
commit 750cc59cde
23 changed files with 903 additions and 98 deletions

View File

@@ -12,6 +12,12 @@
5202AB012BDFA7900043B7BD /* EmailValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5202AB002BDFA7900043B7BD /* EmailValidation.swift */; };
520346962C64E29A00D0BD20 /* MyListViewAllCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 520346952C64E29A00D0BD20 /* MyListViewAllCell.xib */; };
520346972C64E29A00D0BD20 /* MyListViewAllCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 520346942C64E29A00D0BD20 /* MyListViewAllCell.swift */; };
520B15092C74652D00C14E5E /* WOKA.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 520B15072C74652D00C14E5E /* WOKA.xcdatamodeld */; };
520B150B2C746A2700C14E5E /* UsernameCheckVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 520B150A2C746A2700C14E5E /* UsernameCheckVC.swift */; };
520B150D2C746AFF00C14E5E /* UserNameDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 520B150C2C746AFF00C14E5E /* UserNameDM.swift */; };
520CE6AD2C7483CE00974228 /* PopViewControllerGeneric.swift in Sources */ = {isa = PBXBuildFile; fileRef = 520CE6AC2C7483CE00974228 /* PopViewControllerGeneric.swift */; };
520CE6AF2C74999200974228 /* AppUpdateDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 520CE6AE2C74999200974228 /* AppUpdateDM.swift */; };
520CE6B12C74BB9D00974228 /* AppUpdateVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 520CE6B02C74BB9D00974228 /* AppUpdateVC.swift */; };
5219C2C22C086D9C00A1DF4D /* DataTypeConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5219C2C12C086D9B00A1DF4D /* DataTypeConversion.swift */; };
521CB1002C493DB80085BDF8 /* JWPlayerKit in Frameworks */ = {isa = PBXBuildFile; productRef = 521CB0FF2C493DB80085BDF8 /* JWPlayerKit */; };
522242662BFC74380085C632 /* MyListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242632BFC74380085C632 /* MyListVC.swift */; };
@@ -337,7 +343,6 @@
9CBE1B432C0F37B300CA6E61 /* DropDown.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBE1B382C0F37B200CA6E61 /* DropDown.swift */; };
9CBE1B442C0F37B300CA6E61 /* DropDown+Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBE1B392C0F37B200CA6E61 /* DropDown+Appearance.swift */; };
9CBE1B452C0F37B300CA6E61 /* DropDownCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBE1B3A2C0F37B200CA6E61 /* DropDownCell.swift */; };
9CC0D2F82C6F339D0019DF73 /* WOKA.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 9CC0D2F62C6F339D0019DF73 /* WOKA.xcdatamodeld */; };
9CC0D2FA2C6F33BE0019DF73 /* AuthFuncUserVideoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CC0D2F92C6F33BE0019DF73 /* AuthFuncUserVideoView.swift */; };
9CC0D2FC2C6F5CAE0019DF73 /* PlayerVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CC0D2FB2C6F5CAE0019DF73 /* PlayerVM.swift */; };
9CDAEB032C53B97B00890C47 /* VersionTexts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAEB022C53B97B00890C47 /* VersionTexts.swift */; };
@@ -398,8 +403,14 @@
5202AB002BDFA7900043B7BD /* EmailValidation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmailValidation.swift; sourceTree = "<group>"; };
520346942C64E29A00D0BD20 /* MyListViewAllCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyListViewAllCell.swift; sourceTree = "<group>"; };
520346952C64E29A00D0BD20 /* MyListViewAllCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyListViewAllCell.xib; sourceTree = "<group>"; };
520B15082C74652D00C14E5E /* WOKA.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = WOKA.xcdatamodel; sourceTree = "<group>"; };
520B150A2C746A2700C14E5E /* UsernameCheckVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameCheckVC.swift; sourceTree = "<group>"; };
520B150C2C746AFF00C14E5E /* UserNameDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserNameDM.swift; sourceTree = "<group>"; };
520B6E3E2C0751E90091C478 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Theme.strings; sourceTree = "<group>"; };
520B6E402C0751EF0091C478 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Theme.strings; sourceTree = "<group>"; };
520CE6AC2C7483CE00974228 /* PopViewControllerGeneric.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopViewControllerGeneric.swift; sourceTree = "<group>"; };
520CE6AE2C74999200974228 /* AppUpdateDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdateDM.swift; sourceTree = "<group>"; };
520CE6B02C74BB9D00974228 /* AppUpdateVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdateVC.swift; sourceTree = "<group>"; };
5219C2C12C086D9B00A1DF4D /* DataTypeConversion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataTypeConversion.swift; sourceTree = "<group>"; };
522242632BFC74380085C632 /* MyListVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MyListVC.swift; sourceTree = "<group>"; };
522242652BFC74380085C632 /* TabBarVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TabBarVC.swift; sourceTree = "<group>"; };
@@ -720,7 +731,6 @@
9CBE1B392C0F37B200CA6E61 /* DropDown+Appearance.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DropDown+Appearance.swift"; sourceTree = "<group>"; };
9CBE1B3A2C0F37B200CA6E61 /* DropDownCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DropDownCell.swift; sourceTree = "<group>"; };
9CBE1B3C2C0F37B200CA6E61 /* DropDown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DropDown.h; sourceTree = "<group>"; };
9CC0D2F72C6F339D0019DF73 /* WOKA.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = WOKA.xcdatamodel; sourceTree = "<group>"; };
9CC0D2F92C6F33BE0019DF73 /* AuthFuncUserVideoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthFuncUserVideoView.swift; sourceTree = "<group>"; };
9CC0D2FB2C6F5CAE0019DF73 /* PlayerVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerVM.swift; sourceTree = "<group>"; };
9CDAEB022C53B97B00890C47 /* VersionTexts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionTexts.swift; sourceTree = "<group>"; };
@@ -934,7 +944,7 @@
9C535DC82C00C34000DA6DCD /* Theme */,
52DAC6462C21761700E2F85B /* WebSeries */,
9C834ED92C1C20EC00B29A9C /* WOKA.entitlements */,
9CC0D2F62C6F339D0019DF73 /* WOKA.xcdatamodeld */,
520B15072C74652D00C14E5E /* WOKA.xcdatamodeld */,
52ACC1292C610EC900791528 /* PersistentStorage.swift */,
);
path = WOKA;
@@ -975,6 +985,7 @@
9C27E16A2BDB774D00EC1DA9 /* CarouselData.swift */,
529B0DD52C070C0F00CFC54B /* GuestDataDM.swift */,
9C23FB782C62164600F4DC5C /* URLStaticDM.swift */,
520CE6AE2C74999200974228 /* AppUpdateDM.swift */,
);
path = Model;
sourceTree = "<group>";
@@ -1480,6 +1491,7 @@
9CB4C5A82C118EF300737C00 /* NavBarColor.swift */,
525861CF2C4F9E3200C33C79 /* SwipeTableViewFont.swift */,
9CDAEB022C53B97B00890C47 /* VersionTexts.swift */,
520CE6AC2C7483CE00974228 /* PopViewControllerGeneric.swift */,
);
path = Helpers;
sourceTree = "<group>";
@@ -1764,6 +1776,7 @@
5259545B2BEBB80400191286 /* AvatarDM.swift */,
52A3F6A42BECBA8D0000BB0B /* LinkedChildDM.swift */,
9C0A853E2BEE35340093783D /* ForgotPassDM.swift */,
520B150C2C746AFF00C14E5E /* UserNameDM.swift */,
);
path = Model;
sourceTree = "<group>";
@@ -1810,6 +1823,8 @@
9CBCB2A42BE50D49007D7934 /* NewPasswordVC.swift */,
52A3F6AA2BECBF550000BB0B /* LinkedChildVC.swift */,
529B0DD32C06156B00CFC54B /* LoginNavVC.swift */,
520B150A2C746A2700C14E5E /* UsernameCheckVC.swift */,
520CE6B02C74BB9D00974228 /* AppUpdateVC.swift */,
);
path = Controller;
sourceTree = "<group>";
@@ -2251,6 +2266,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
520B15092C74652D00C14E5E /* WOKA.xcdatamodeld in Sources */,
9C535DC62C00BF2400DA6DCD /* HomeExploreCell.swift in Sources */,
52D774EF2BDFC50D001D87DE /* StringValidations.swift in Sources */,
52A6DCC52C4F8EA800F63C51 /* CartListVC.swift in Sources */,
@@ -2315,12 +2331,12 @@
5202AB012BDFA7900043B7BD /* EmailValidation.swift in Sources */,
52D6A24E2C22B3AB00145908 /* WebSeriesShowListDM.swift in Sources */,
52B8D4E12C04A25E00ED65F3 /* BasicTransitionAnimator.swift in Sources */,
520CE6B12C74BB9D00974228 /* AppUpdateVC.swift in Sources */,
52AF71F02C36B29A00BC5972 /* GamesListDM.swift in Sources */,
52BC3BF02C1701F8002FACA6 /* BlogDM.swift in Sources */,
52A6DCA02C4E3AA600F63C51 /* ShopListingCell.swift in Sources */,
525954192BE8CC3400191286 /* ConstantString.swift in Sources */,
52D774EB2BDFC0BF001D87DE /* OTPVC.swift in Sources */,
9CC0D2F82C6F339D0019DF73 /* WOKA.xcdatamodeld in Sources */,
9C8446872C40FC6E003E3E53 /* AVPlayerTesting.swift in Sources */,
52AF71F42C36C40B00BC5972 /* GamesWebViewVC.swift in Sources */,
9C007F202C255DF200F798C2 /* EpisodeListingDM.swift in Sources */,
@@ -2469,6 +2485,7 @@
9C27E1722BDB86B600EC1DA9 /* OnBoardCell.swift in Sources */,
525861D82C4FD38D00C33C79 /* CartPaymentOptionsCell.swift in Sources */,
529B0DD42C06156B00CFC54B /* LoginNavVC.swift in Sources */,
520B150B2C746A2700C14E5E /* UsernameCheckVC.swift in Sources */,
9C23FB792C62164600F4DC5C /* URLStaticDM.swift in Sources */,
52A981D72C1B0E27000E0BEC /* FavouriteCell.swift in Sources */,
52BFB0652C5B5B4F0038D750 /* BlogsVC.swift in Sources */,
@@ -2478,6 +2495,7 @@
52663FF72BDFACF60001D8CE /* ShadowView.swift in Sources */,
522D65602C1ACD8D0021E505 /* UserNotificationVC.swift in Sources */,
52AC2D252C295A7900337473 /* TeaserDM.swift in Sources */,
520B150D2C746AFF00C14E5E /* UserNameDM.swift in Sources */,
9C535DC22C00B36900DA6DCD /* ThemeTwoVC.swift in Sources */,
9CA7C6C22C1095B600D73742 /* ProfileVM.swift in Sources */,
9CB3D0912C37D6930062869D /* KaraokeDetailsVC.swift in Sources */,
@@ -2486,6 +2504,7 @@
9C9BE46E2C663B1600C48D6A /* JWKaraokePlayerVM.swift in Sources */,
9CBE1B3F2C0F37B300CA6E61 /* DPDConstants.swift in Sources */,
9CDAEB102C53F12800890C47 /* SwiftyInnerShadowLayer.swift in Sources */,
520CE6AD2C7483CE00974228 /* PopViewControllerGeneric.swift in Sources */,
52A6DCA42C4E48AF00F63C51 /* ShopSuperCategoryDM.swift in Sources */,
52B8D4DA2C04A25E00ED65F3 /* Preferences.swift in Sources */,
52FB2D8F2BDF898F0009B0C7 /* TextFieldPadding.swift in Sources */,
@@ -2505,6 +2524,7 @@
527A2BCA2C57776A0080DF9B /* AddNewAddressVC.swift in Sources */,
9C56E8462BDBEE6400E4CA14 /* EmailVC.swift in Sources */,
52A6DCC92C4F906900F63C51 /* CartListingDM.swift in Sources */,
520CE6AF2C74999200974228 /* AppUpdateDM.swift in Sources */,
522D65622C1ACDA40021E505 /* CommonNwCall.swift in Sources */,
52D6A2482C21A3A500145908 /* WebSeriesVM.swift in Sources */,
525327D92BFCDDF700F64283 /* AuthFuncStartupSoundHandling.swift in Sources */,
@@ -3076,14 +3096,14 @@
/* End XCSwiftPackageProductDependency section */
/* Begin XCVersionGroup section */
9CC0D2F62C6F339D0019DF73 /* WOKA.xcdatamodeld */ = {
520B15072C74652D00C14E5E /* WOKA.xcdatamodeld */ = {
isa = XCVersionGroup;
children = (
9CC0D2F72C6F339D0019DF73 /* WOKA.xcdatamodel */,
520B15082C74652D00C14E5E /* WOKA.xcdatamodel */,
);
currentVersion = 9CC0D2F72C6F339D0019DF73 /* WOKA.xcdatamodel */;
currentVersion = 520B15082C74652D00C14E5E /* WOKA.xcdatamodel */;
name = WOKA.xcdatamodeld;
path = /Users/bilal/Desktop/woka_native_ios_swift/WOKA/WOKA.xcdatamodeld;
path = /Users/macbookpro/Desktop/WOKA/WOKA/WOKA.xcdatamodeld;
sourceTree = "<group>";
versionGroupType = wrapper.xcdatamodel;
};

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group 52572.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

View File

@@ -24,5 +24,8 @@ extension K{
static let enterChildName = "Enter your child name"
static let enterPassword = "Enter your password"
static let forgotUsername = "Forgot Username"
}
}

View File

@@ -51,40 +51,75 @@
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="xww-d1-beY">
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="Q6Y-QG-Pbh">
<rect key="frame" x="10" y="102.66666666666666" width="370" height="98.666666666666657"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CAN WE HAVE YOUR PARENTS EMAIL?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="STc-F9-ORA">
<rect key="frame" x="0.0" y="0.0" width="370" height="18.666666666666668"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your email" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="DSB-Ge-wNO" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="33.666666666666686" width="370" height="50"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="MQ3-QN-YF3"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="emailAddress" enablesReturnKeyAutomatically="YES" textContentType="email"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="paddingLeftCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="paddingRightCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JHJ-Zh-JC5">
<rect key="frame" x="0.0" y="98.666666666666686" width="370" height="0.0"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="xww-d1-beY">
<rect key="frame" x="0.0" y="0.0" width="370" height="98.666666666666671"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CAN WE HAVE YOUR EMAIL?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="STc-F9-ORA">
<rect key="frame" x="0.0" y="0.0" width="370" height="18.666666666666668"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your email" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="DSB-Ge-wNO" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="33.666666666666686" width="370" height="50"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="MQ3-QN-YF3"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="emailAddress" enablesReturnKeyAutomatically="YES" textContentType="email"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="paddingLeftCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="paddingRightCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JHJ-Zh-JC5">
<rect key="frame" x="0.0" y="98.666666666666686" width="370" height="0.0"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
<stackView hidden="YES" opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="d6A-f4-E4U">
<rect key="frame" x="0.0" y="0.0" width="370" height="65"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SELECT USER TYPE" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cli-as-L7V" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="370" height="0.0"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Please select user type" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="aPP-h8-int" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="15" width="370" height="50"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="ZWO-qv-MzN"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" enablesReturnKeyAutomatically="YES"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="paddingLeftCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="paddingRightCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
</subviews>
</stackView>
</subviews>
</stackView>
</subviews>
@@ -141,6 +176,8 @@
<outlet property="emailVerifyLabel" destination="lqT-ZV-x5p" id="EBo-jq-vYb"/>
<outlet property="enterEmailTF" destination="DSB-Ge-wNO" id="D55-hm-xCe"/>
<outlet property="nextBtn" destination="zNR-RE-Ax8" id="5Lg-cZ-4HL"/>
<outlet property="userType" destination="aPP-h8-int" id="zx6-sQ-lKh"/>
<outlet property="userTypeStack" destination="d6A-f4-E4U" id="ZuD-b8-MMk"/>
<outlet property="wokaLogoTopConstriant" destination="Ozh-zK-f9z" id="YEf-Xn-jKl"/>
</connections>
</viewController>
@@ -833,14 +870,14 @@ Sent to Your Parents Email</string>
<rect key="frame" x="0.0" y="107.66666666666669" width="430" height="790.33333333333326"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="aNK-S5-pik">
<rect key="frame" x="0.0" y="0.0" width="430" height="766.33333333333337"/>
<rect key="frame" x="0.0" y="0.0" width="430" height="765.33333333333337"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Y9q-mR-AlW">
<rect key="frame" x="20" y="0.0" width="390" height="62.333333333333336"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="Krs-Zs-R6t">
<rect key="frame" x="20" y="62.333333333333343" width="390" height="444.33333333333326"/>
<rect key="frame" x="20" y="62.333333333333343" width="390" height="443.33333333333326"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Login to WOKA" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1T4-5K-cXT" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="390" height="31.666666666666668"/>
@@ -849,7 +886,7 @@ Sent to Your Parents Email</string>
<nil key="highlightedColor"/>
</label>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="EhK-1C-Xey">
<rect key="frame" x="0.0" y="101.66666666666666" width="390" height="342.66666666666674"/>
<rect key="frame" x="0.0" y="101.66666666666666" width="390" height="341.66666666666674"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="krT-0d-tCQ">
<rect key="frame" x="0.0" y="0.0" width="390" height="98.666666666666671"/>
@@ -888,7 +925,7 @@ Sent to Your Parents Email</string>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="fVp-fO-1fH">
<rect key="frame" x="0.0" y="128.66666666666663" width="390" height="134"/>
<rect key="frame" x="0.0" y="128.66666666666663" width="390" height="133"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="ebQ-va-83Q">
<rect key="frame" x="0.0" y="0.0" width="390" height="98.666666666666671"/>
@@ -926,21 +963,37 @@ Sent to Your Parents Email</string>
</label>
</subviews>
</stackView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yp6-2q-OZC" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="103.66666666666669" width="390" height="30.333333333333343"/>
<color key="tintColor" name="TextDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Forgot Password">
<fontDescription key="titleFontDescription" name="Exo2-Regular" family="Exo 2" pointSize="14"/>
</buttonConfiguration>
<connections>
<action selector="forgotPasswordBtnTapped:" destination="vuc-DA-J2M" eventType="touchUpInside" id="2dS-KN-qUj"/>
</connections>
</button>
<stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" translatesAutoresizingMaskIntoConstraints="NO" id="A4q-bi-Tuo">
<rect key="frame" x="0.0" y="103.66666666666669" width="390" height="29.333333333333343"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9jK-cQ-yP9" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="132.66666666666666" height="29.333333333333332"/>
<color key="tintColor" name="TextDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Forgot Username?">
<fontDescription key="titleFontDescription" name="Exo2-Regular" family="Exo 2" pointSize="13"/>
</buttonConfiguration>
<connections>
<action selector="forgotUsername:" destination="vuc-DA-J2M" eventType="touchUpInside" id="uKw-PU-y54"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yp6-2q-OZC" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="259.66666666666669" y="0.0" width="130.33333333333331" height="29.333333333333332"/>
<color key="tintColor" name="TextDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Forgot Password?">
<fontDescription key="titleFontDescription" name="Exo2-Regular" family="Exo 2" pointSize="13"/>
</buttonConfiguration>
<connections>
<action selector="forgotPasswordBtnTapped:" destination="vuc-DA-J2M" eventType="touchUpInside" id="2dS-KN-qUj"/>
</connections>
</button>
</subviews>
</stackView>
</subviews>
</stackView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OFt-kx-VfD" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="292.66666666666669" width="390" height="50"/>
<rect key="frame" x="0.0" y="291.66666666666669" width="390" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="Tle-PZ-1B4"/>
</constraints>
@@ -959,11 +1012,11 @@ Sent to Your Parents Email</string>
</subviews>
</stackView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tOZ-1S-7K5">
<rect key="frame" x="20" y="506.66666666666669" width="390" height="124.66666666666669"/>
<rect key="frame" x="20" y="505.66666666666669" width="390" height="124.66666666666669"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="Nnb-iQ-OQs">
<rect key="frame" x="20" y="631.33333333333337" width="390" height="105"/>
<rect key="frame" x="20" y="630.33333333333337" width="390" height="105"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ly3-jW-G7X" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="390" height="35"/>
@@ -994,7 +1047,7 @@ Sent to Your Parents Email</string>
</subviews>
</stackView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Sb4-yj-JJ2">
<rect key="frame" x="20" y="736.33333333333337" width="390" height="30"/>
<rect key="frame" x="20" y="735.33333333333337" width="390" height="30"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="RxX-pL-7Ux"/>
@@ -1434,6 +1487,222 @@ Sent to Your Parents Email</string>
</objects>
<point key="canvasLocation" x="3098.5507246376815" y="-27.455357142857142"/>
</scene>
<!--Username CheckVC-->
<scene sceneID="Hzu-Ie-VRg">
<objects>
<viewController storyboardIdentifier="UsernameCheckVC" id="n2R-T8-I1b" customClass="UsernameCheckVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="4YA-Cd-JNy">
<rect key="frame" x="0.0" y="0.0" width="430" height="932"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="XCD-Eq-dfg">
<rect key="frame" x="0.0" y="0.0" width="428" height="932"/>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WokaLogo" translatesAutoresizingMaskIntoConstraints="NO" id="hPv-w5-A5k">
<rect key="frame" x="144" y="50" width="140" height="52.666666666666657"/>
<constraints>
<constraint firstAttribute="width" secondItem="hPv-w5-A5k" secondAttribute="height" multiplier="8:3" id="3G1-6h-fef"/>
<constraint firstAttribute="width" constant="140" id="Tgm-h7-QiJ"/>
</constraints>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="60" translatesAutoresizingMaskIntoConstraints="NO" id="b6i-JR-2Em">
<rect key="frame" x="34" y="132.66666666666669" width="374" height="675.33333333333326"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Username Found" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sbg-9k-ezS" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="0.0" width="354" height="29"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="24"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="J71-Ge-En8">
<rect key="frame" x="10" y="89" width="354" height="586.33333333333337"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Username linked to your account" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="963-dD-SFa" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="354" height="19.333333333333332"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="InZ-c5-sma">
<rect key="frame" x="0.0" y="39.333333333333371" width="354" height="547"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tableView>
</subviews>
</stackView>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="35" translatesAutoresizingMaskIntoConstraints="NO" id="KTf-VW-iuU">
<rect key="frame" x="30" y="828" width="368" height="50"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pa7-nj-fa0" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="368" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="t2D-jB-n8u"/>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="Go to login?">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
<connections>
<action selector="goToLoginTapped:" destination="n2R-T8-I1b" eventType="touchUpInside" id="wpp-mN-DDP"/>
</connections>
</button>
</subviews>
</stackView>
</subviews>
<viewLayoutGuide key="safeArea" id="LaN-mX-OTL"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="KTf-VW-iuU" firstAttribute="top" secondItem="b6i-JR-2Em" secondAttribute="bottom" constant="20" id="12Q-as-BHp"/>
<constraint firstItem="b6i-JR-2Em" firstAttribute="top" secondItem="hPv-w5-A5k" secondAttribute="bottom" constant="30" id="6Nd-RN-ZcF"/>
<constraint firstItem="LaN-mX-OTL" firstAttribute="trailing" secondItem="b6i-JR-2Em" secondAttribute="trailing" constant="20" id="9FB-tF-nEL"/>
<constraint firstItem="hPv-w5-A5k" firstAttribute="top" secondItem="4YA-Cd-JNy" secondAttribute="top" constant="50" id="9hW-qL-gAp"/>
<constraint firstItem="LaN-mX-OTL" firstAttribute="bottom" secondItem="KTf-VW-iuU" secondAttribute="bottom" constant="20" id="JON-C3-Ny0"/>
<constraint firstItem="KTf-VW-iuU" firstAttribute="leading" secondItem="LaN-mX-OTL" secondAttribute="leading" constant="30" id="KWL-18-18s"/>
<constraint firstItem="LaN-mX-OTL" firstAttribute="trailing" secondItem="KTf-VW-iuU" secondAttribute="trailing" constant="30" id="Tzu-VX-fxF"/>
<constraint firstAttribute="bottom" secondItem="XCD-Eq-dfg" secondAttribute="bottom" id="l8a-eA-wxG"/>
<constraint firstItem="XCD-Eq-dfg" firstAttribute="top" secondItem="4YA-Cd-JNy" secondAttribute="top" id="mja-c6-rlx"/>
<constraint firstItem="hPv-w5-A5k" firstAttribute="centerX" secondItem="XCD-Eq-dfg" secondAttribute="centerX" id="oKG-cJ-JWy"/>
<constraint firstItem="XCD-Eq-dfg" firstAttribute="leading" secondItem="LaN-mX-OTL" secondAttribute="leading" id="q7L-kN-CAV"/>
<constraint firstItem="LaN-mX-OTL" firstAttribute="trailing" secondItem="XCD-Eq-dfg" secondAttribute="trailing" id="use-fy-ytU"/>
<constraint firstItem="b6i-JR-2Em" firstAttribute="leading" secondItem="4YA-Cd-JNy" secondAttribute="leading" constant="20" id="xHm-vS-3b9"/>
</constraints>
</view>
<navigationItem key="navigationItem" id="01A-oq-yCR"/>
<connections>
<outlet property="nextBtn" destination="pa7-nj-fa0" id="Z0q-jG-Sm7"/>
<outlet property="tableView" destination="InZ-c5-sma" id="Sy8-yV-dIL"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="xdB-Hn-XMw" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2323" y="709"/>
</scene>
<!--App UpdateVC-->
<scene sceneID="IuV-np-APh">
<objects>
<viewController storyboardIdentifier="AppUpdateVC" id="HsX-KJ-i6z" customClass="AppUpdateVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="FXE-GF-5rc">
<rect key="frame" x="0.0" y="0.0" width="430" height="932"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="Lbh-el-EkQ">
<rect key="frame" x="0.0" y="0.0" width="430" height="932"/>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="2dT-gF-4m0">
<rect key="frame" x="15" y="79" width="400" height="632.66666666666663"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WokaLogo" translatesAutoresizingMaskIntoConstraints="NO" id="VuJ-ZQ-RH9">
<rect key="frame" x="20" y="20" width="372" height="50"/>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Uue-Q9-Cnp">
<rect key="frame" x="20" y="90" width="372" height="10"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="10" id="sLg-hK-SXM"/>
</constraints>
</view>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="AppUpdate" translatesAutoresizingMaskIntoConstraints="NO" id="xdr-vX-gJM">
<rect key="frame" x="20" y="120" width="372" height="330"/>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HKv-C9-6Db">
<rect key="frame" x="20" y="470" width="372" height="10"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="10" id="LwC-is-uSK"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7Hx-6L-TGB" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="20" y="500" width="372" height="29"/>
<attributedString key="attributedText">
<fragment content="New update available">
<attributes>
<color key="NSColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<font key="NSFont" size="24" name="Exo2-SemiBold"/>
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
</attributedString>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Unlock enhanced features and improved performance with our latest app update" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="VAi-9b-TRE" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="20" y="549" width="372" height="75.666666666666629"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="21"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<edgeInsets key="layoutMargins" top="20" left="20" bottom="8" right="8"/>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="HzF-hE-J99">
<rect key="frame" x="15" y="838" width="400" height="50"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Lry-pO-xkV" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="192.66666666666666" height="50"/>
<color key="backgroundColor" name="ImageDarkBlue"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="Skip">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
<connections>
<action selector="btnTapped:" destination="HsX-KJ-i6z" eventType="touchUpInside" id="YwV-Y2-Ou4"/>
<action selector="nextBtnTapped:" destination="Yeg-Vy-0ZA" eventType="touchUpInside" id="2PO-Jt-uiu"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Mm6-A3-H8d" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="207.66666666666663" y="0.0" width="192.33333333333337" height="50"/>
<color key="backgroundColor" name="ImageDarkBlue"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="Update App">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
<connections>
<action selector="btnTapped:" destination="HsX-KJ-i6z" eventType="touchUpInside" id="bUM-gp-ha5"/>
<action selector="nextBtnTapped:" destination="Yeg-Vy-0ZA" eventType="touchUpInside" id="iTD-Jx-Wah"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="height" constant="50" id="UWN-cC-4WD"/>
</constraints>
</stackView>
</subviews>
<viewLayoutGuide key="safeArea" id="eG9-I8-s7g"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="Lbh-el-EkQ" firstAttribute="leading" secondItem="eG9-I8-s7g" secondAttribute="leading" id="05k-8h-Byf"/>
<constraint firstItem="eG9-I8-s7g" firstAttribute="bottom" secondItem="HzF-hE-J99" secondAttribute="bottom" constant="10" id="AnC-aA-XBZ"/>
<constraint firstItem="HzF-hE-J99" firstAttribute="top" relation="greaterThanOrEqual" secondItem="2dT-gF-4m0" secondAttribute="bottom" constant="20" id="E93-nR-wr1"/>
<constraint firstItem="xdr-vX-gJM" firstAttribute="height" secondItem="FXE-GF-5rc" secondAttribute="height" multiplier="0.354077" id="EZd-5U-nTU"/>
<constraint firstItem="eG9-I8-s7g" firstAttribute="trailing" secondItem="Lbh-el-EkQ" secondAttribute="trailing" id="I0B-gG-wxq"/>
<constraint firstItem="VuJ-ZQ-RH9" firstAttribute="height" secondItem="FXE-GF-5rc" secondAttribute="height" multiplier="0.0536481" id="I9v-5M-id7"/>
<constraint firstItem="Lbh-el-EkQ" firstAttribute="top" secondItem="FXE-GF-5rc" secondAttribute="top" id="OXu-IY-hHZ"/>
<constraint firstItem="2dT-gF-4m0" firstAttribute="top" secondItem="eG9-I8-s7g" secondAttribute="top" constant="20" id="YO3-cn-o68"/>
<constraint firstItem="HzF-hE-J99" firstAttribute="leading" secondItem="eG9-I8-s7g" secondAttribute="leading" constant="15" id="aP7-9F-uHg"/>
<constraint firstItem="2dT-gF-4m0" firstAttribute="leading" secondItem="eG9-I8-s7g" secondAttribute="leading" constant="15" id="apt-uX-N6O"/>
<constraint firstItem="eG9-I8-s7g" firstAttribute="trailing" secondItem="HzF-hE-J99" secondAttribute="trailing" constant="15" id="crd-zg-f4i"/>
<constraint firstAttribute="bottom" secondItem="Lbh-el-EkQ" secondAttribute="bottom" id="eud-E9-NBy"/>
<constraint firstItem="eG9-I8-s7g" firstAttribute="trailing" secondItem="2dT-gF-4m0" secondAttribute="trailing" constant="15" id="w9E-pP-4Zj"/>
</constraints>
</view>
<navigationItem key="navigationItem" id="eDH-He-iug"/>
<connections>
<outlet property="skipBtn" destination="Lry-pO-xkV" id="mve-aN-Bvi"/>
<outlet property="updateBtn" destination="Mm6-A3-H8d" id="Nct-FY-2aO"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="ajZ-h5-7Ri" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1577" y="709"/>
</scene>
</scenes>
<designables>
<designable name="42K-Uu-lPQ">
@@ -1463,6 +1732,9 @@ Sent to Your Parents Email</string>
<designable name="Skx-Ig-91N">
<size key="intrinsicContentSize" width="196.33333333333334" height="19"/>
</designable>
<designable name="aPP-h8-int">
<size key="intrinsicContentSize" width="215.66666666666666" height="20.666666666666668"/>
</designable>
<designable name="iJE-dm-qal">
<size key="intrinsicContentSize" width="198" height="19"/>
</designable>
@@ -1477,10 +1749,14 @@ Sent to Your Parents Email</string>
</designable>
</designables>
<resources>
<image name="AppUpdate" width="325.33334350585938" height="321.66665649414062"/>
<image name="BackgroundSplash" width="428" height="926"/>
<image name="Boy" width="49.666667938232422" height="50"/>
<image name="Girl" width="48.666667938232422" height="50"/>
<image name="WokaLogo" width="2224" height="450.66665649414062"/>
<namedColor name="ImageDarkBlue">
<color red="0.035000000149011612" green="0.0" blue="0.36500000953674316" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
<namedColor name="TextDarkBlue">
<color red="0.10599999874830246" green="0.050999999046325684" blue="0.60399997234344482" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>

View File

@@ -0,0 +1,126 @@
//
// AppUpdateVC.swift
// WOKA
//
// Created by MacBook Pro on 20/08/24.
//
import UIKit
import Alamofire
class AppUpdateVC: UIViewController {
@IBOutlet weak var updateBtn: LocalisedElementsButton!
@IBOutlet weak var skipBtn: LocalisedElementsButton!
var isForceUpdate = Bool()
var forceUpdateVer = String()
override func viewDidLoad() {
super.viewDidLoad()
handleViewUpdate()
}
func handleViewUpdate(){
let color1 = #colorLiteral(red: 0.144693464, green: 0.1426281333, blue: 0.6686832905, alpha: 1)
let color2 = #colorLiteral(red: 0.6901960784, green: 0.2745098039, blue: 0.7568627451, alpha: 1)
updateBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
updateBtn.roundCorner()
skipBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
skipBtn.roundCorner()
if isForceUpdate{
skipBtn.isHidden = true
}else{
skipBtn.isHidden = false
}
}
@IBAction func btnTapped(_ sender: LocalisedElementsButton) {
if sender == updateBtn{
print("Update")
// take user to appstore
redirectToAppStore()
}else{
//if user clicks skip update it to our user defaults
UserDefaults.standard.set(forceUpdateVer, forKey: K.UserDefaultsStruct.appUpdateSkipVer)
// getUserData()
if AuthFunc.shareInstance.checkLogin(){
getUserData()
}else{
//check if the static url data is fetched
UIApplication.setRootView(LoginNavVC.instantiate(from: .AuthenticationSB))
}
}
}
func redirectToAppStore() {
let appID = "6465305185" // Replace with your actual App Store ID
let appStoreURL = "https://apps.apple.com/app/id\(appID)"
if let url = URL(string: appStoreURL), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: { success in
if success {
print("Redirected to the App Store.")
} else {
print("Failed to open the App Store URL.")
}
})
} else {
print("Invalid App Store URL.")
}
}
func getUserData(){
/*
If user is guest then dont do the nw call
*/
if AuthFunc.shareInstance.getUserType() == 3{
//setusertype
AuthFunc.shareInstance.userData = UserDataDM.ResultData(id: nil, genderData: nil, birthdate: nil, email: nil, avtar: nil, avtarURL: nil, userType: "3", languageMasterID: nil, lastLogin: nil, rememberToken: nil, childDetail: nil, language: nil, alreadyLoggedIn: nil, isDeactive: nil)
UIApplication.setRootView(SideMenuController.instantiate(from: .Home))
return
}
// if AuthFunc.shareInstance.getUserType() == 3{
// UIApplication.setRootView(SideMenuController.instantiate(from: .Home))
// return
// }
Utilities.startProgressHUD()
let headers : HTTPHeaders = ["Accept-Language" : AuthFunc.shareInstance.languageSelected == .english ? "English" : "Hindi",
"access-token": AuthFunc.shareInstance.getAccessToken()]
NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Auth.get_user_data, method: .get, headers: headers) { [weak self](result : Result<BaseResponseModel<UserDataDM>, NetworkManager.APIError>) in
switch result{
case .success(let data):
guard let self else{return}
switch data.success{
case 0:
self.toast(msg: data.message ?? "Unrecognised error" , time: 2)
case 1:
guard let data = data.data?.result else{
Utilities.dismissProgressHUD()
return
}
AuthFunc.shareInstance.userData = data
Utilities.dismissProgressHUD()
//check if the static url data is fetched
if AuthFunc.shareInstance.staticURLs == nil{
AuthFunc.shareInstance.getStaticURLs()
}
DispatchQueue.main.async {
UIApplication.setRootView(SideMenuController.instantiate(from: .Home))
}
print("User Token --> ", AuthFunc.shareInstance.getAccessToken())
default:
Utilities.dismissProgressHUD()
break
}
case .failure(let error):
Utilities.dismissProgressHUD()
guard let self else{return}
self.toast(msg: error.localizedDescription , time: 2)
}
}
}
}

View File

@@ -12,6 +12,8 @@ class EmailVC: UIViewController {
@IBOutlet weak var nextBtn: LocalisedElementsButton!
@IBOutlet weak var enterEmailTF: UITextField!
@IBOutlet weak var wokaLogoTopConstriant: NSLayoutConstraint!
@IBOutlet weak var userType: UITextField!
@IBOutlet weak var userTypeStack: UIStackView!
@IBOutlet weak var beSafeLabel: UILabel!
@IBOutlet weak var emailLabel: UILabel!
@@ -44,11 +46,11 @@ class EmailVC: UIViewController {
@IBAction func nextBtnTapped(_ sender: LocalisedElementsButton) {
PersistentStorage.shared.addOthersCount()
/*
If child registers dont call api to check email, directly hit sendotp and navigate to otp screen
if parent registers check if the email exist or not and then hit sendotp
*/
Utilities.startProgressHUD()
DispatchQueue.main.async { [weak self] in
guard let self else{return}
//validate email fiirst
@@ -60,10 +62,19 @@ class EmailVC: UIViewController {
return
}
if vm.forgetUsername != nil{
if userType.text == ""{
self.toast(msg: K.ConstantString.userType, time: 1.5)
}
Utilities.startProgressHUD()
vm.getUserName()
return
}
/*
as per the user type
*/
Utilities.startProgressHUD()
switch AuthFunc.shareInstance.userType{
//if parent verify the email
case .adult:
@@ -99,6 +110,8 @@ extension EmailVC : UITextFieldDelegate{
}
return ValidatorClass.sharedInstanec.limitCharacter(length: 255,textField, shouldChangeCharactersIn: range, replacementString: string)
case userType:
return false
default:
return true
}

View File

@@ -83,6 +83,15 @@ class LoginVC: UIViewController {
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.resetPassUserNameVC) as! ResetPassUserNameVC
self.navigationController?.pushViewController(vc, animated: true)
}
@IBAction func forgotUsername(_ sender: LocalisedElementsButton) {
vm.hideErrors()
PersistentStorage.shared.addOthersCount()
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.emailVC) as! EmailVC
vc.vm.forgetUsername = true
self.navigationController?.pushViewController(vc, animated: true)
}
}

View File

@@ -0,0 +1,62 @@
//
// UsernameCheckVC.swift
// WOKA
//
// Created by MacBook Pro on 20/08/24.
//
import UIKit
import Alamofire
class UsernameCheckVC: UIViewController {
var userData = [UserNameDM]()
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var nextBtn: LocalisedElementsButton!
override func viewDidLoad() {
super.viewDidLoad()
setupCell()
let color1 = #colorLiteral(red: 0.144693464, green: 0.1426281333, blue: 0.6686832905, alpha: 1)
let color2 = #colorLiteral(red: 0.6901960784, green: 0.2745098039, blue: 0.7568627451, alpha: 1)
nextBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
nextBtn.roundCorner()
self.title = ""
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(false, animated: animated)
}
func setupCell(){
tableView.register(UINib(nibName: K.CellIdentifier.Authentication.linkedChildCell, bundle: nil), forCellReuseIdentifier: K.CellIdentifier.Authentication.linkedChildCell)
tableView.delegate = self
tableView.dataSource = self
}
@IBAction func goToLoginTapped(_ sender: LocalisedElementsButton) {
navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.popToViewController(of: LoginVC.self, animated: true)
}
}
// MARK: - TableView
extension UsernameCheckVC : TableViewSRC{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return userData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: K.CellIdentifier.Authentication.linkedChildCell, for: indexPath) as! LinkedChildCell
cell.setLinkedData(data: userData[indexPath.row])
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
}

View File

@@ -0,0 +1,13 @@
//
// UserNameDM.swift
// WOKA
//
// Created by MacBook Pro on 20/08/24.
//
import Foundation
// MARK: - UserNameDM
struct UserNameDM: Codable {
let username: String?
}

View File

@@ -33,4 +33,9 @@ class LinkedChildCell: UITableViewCell {
}
self.childName.text = data.username
}
func setLinkedData(data : UserNameDM){
self.childName.text = data.username
self.childAvatarImage.image = UIImage(named: "DefaultAvatar")
}
}

View File

@@ -12,12 +12,17 @@ class EmailVM{
weak var vc : EmailVC!
var forgetUsername : Bool?
let dropDownModule = DropDown()
var dataSource = [String]()
func initView(){
let color1 = #colorLiteral(red: 0.144693464, green: 0.1426281333, blue: 0.6686832905, alpha: 1)
let color2 = #colorLiteral(red: 0.6901960784, green: 0.2745098039, blue: 0.7568627451, alpha: 1)
vc.nextBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
vc.nextBtn.roundCorner()
vc.enterEmailTF.roundCorner()
vc.userType.roundCorner()
// Set up text field delegate
vc.enterEmailTF.delegate = vc.self
@@ -38,6 +43,42 @@ class EmailVM{
vc.beSafeLabel.text = K.AuthenticationStringConstant.safeBelow.localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
vc.emailLabel.text = K.AuthenticationStringConstant.emailBelow.localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
}
if forgetUsername != nil{ // if user is coming from forget username
vc.userTypeStack.isHidden = false
vc.beSafeLabel.text = K.AuthenticationStringConstant.forgotUsername.localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
vc.userType.delegate = self.vc
dataSource = ["I am above 16 years" , "I am below 16 years"]
vc.userType.addRightButton(title: "", tintColor: UIColor.appColor(.TextDarkBlue)!, btnImage: UIImage(named: "SupportBottomArrow"),rightPadding: 15, target: self, action: #selector(dropDownTapped))
initDropDown()
}
}
// this func will initialize the dropdown menu
func initDropDown(){
dropDownModule.anchorView = vc.userType
dropDownModule.dataSource = dataSource
dropDownModule.cornerRadius = 10
dropDownModule.bottomOffset = CGPoint(x: 0, y:(dropDownModule.anchorView?.plainView.bounds.height)!)
dropDownModule.topOffset = CGPoint(x: 0, y:-(dropDownModule.anchorView?.plainView.bounds.height)!)
dropDownModule.direction = .bottom
dropDownModule.textFont = FontCustom.shareInstance.customFont(fontName: .Exo2_Medium, size: 16)
dropDownModule.shadowColor = UIColor.appColor(.TextDarkBlue)!
dropDownModule.backgroundColor = .white
dropDownModule.shadowOffset = CGSize(width: 0, height: 1)
dropDownModule.separatorColor = UIColor.lightGray
dropDownModule.width = vc.userType.frame.width - 20
dropDownModule.selectionBackgroundColor = UIColor.appColor(.TextDarkBlue)!
dropDownModule.selectedTextColor = UIColor.white
dropDownModule.selectionAction = { [weak self] (index: Int, item: String) in
self?.vc.userType.text = item
}
}
@objc func dropDownTapped(){
self.vc.enterEmailTF.resignFirstResponder()
self.dropDownModule.show()
}
// Function to handle tap on validation icon
@@ -48,6 +89,39 @@ class EmailVM{
}
}
// MARK: - After all checks do the api call
func getUserName(){
let params: Parameters = ["email": vc.enterEmailTF.text!,
"user_type": dropDownModule.indexForSelectedRow == 0 ? 2 : 1]
let header : HTTPHeaders = ["device-id" : AuthFunc.shareInstance.getDeviceUUID(),
"Accept-Language" : AuthFunc.shareInstance.languageSelected == .english ? "English" : "Hindi"]
Utilities.startProgressHUD()
NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Auth.forgot_username, method: .post ,parameters: params, headers: header) {(result : Result<BaseResponseModel<[UserNameDM]>, NetworkManager.APIError>) in
switch result{
case .success(let data):
switch data.success{
case 0:
Utilities.dismissProgressHUD()
self.vc.toast(msg: data.message ?? "Unrecognised error" , time: 2)
case 1:
Utilities.dismissProgressHUD()
guard let dataResult = data.data else{return}
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.usernameCheckVC) as! UsernameCheckVC
vc.userData = dataResult
self.vc.navigationController?.pushViewController(vc, animated: true)
default:
break
}
case .failure(let error):
Utilities.dismissProgressHUD()
self.vc.toast(msg: error.localizedDescription, time: 2)
}
}
}
func checkEmail(){
let params: Parameters = [
"email": vc.enterEmailTF.text!,

View File

@@ -30,6 +30,8 @@ extension K{
static let dob = "Please select DOB."
static let registerUser = "Please wait registering user."
static let userType = "Please select user type."
static let error = "Error"
static let rupeeSign = ""

View File

@@ -27,6 +27,8 @@ extension K{
static let resetPassUserNameVC = "ResetPassUserNameVC"
static let newPasswordVC = "NewPasswordVC"
static let linkedChildVC = "LinkedChildVC"
static let usernameCheckVC = "UsernameCheckVC"
static let appUpdateVC = "AppUpdateVC"
}
struct Home{

View File

@@ -22,6 +22,8 @@ extension K{
static let userAccessToken = "userAccessToken"
static let defaultLanguage = "defaultLanguage"
static let userType = "userType"
static let skippedVersion = "skippedVersion"
}
}

View File

@@ -0,0 +1,22 @@
//
// PopViewControllerGeneric.swift
// WOKA
//
// Created by MacBook Pro on 20/08/24.
//
import UIKit
/*
this helps in navigation back or pop the viewcontroller as generic type
*/
extension UINavigationController {
func getViewController<T: UIViewController>(of type: T.Type) -> UIViewController? {
return self.viewControllers.first(where: { $0 is T })
}
func popToViewController<T: UIViewController>(of type: T.Type, animated: Bool) {
guard let viewController = self.getViewController(of: type) else { return }
self.popToViewController(viewController, animated: animated)
}
}

View File

@@ -36,7 +36,7 @@ extension UITextField {
extension UITextField {
func addRightButton(title: String?, tintColor : UIColor, btnImage : UIImage?, selectedImage : UIImage? = nil, target: Any?, action: Selector) {
func addRightButton(title: String?, tintColor : UIColor, btnImage : UIImage?, selectedImage : UIImage? = nil,rightPadding : CGFloat? = 10, target: Any?, action: Selector) {
// Create a button
let button = UIButton(type: .system)
button.setTitle(title, for: .normal)
@@ -46,7 +46,7 @@ extension UITextField {
button.setImage(selectedImage, for: .selected)
}
button.tintColor = tintColor
button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 10)
button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: rightPadding ?? 10)
// Set the button as the right view of the text field
self.rightView = button
self.rightViewMode = .always

View File

@@ -20,7 +20,13 @@
"Login to WOKA" = "WOKA में लॉग इन करें";
"Enter your username" = "अपना उपयोगकर्ता नाम दर्ज करें";
"Enter your password" = "अपना उपयोगकर्ता नाम दर्ज करें";
"Forgot Password" = "पासवर्ड भूल गए?";
"Forgot Password?" = "पासवर्ड भूल गए?";
"Forgot Username" = "उपयोगकर्ता नाम भूल गए";
"Forgot Username?" = "उपयोगकर्ता नाम भूल गए?";
"SELECT USER TYPE" = "उपयोगकर्ता प्रकार चुनें";
"Username Found" = "उपयोगकर्ता नाम मिला";
"Username linked to your account" = "आपके खाते से जुड़ा उपयोगकर्ता नाम";
"Go to login?" = "लॉगिन पर जाएं?";
/*
Forgot Password VC

View File

@@ -61,6 +61,16 @@ struct APIEndPoints {
UserData
*/
static let get_user_data = makeURL(path: "get_user_data")
/*
Get username
*/
static let forgot_username = makeURL(path: "forgot_username")
/*
*/
static let version_history = makeURL(path: "version_history")
}
struct SideBarNav{

View File

@@ -79,29 +79,35 @@ class SplashVC: UIViewController {
If user is loggined no need to shift the woka logo upside to new constant.
Directly Navigate user to home
*/
if AuthFunc.shareInstance.checkLogin(){
vm.getUserData()
return
} else{
//check if the static url data is fetched
if AuthFunc.shareInstance.staticURLs == nil{
AuthFunc.shareInstance.getStaticURLs()
}
// vm.getVersionHistory()
animateForward()
}
}
func animateForward(){
if AuthFunc.shareInstance.checkLogin(){
vm.getUserData()
return
}else{
//check if the static url data is fetched
if AuthFunc.shareInstance.staticURLs == nil{
AuthFunc.shareInstance.getStaticURLs()
}
UIView.animate(withDuration: 0.5, animations: {
// Update the constant value of the top constraint
self.wokaOriginY.constant = newConstant
// Inform the layout system to update
self.view.layoutIfNeeded()
}) { _ in
if !AuthFunc.shareInstance.checkLogin(){
UIView.animate(withDuration: 0.3, delay: 0,options : [.transitionCrossDissolve],animations: {
// Set the isHidden property of the view
self.languageBtnStack.isHidden = false
}) {_ in
// Inform the stack view to update its layout
self.languageBtnStack.layoutIfNeeded()
}
}
UIView.animate(withDuration: 0.5, animations: { [weak self] in
guard let self else{return}
// Update the constant value of the top constraint
self.wokaOriginY.constant = wokaOriginY.constant - 50
// Inform the layout system to update
self.view.layoutIfNeeded()
}) { _ in
if !AuthFunc.shareInstance.checkLogin(){
UIView.animate(withDuration: 0.3, delay: 0,options : [.transitionCrossDissolve],animations: {
// Set the isHidden property of the view
self.languageBtnStack.isHidden = false
}) {_ in
// Inform the stack view to update its layout
self.languageBtnStack.layoutIfNeeded()
}
}
}

View File

@@ -0,0 +1,41 @@
//
// AppUpdateDM.swift
// WOKA
//
// Created by MacBook Pro on 20/08/24.
//
import Foundation
// MARK: - AppUpdateDM
struct AppUpdateDM: Codable {
let the0: The0?
let msg: String?
let url: String?
enum CodingKeys: String, CodingKey {
case the0 = "0"
case msg, url
}
// MARK: - The0
struct The0: Codable {
let id: Int?
let versionID, releaseDate: String?
let oldVersion: Int?
let newVersion, forceUpdateVersion: Double?
let forceUpdate: Int?
let releaseNotes: String?
enum CodingKeys: String, CodingKey {
case id
case versionID = "version_id"
case releaseDate = "release_date"
case oldVersion = "old_version"
case newVersion = "new_version"
case forceUpdateVersion = "force_update_version"
case forceUpdate = "force_update"
case releaseNotes = "release_notes"
}
}
}

View File

@@ -16,7 +16,9 @@ class SplashVM{
var player: AVAudioPlayer?
func initView(){
AuthFunc.shareInstance.getStaticURLs()
if AuthFunc.shareInstance.staticURLs == nil{
AuthFunc.shareInstance.getStaticURLs()
}
vc.activityIndicator.hidesWhenStopped = true
let color1 = #colorLiteral(red: 0.144693464, green: 0.1426281333, blue: 0.6686832905, alpha: 1)
let color2 = #colorLiteral(red: 0.4862745098, green: 0.1960784314, blue: 0.7019607843, alpha: 1)
@@ -111,6 +113,72 @@ class SplashVM{
}
}
func getVersionHistory(){
let newVersion = "25.1.7"
let forceUpdateVersion = "25.1.7"
let forceUpdate = false
let currentAppVersion = Bundle.main.appVersionLong
/*
If user is guest then dont do the nw call
*/
let params : Parameters = ["device" : "2"] //1-android , 2- iOS
NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Auth.version_history, method: .get,parameters: params) { [weak self](result : Result<BaseResponseModel<AppUpdateDM>, NetworkManager.APIError>) in
switch result{
case .success(let data):
guard let self else{return}
switch data.success{
case 0:
self.vc.toast(msg: data.message ?? "Unrecognised error" , time: 2)
case 1:
guard let data = data.data?.the0 else{return}
if newVersion.isVersion(greaterThan: currentAppVersion) {
// Case: New version is greater than the current version
print("New version is greater than current version.")
/*
Check if user has skipped the force update version
*/
let skippedVer = UserDefaults.standard.string(forKey: K.UserDefaultsStruct.appUpdateSkipVer)
if skippedVer == forceUpdateVersion{
// it means user has skipped this version.
vc.animateForward()
return
}
// If ver is not skipped let user navigate to app update vc
if forceUpdate {
print("Force update required by the API.")
// nav user to force update screen
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.appUpdateVC) as! AppUpdateVC
vcPush.forceUpdateVer = forceUpdateVersion
self.vc.navigationController?.pushViewController(vcPush, animated: true)
} else {
print("Update available, but not mandatory.")
// Optional update let user skip
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.appUpdateVC) as! AppUpdateVC
vcPush.forceUpdateVer = forceUpdateVersion
self.vc.navigationController?.pushViewController(vcPush, animated: true)
}
} else {
// Case: Current version is equal to the new version
print("Current version is up-to-date.")
vc.animateForward()
}
print("data:- ", data.forceUpdateVersion)
default:
break
}
case .failure(let error):
guard let self else{return}
self.vc.toast(msg: error.localizedDescription , time: 2)
}
}
}
// handling activity indicator
func startStopIndicator(start : Bool , hide : Bool = false){
@@ -131,3 +199,25 @@ class SplashVM{
}
}
}
extension String {
func isVersion(greaterThan version: String) -> Bool {
let versionComponents = self.split(separator: ".").compactMap { Int($0) }
let comparisonComponents = version.split(separator: ".").compactMap { Int($0) }
for (index, component) in versionComponents.enumerated() {
if index < comparisonComponents.count {
if component > comparisonComponents[index] {
return true
} else if component < comparisonComponents[index] {
return false
}
} else {
return true
}
}
return versionComponents.count > comparisonComponents.count
}
}

View File

@@ -397,6 +397,7 @@
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="9fz-vc-Ufb" firstAttribute="top" secondItem="gk8-xm-Hh5" secondAttribute="top" id="DGl-Ue-JdK"/>
<constraint firstAttribute="width" secondItem="gk8-xm-Hh5" secondAttribute="height" multiplier="1:1" id="g5I-ti-l7p"/>
<constraint firstAttribute="trailing" secondItem="9fz-vc-Ufb" secondAttribute="trailing" id="vsl-Ld-Iam"/>
<constraint firstAttribute="bottom" secondItem="9fz-vc-Ufb" secondAttribute="bottom" id="xGV-rs-7OT"/>
<constraint firstItem="9fz-vc-Ufb" firstAttribute="leading" secondItem="gk8-xm-Hh5" secondAttribute="leading" id="yji-Es-JPT"/>
@@ -464,6 +465,7 @@
<constraint firstItem="XTn-ID-1Yb" firstAttribute="top" secondItem="sf9-me-n7i" secondAttribute="bottom" constant="60" id="Q9c-DO-OgW"/>
<constraint firstItem="o2x-QJ-V9A" firstAttribute="height" secondItem="UEh-jl-IQp" secondAttribute="height" multiplier="0.0558036" id="UDY-Wb-Xsa"/>
<constraint firstItem="Jbf-Kl-35X" firstAttribute="top" secondItem="sf9-me-n7i" secondAttribute="bottom" constant="10" id="VLa-Ha-6Yo"/>
<constraint firstItem="gk8-xm-Hh5" firstAttribute="height" secondItem="UEh-jl-IQp" secondAttribute="height" multiplier="0.111502" id="WJS-S3-bsF"/>
<constraint firstItem="xgH-t8-LiX" firstAttribute="height" secondItem="UEh-jl-IQp" secondAttribute="height" multiplier="0.539906" id="YFN-fY-VOP"/>
<constraint firstItem="rkf-MW-5IL" firstAttribute="centerY" secondItem="sf9-me-n7i" secondAttribute="centerY" constant="-20" id="ZVu-Px-dqT"/>
<constraint firstAttribute="trailing" secondItem="Qfe-q3-rbY" secondAttribute="trailing" constant="5" id="aJP-Fy-A7r"/>
@@ -562,16 +564,16 @@
</constraints>
</view>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="U0W-18-4oe">
<rect key="frame" x="0.0" y="45.000000000000014" width="393" height="223.33333333333337"/>
<rect key="frame" x="0.0" y="45" width="393" height="222"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="Coming Soon on WOKA" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="D2p-c5-usH" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="9.9999999999999982" width="373" height="23.333333333333329"/>
<rect key="frame" x="10" y="10" width="373" height="22"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="20"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UKc-92-GPa">
<rect key="frame" x="10" y="43.333333333333343" width="373" height="180"/>
<rect key="frame" x="10" y="42" width="373" height="180"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="MasilaComingSoon" translatesAutoresizingMaskIntoConstraints="NO" id="Kj9-jH-Y88">
<rect key="frame" x="7" y="7" width="359" height="140"/>
@@ -605,7 +607,7 @@
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="MASILA" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="biB-gs-Rgq">
<rect key="frame" x="7" y="151.99999999999997" width="359" height="21"/>
<rect key="frame" x="7" y="152" width="359" height="21.666666666666657"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="textColor" name="TextDarkBlue"/>
<nil key="highlightedColor"/>
@@ -633,16 +635,16 @@
<edgeInsets key="layoutMargins" top="10" left="10" bottom="0.0" right="10"/>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Qcq-yj-AzB">
<rect key="frame" x="0.0" y="268.33333333333331" width="393" height="208.33333333333331"/>
<rect key="frame" x="0.0" y="267" width="393" height="209"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="BLOGS" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lW0-W4-2hl" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="9.9999999999999982" width="373" height="23.333333333333329"/>
<rect key="frame" x="10" y="10" width="373" height="24"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="20"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="xup-gW-Kjh">
<rect key="frame" x="10" y="38.333333333333371" width="373" height="170"/>
<rect key="frame" x="10" y="39" width="373" height="170"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="170" id="fTZ-PQ-nXX"/>
@@ -659,16 +661,16 @@
<edgeInsets key="layoutMargins" top="10" left="10" bottom="0.0" right="10"/>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="pJu-fq-XmG">
<rect key="frame" x="0.0" y="476.66666666666663" width="393" height="267.33333333333337"/>
<rect key="frame" x="0.0" y="476" width="393" height="268"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="WOKA Songs" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FSJ-QT-rAW" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="9.9999999999999982" width="373" height="23.333333333333329"/>
<rect key="frame" x="10" y="10" width="373" height="24"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="20"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="31Z-fz-1ec">
<rect key="frame" x="10" y="43.333333333333371" width="373" height="224"/>
<rect key="frame" x="10" y="44" width="373" height="224"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tableView>
</subviews>
@@ -1331,7 +1333,7 @@
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
<systemColor name="systemBrownColor">
<color red="0.63529411759999999" green="0.51764705879999995" blue="0.36862745099999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color red="0.63529411764705879" green="0.51764705882352946" blue="0.36862745098039218" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor>
</resources>
</document>