diff --git a/MVMCoreUI/Atoms/Views/LabelWithInternalButton.swift b/MVMCoreUI/Atoms/Views/LabelWithInternalButton.swift index ca314365..502c766a 100644 --- a/MVMCoreUI/Atoms/Views/LabelWithInternalButton.swift +++ b/MVMCoreUI/Atoms/Views/LabelWithInternalButton.swift @@ -604,8 +604,8 @@ public typealias CoreObjectActionLoadPresentDelegate = MVMCoreActionDelegateProt performAction = wButtonDelegate.button?(wSelf, shouldPerformActionWithMap: actionMap, additionalData: additionalData) ?? false } - if let wDelegate = weakDelegate as? CoreObjectActionLoadPresentDelegate, performAction { - MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalData, delegate: wDelegate) + if performAction { + MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalData, delegate: weakDelegate as? CoreObjectActionLoadPresentDelegate) } } } diff --git a/MVMCoreUI/Atoms/Views/MFLoadImageView.swift b/MVMCoreUI/Atoms/Views/MFLoadImageView.swift index b08dc249..69ef1b6f 100644 --- a/MVMCoreUI/Atoms/Views/MFLoadImageView.swift +++ b/MVMCoreUI/Atoms/Views/MFLoadImageView.swift @@ -243,7 +243,7 @@ import UIKit // Gifs aren't supported by default and need special handling MVMCoreCache.shared()?.getGif(imageName, useWidth: width != nil, widthForS7: width?.intValue ?? 0, useHeight: height != nil, heightForS7: height?.intValue ?? 0, format: format, localFallbackImageName: fallbackImageName, completionHandler: finishedLoadingBlock) } else { - MVMCoreCache.shared()?.getImage(imageName, useWidth: width != nil, widthForS7: width?.intValue ?? 0, useHeight: height != nil, heightForS7: height?.intValue ?? 0, localFallbackImageName: fallbackImageName, completionHandler: finishedLoadingBlock) + MVMCoreCache.shared()?.getImage(imageName, useWidth: width != nil, widthForS7: width?.intValue ?? 0, useHeight: height != nil, heightForS7: height?.intValue ?? 0, format: format, localFallbackImageName: fallbackImageName, completionHandler: finishedLoadingBlock) } }) } diff --git a/MVMCoreUI/Atoms/Views/MVMCoreUICheckBox.m b/MVMCoreUI/Atoms/Views/MVMCoreUICheckBox.m index f7239def..ff46aa6a 100644 --- a/MVMCoreUI/Atoms/Views/MVMCoreUICheckBox.m +++ b/MVMCoreUI/Atoms/Views/MVMCoreUICheckBox.m @@ -68,7 +68,7 @@ static const CGFloat CheckBoxHeightWidth = 18.0; NSString *checkedColorHex = [json string:@"checkedColor"]; NSString *unCheckedColorHex = [json string:@"unCheckedColor"]; - UIColor *checkedColor = checkedColorHex ? [UIColor mfGetColorForHex:checkedColorHex]: [UIColor blackColor]; + UIColor *checkedColor = checkedColorHex ? [UIColor mfGetColorForHex:checkedColorHex]: [UIColor clearColor]; UIColor *unCheckedColor = unCheckedColorHex ? [UIColor mfGetColorForHex:unCheckedColorHex]: [UIColor clearColor]; [self setupWithCheckedColor:checkedColor @@ -183,6 +183,7 @@ static const CGFloat CheckBoxHeightWidth = 18.0; - (instancetype)initWithCoder:(NSCoder *)coder { self = [super initWithCoder:coder]; if (self) { + [self setupView]; [self setupWithCheckedColor:[UIColor whiteColor] unCheckColor:[UIColor whiteColor] text:nil]; [self addAccessibleProperties]; } @@ -192,6 +193,7 @@ static const CGFloat CheckBoxHeightWidth = 18.0; - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { + [self setupView]; [self setupWithCheckedColor:[UIColor whiteColor] unCheckColor:[UIColor whiteColor] text:nil]; [self addAccessibleProperties]; } @@ -241,9 +243,7 @@ static const CGFloat CheckBoxHeightWidth = 18.0; [self.checkMark.widthAnchor constraintEqualToAnchor:self.checkedSquare.widthAnchor multiplier:.4].active = YES; [self.checkMark.heightAnchor constraintEqualToAnchor:self.checkedSquare.heightAnchor multiplier:.4].active = YES; [self.checkMark.centerXAnchor constraintEqualToAnchor:self.checkedSquare.centerXAnchor].active = YES; - [self.checkMark.centerYAnchor constraintEqualToAnchor:self.checkedSquare.centerYAnchor].active = YES; - } else { - [self.checkedSquare addSubview:self.checkMark]; + [self.checkMark.centerYAnchor constraintEqualToAnchor:self.checkedSquare.centerYAnchor].active = YES; } //label diff --git a/MVMCoreUI/Containers/TabBarController/MFTabBarInteractor.h b/MVMCoreUI/Containers/TabBarController/MFTabBarInteractor.h index b08129f0..cfcf6320 100644 --- a/MVMCoreUI/Containers/TabBarController/MFTabBarInteractor.h +++ b/MVMCoreUI/Containers/TabBarController/MFTabBarInteractor.h @@ -25,6 +25,9 @@ // true while panning @property (nonatomic) BOOL panning; +//set pannable percentage 0 to 1 +@property (nonatomic) CGFloat pannablePercentage; + // can be used to keep track of if we are .. @property (nonatomic) BOOL interactive; diff --git a/MVMCoreUI/Containers/TabBarController/MFTabBarInteractor.m b/MVMCoreUI/Containers/TabBarController/MFTabBarInteractor.m index de20ef53..b8e2cee4 100644 --- a/MVMCoreUI/Containers/TabBarController/MFTabBarInteractor.m +++ b/MVMCoreUI/Containers/TabBarController/MFTabBarInteractor.m @@ -8,8 +8,6 @@ #import "MFTabBarInteractor.h" -static CGFloat pannablePercentage = 0.15; - typedef NS_ENUM(NSUInteger, MFTabBarPanningDirection) { MFTabBarPanningDirectionLeft, MFTabBarPanningDirectionRight @@ -33,6 +31,7 @@ typedef NS_ENUM(NSUInteger, MFTabBarPanningDirection) { - (nullable instancetype)initWithViewController:(nullable UIViewController *)viewController delegate:(nullable id)delegate { if (self = [super init]) { + self.pannablePercentage = 0.15; self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; [viewController.view addGestureRecognizer:self.panGesture]; self.delegate = delegate; @@ -48,8 +47,8 @@ typedef NS_ENUM(NSUInteger, MFTabBarPanningDirection) { // Simulates an edge gesture by only accepting pans at the edge of the screen. Needed because edge gesture doesn't work nicely with extended menus such as on ipad. CGRect frame = pan.view.frame; - CGRect pannableFrameLeft = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width*pannablePercentage, frame.size.height); - CGRect pannableFrameRight = CGRectMake(frame.origin.x + frame.size.width*(1-pannablePercentage), frame.origin.y, frame.size.width*pannablePercentage, frame.size.height); + CGRect pannableFrameLeft = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width*self.pannablePercentage, frame.size.height); + CGRect pannableFrameRight = CGRectMake(frame.origin.x + frame.size.width*(1-self.pannablePercentage), frame.origin.y, frame.size.width*self.pannablePercentage, frame.size.height); switch (pan.state) { case UIGestureRecognizerStateBegan: diff --git a/MVMCoreUI/Containers/TabBarController/TopTabbar.m b/MVMCoreUI/Containers/TabBarController/TopTabbar.m index 9b4e632c..c52e9d66 100644 --- a/MVMCoreUI/Containers/TabBarController/TopTabbar.m +++ b/MVMCoreUI/Containers/TabBarController/TopTabbar.m @@ -193,13 +193,7 @@ static NSString * const COLLECTION_CELL_ID = @"cell"; [label layoutIfNeeded]; label.baselineAdjustment = UIBaselineAdjustmentAlignCenters; - //set up cell acceessibility label - cell.isAccessibilityElement = NO; - cell.contentView.isAccessibilityElement = YES; - - NSString *accLabel = [title stringByAppendingString:[MVMCoreUIUtility hardcodedStringWithKey:@"AccTab"]]; - cell.contentView.accessibilityLabel = accLabel; - [cell.contentView setAccessibilityHint:[MVMCoreUIUtility hardcodedStringWithKey:@"AccTabHint"]]; + [self setCellAccessibility:cell title:label.text isSelected:NO indexPath:indexPath]; if (indexPath.row == self.selectedIndex) { label.textColor = [UIColor mfTomatoRed]; @@ -404,20 +398,27 @@ static NSString * const COLLECTION_CELL_ID = @"cell"; [cell layoutIfNeeded]; } - //setup selected tab accessibility - NSString *string = label.text; - NSString *accLabel = [string stringByAppendingString:[MVMCoreUIUtility hardcodedStringWithKey:@"toptabbar_tab_selected"]]; - cell.contentView.accessibilityLabel = accLabel; - [cell.contentView setAccessibilityHint:nil]; - self.selectedIndex = indexPath.row; if ([self.delegate respondsToSelector:@selector(topTabbar:titleForItemAtIndex:)]){ [self.delegate topTabbar:self didSelectItemAtIndex:indexPath.row]; } + + [self setCellAccessibility:cell title:label.text isSelected:YES indexPath:indexPath]; } - (void)reloadData { [self.collectionView reloadData]; } +- (void)setCellAccessibility:(UICollectionViewCell *)cell title:(NSString *)title isSelected:(BOOL)isSelected indexPath:(NSIndexPath *)indexPath { + cell.isAccessibilityElement = NO; + cell.contentView.isAccessibilityElement = YES; + NSString *accKey = isSelected ? @"toptabbar_tab_selected" : @"AccTab"; + NSString *accLabel = [title stringByAppendingString:[MVMCoreUIUtility hardcodedStringWithKey:accKey]]; + NSString *accString = [accLabel stringByAppendingString:[NSString stringWithFormat:[MVMCoreUIUtility hardcodedStringWithKey:@"AccTabIndex"], indexPath.row + 1, [self.datasource numberOfTopTabbarItems:self]]]; + cell.contentView.accessibilityLabel = accString; + NSString *accHint = isSelected ? nil : [MVMCoreUIUtility hardcodedStringWithKey:@"AccTabHint"]; + [cell.contentView setAccessibilityHint:accHint]; +} + @end diff --git a/MVMCoreUI/Styles/MFStyler.m b/MVMCoreUI/Styles/MFStyler.m index e7f14546..ca0fcd2e 100644 --- a/MVMCoreUI/Styles/MFStyler.m +++ b/MVMCoreUI/Styles/MFStyler.m @@ -13,6 +13,7 @@ #import "NSLayoutConstraint+MFConvenience.h" #import "MVMCoreUISplitViewController.h" @import MVMCore.MVMCoreDispatchUtility; +#import CGFloat const PaddingDefault = 24; CGFloat const PaddingDefaultHorizontalSpacing = 32; @@ -947,7 +948,8 @@ CGFloat const LabelWithInternalButtonLineSpace = 2; if ([times containsObject:@"DD"]) { [timeString appendString:[NSString stringWithFormat:@"%02ld",days]]; if (timeUnit == MFTimeFormatNormal) { - NSString *dayUnit = (days <= 1) ? @" day": @" days"; + NSString *dayKey = (days <= 1) ? @"CountDownDay": @"CountDownDays"; + NSString *dayUnit = [MVMCoreUIUtility hardcodedStringWithKey:dayKey]; [timeString appendString:dayUnit]; } else if (timeUnit == MFTimeFormatColon && ![[times lastObject] isEqualToString:@"DD"]) { [timeString appendString:@" : "]; @@ -962,7 +964,8 @@ CGFloat const LabelWithInternalButtonLineSpace = 2; } [timeString appendString:[NSString stringWithFormat:@"%02d",hours]]; if (timeUnit == MFTimeFormatNormal) { - NSString *hourUnit = (hours <= 1) ? @" hour": @" hours"; + NSString *hourKey = (hours <= 1) ? @"CountDownHour": @"CountDownHours"; + NSString *hourUnit = [MVMCoreUIUtility hardcodedStringWithKey:hourKey]; [timeString appendString:hourUnit]; } else if (timeUnit == MFTimeFormatColon && ![[times lastObject] isEqualToString:@"HH"]) { [timeString appendString:@" : "]; @@ -981,7 +984,8 @@ CGFloat const LabelWithInternalButtonLineSpace = 2; } [timeString appendString:[NSString stringWithFormat:@"%02d",minutes]]; if (timeUnit == MFTimeFormatNormal) { - NSString *minuteUnit = (minutes <= 1) ? @" min": @" mins"; + NSString *minKey = (minutes <= 1) ? @"CountDownMin": @"CountDownMins"; + NSString *minuteUnit = [MVMCoreUIUtility hardcodedStringWithKey:minKey]; [timeString appendString:minuteUnit]; } else if (timeUnit == MFTimeFormatColon && ![[times lastObject] isEqualToString:@"MM"]) { [timeString appendString:@" : "]; @@ -1005,7 +1009,8 @@ CGFloat const LabelWithInternalButtonLineSpace = 2; } [timeString appendString:[NSString stringWithFormat:@"%02d",seconds]]; if (timeUnit == MFTimeFormatNormal) { - NSString *secondUnit = (seconds <= 1) ? @" sec": @" secs"; + NSString *secondKey = (seconds <= 1) ? @"CountDownSec": @"CountDownSecs"; + NSString *secondUnit = [MVMCoreUIUtility hardcodedStringWithKey:secondKey]; [timeString appendString:secondUnit]; } } diff --git a/MVMCoreUI/SupportingFiles/Strings/en.lproj/Localizable.strings b/MVMCoreUI/SupportingFiles/Strings/en.lproj/Localizable.strings index 472bb9b6..96088cab 100644 --- a/MVMCoreUI/SupportingFiles/Strings/en.lproj/Localizable.strings +++ b/MVMCoreUI/SupportingFiles/Strings/en.lproj/Localizable.strings @@ -11,6 +11,7 @@ // Tab "AccTab" = ", tab"; "AccTabHint" = "Double tap to select."; +"AccTabIndex" = ", %ld of %ld"; // top alert "toptabbar_tab_selected" = ", tab, Selected"; "AccTopAlertClosed" = "Top alert notification is closed."; @@ -39,3 +40,12 @@ "AccOn" = "on"; "AccOff" = "off"; "AccToggleHint" = "double tap to toggle"; +//Styler +"CountDownDay" = " day"; +"CountDownHour" = " hour"; +"CountDownMin" = " min"; +"CountDownSec" = " sec"; +"CountDownDays" = " days"; +"CountDownHours" = " hours"; +"CountDownMins" = " mins"; +"CountDownSecs" = " secs"; diff --git a/MVMCoreUI/SupportingFiles/Strings/es-MX.lproj/Localizable.strings b/MVMCoreUI/SupportingFiles/Strings/es-MX.lproj/Localizable.strings index f640133a..a006b218 100644 --- a/MVMCoreUI/SupportingFiles/Strings/es-MX.lproj/Localizable.strings +++ b/MVMCoreUI/SupportingFiles/Strings/es-MX.lproj/Localizable.strings @@ -10,6 +10,7 @@ // Tab "AccTab" = ", pestaña"; "AccTabHint" = "Toca dos veces para seleccionar."; +"AccTabIndex" = ", %ld de %ld"; // top alert "toptabbar_tab_selected" = ", pestaña, Seleccionado"; "AccTopAlertClosed" = "La notificación de alerta máxima está desactivada."; @@ -38,3 +39,12 @@ "AccOn" = "encendido"; "AccOff" = "apagado"; "AccToggleHint" = "toca dos veces para alternar"; +//Styler +"CountDownDay" = " día"; +"CountDownHour" = " hora"; +"CountDownMin" = " min"; +"CountDownSec" = " seg"; +"CountDownDays" = " días"; +"CountDownHours" = " horas"; +"CountDownMins" = " min"; +"CountDownSecs" = " seg"; diff --git a/MVMCoreUI/SupportingFiles/Strings/es.lproj/Localizable.strings b/MVMCoreUI/SupportingFiles/Strings/es.lproj/Localizable.strings index f640133a..a006b218 100644 --- a/MVMCoreUI/SupportingFiles/Strings/es.lproj/Localizable.strings +++ b/MVMCoreUI/SupportingFiles/Strings/es.lproj/Localizable.strings @@ -10,6 +10,7 @@ // Tab "AccTab" = ", pestaña"; "AccTabHint" = "Toca dos veces para seleccionar."; +"AccTabIndex" = ", %ld de %ld"; // top alert "toptabbar_tab_selected" = ", pestaña, Seleccionado"; "AccTopAlertClosed" = "La notificación de alerta máxima está desactivada."; @@ -38,3 +39,12 @@ "AccOn" = "encendido"; "AccOff" = "apagado"; "AccToggleHint" = "toca dos veces para alternar"; +//Styler +"CountDownDay" = " día"; +"CountDownHour" = " hora"; +"CountDownMin" = " min"; +"CountDownSec" = " seg"; +"CountDownDays" = " días"; +"CountDownHours" = " horas"; +"CountDownMins" = " min"; +"CountDownSecs" = " seg";