Merge pull request #4235 from vector-im/element_4234

Show/Hide Home Screen tabs
This commit is contained in:
Gil Eluard 2021-04-20 09:46:24 +02:00 committed by GitHub
commit aa51563950
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 164 additions and 50 deletions

View file

@ -5,7 +5,7 @@ Changes to be released in next version
*
🙌 Improvements
*
* MasterTabBarController: Show/Hide Home Screen tabs (#4234).
🐛 Bugfix
*

View file

@ -214,6 +214,13 @@ final class BuildSettings: NSObject {
/// Indicates should the app log out the user when number of biometrics failures reaches `maxAllowedNumberOfBiometricsFailures`. Defaults to `false`
static let logOutUserWhenBiometricsFailuresExceeded: Bool = false
// MARK: - Main Tabs
static let homeScreenShowFavouritesTab: Bool = true
static let homeScreenShowPeopleTab: Bool = true
static let homeScreenShowRoomsTab: Bool = true
static let homeScreenShowCommunitiesTab: Bool = true
// MARK: - General Settings Screen
static let settingsScreenShowUserFirstName: Bool = false

View file

@ -52,6 +52,10 @@ final class RiotSettings: NSObject {
static let roomCreationScreenAllowRoomTypeConfiguration = "roomCreationScreenAllowRoomTypeConfiguration"
static let roomCreationScreenRoomIsPublic = "roomCreationScreenRoomIsPublic"
static let allowInviteExernalUsers = "allowInviteExernalUsers"
static let homeScreenShowFavouritesTab = "homeScreenShowFavouritesTab"
static let homeScreenShowPeopleTab = "homeScreenShowPeopleTab"
static let homeScreenShowRoomsTab = "homeScreenShowRoomsTab"
static let homeScreenShowCommunitiesTab = "homeScreenShowCommunitiesTab"
}
static let shared = RiotSettings()
@ -297,6 +301,49 @@ final class RiotSettings: NSObject {
defaults.set(newValue, forKey: UserDefaultsKeys.allowInviteExernalUsers)
}
}
// MARK: - Main Tabs
var homeScreenShowFavouritesTab: Bool {
get {
guard defaults.object(forKey: UserDefaultsKeys.homeScreenShowFavouritesTab) != nil else {
return BuildSettings.homeScreenShowFavouritesTab
}
return defaults.bool(forKey: UserDefaultsKeys.homeScreenShowFavouritesTab)
} set {
defaults.set(newValue, forKey: UserDefaultsKeys.homeScreenShowFavouritesTab)
}
}
var homeScreenShowPeopleTab: Bool {
get {
guard defaults.object(forKey: UserDefaultsKeys.homeScreenShowPeopleTab) != nil else {
return BuildSettings.homeScreenShowPeopleTab
}
return defaults.bool(forKey: UserDefaultsKeys.homeScreenShowPeopleTab)
} set {
defaults.set(newValue, forKey: UserDefaultsKeys.homeScreenShowPeopleTab)
}
}
var homeScreenShowRoomsTab: Bool {
get {
guard defaults.object(forKey: UserDefaultsKeys.homeScreenShowRoomsTab) != nil else {
return BuildSettings.homeScreenShowRoomsTab
}
return defaults.bool(forKey: UserDefaultsKeys.homeScreenShowRoomsTab)
} set {
defaults.set(newValue, forKey: UserDefaultsKeys.homeScreenShowRoomsTab)
}
}
var homeScreenShowCommunitiesTab: Bool {
get {
guard defaults.object(forKey: UserDefaultsKeys.homeScreenShowCommunitiesTab) != nil else {
return BuildSettings.homeScreenShowCommunitiesTab
}
return defaults.bool(forKey: UserDefaultsKeys.homeScreenShowCommunitiesTab)
} set {
defaults.set(newValue, forKey: UserDefaultsKeys.homeScreenShowCommunitiesTab)
}
}
// MARK: General Settings

View file

@ -130,6 +130,8 @@
}];
[self userInterfaceThemeDidChange];
[self updateTabs];
}
- (void)userInterfaceThemeDidChange
@ -880,38 +882,75 @@
#pragma mark -
- (void)updateTabs
{
if (RiotSettings.shared.homeScreenShowCommunitiesTab && RiotSettings.shared.homeScreenShowRoomsTab
&& RiotSettings.shared.homeScreenShowPeopleTab && RiotSettings.shared.homeScreenShowFavouritesTab)
{
return;
}
NSMutableArray *newTabs = [NSMutableArray arrayWithArray:self.viewControllers];
if (!RiotSettings.shared.homeScreenShowCommunitiesTab)
{
[newTabs removeObjectAtIndex:TABBAR_GROUPS_INDEX];
}
if (!RiotSettings.shared.homeScreenShowRoomsTab)
{
[newTabs removeObjectAtIndex:TABBAR_ROOMS_INDEX];
}
if (!RiotSettings.shared.homeScreenShowPeopleTab)
{
[newTabs removeObjectAtIndex:TABBAR_PEOPLE_INDEX];
}
if (!RiotSettings.shared.homeScreenShowFavouritesTab)
{
[newTabs removeObjectAtIndex:TABBAR_FAVOURITES_INDEX];
}
self.viewControllers = newTabs;
}
- (void)refreshTabBarBadges
{
// Use a middle dot to signal missed notif in favourites
[self setMissedDiscussionsMark:(recentsDataSource.missedFavouriteDiscussionsCount? @"\u00B7": nil)
onTabBarItem:TABBAR_FAVOURITES_INDEX
withBadgeColor:(recentsDataSource.missedHighlightFavouriteDiscussionsCount ? ThemeService.shared.theme.noticeColor : ThemeService.shared.theme.noticeSecondaryColor)];
if (RiotSettings.shared.homeScreenShowFavouritesTab)
{
[self setMissedDiscussionsMark:(recentsDataSource.missedFavouriteDiscussionsCount? @"\u00B7": nil)
onTabBarItem:TABBAR_FAVOURITES_INDEX
withBadgeColor:(recentsDataSource.missedHighlightFavouriteDiscussionsCount ? ThemeService.shared.theme.noticeColor : ThemeService.shared.theme.noticeSecondaryColor)];
}
// Update the badge on People and Rooms tabs
if (recentsDataSource.unsentMessagesDirectDiscussionsCount)
if (RiotSettings.shared.homeScreenShowPeopleTab)
{
[self setBadgeValue:@"!"
onTabBarItem:TABBAR_PEOPLE_INDEX
withBadgeColor:ThemeService.shared.theme.noticeColor];
}
else
{
[self setMissedDiscussionsCount:recentsDataSource.missedDirectDiscussionsCount
onTabBarItem:TABBAR_PEOPLE_INDEX
withBadgeColor:(recentsDataSource.missedHighlightDirectDiscussionsCount ? ThemeService.shared.theme.noticeColor : ThemeService.shared.theme.noticeSecondaryColor)];
if (recentsDataSource.unsentMessagesDirectDiscussionsCount)
{
[self setBadgeValue:@"!"
onTabBarItem:TABBAR_PEOPLE_INDEX
withBadgeColor:ThemeService.shared.theme.noticeColor];
}
else
{
[self setMissedDiscussionsCount:recentsDataSource.missedDirectDiscussionsCount
onTabBarItem:TABBAR_PEOPLE_INDEX
withBadgeColor:(recentsDataSource.missedHighlightDirectDiscussionsCount ? ThemeService.shared.theme.noticeColor : ThemeService.shared.theme.noticeSecondaryColor)];
}
}
if (recentsDataSource.unsentMessagesGroupDiscussionsCount)
if (RiotSettings.shared.homeScreenShowRoomsTab)
{
[self setMissedDiscussionsCount:recentsDataSource.unsentMessagesGroupDiscussionsCount
onTabBarItem:TABBAR_ROOMS_INDEX
withBadgeColor:ThemeService.shared.theme.noticeColor];
}
else
{
[self setMissedDiscussionsCount:recentsDataSource.missedGroupDiscussionsCount
onTabBarItem:TABBAR_ROOMS_INDEX
withBadgeColor:(recentsDataSource.missedHighlightGroupDiscussionsCount ? ThemeService.shared.theme.noticeColor : ThemeService.shared.theme.noticeSecondaryColor)];
if (recentsDataSource.unsentMessagesGroupDiscussionsCount)
{
[self setMissedDiscussionsCount:recentsDataSource.unsentMessagesGroupDiscussionsCount
onTabBarItem:TABBAR_ROOMS_INDEX
withBadgeColor:ThemeService.shared.theme.noticeColor];
}
else
{
[self setMissedDiscussionsCount:recentsDataSource.missedGroupDiscussionsCount
onTabBarItem:TABBAR_ROOMS_INDEX
withBadgeColor:(recentsDataSource.missedHighlightGroupDiscussionsCount ? ThemeService.shared.theme.noticeColor : ThemeService.shared.theme.noticeSecondaryColor)];
}
}
}
@ -922,39 +961,47 @@
- (void)setBadgeValue:(NSString *)value onTabBarItem:(NSUInteger)index withBadgeColor:(UIColor*)badgeColor
{
if (value)
NSInteger itemIndex = [self indexOfTabItemWithTag:index];
if (itemIndex != NSNotFound)
{
self.tabBar.items[index].badgeValue = value;
self.tabBar.items[index].badgeColor = badgeColor;
[self.tabBar.items[index] setBadgeTextAttributes:@{
NSForegroundColorAttributeName: ThemeService.shared.theme.baseTextPrimaryColor
}
forState:UIControlStateNormal];
}
else
{
self.tabBar.items[index].badgeValue = nil;
if (value)
{
self.tabBar.items[itemIndex].badgeValue = value;
self.tabBar.items[itemIndex].badgeColor = badgeColor;
[self.tabBar.items[itemIndex] setBadgeTextAttributes:@{
NSForegroundColorAttributeName: ThemeService.shared.theme.baseTextPrimaryColor
}
forState:UIControlStateNormal];
}
else
{
self.tabBar.items[itemIndex].badgeValue = nil;
}
}
}
- (void)setMissedDiscussionsMark:(NSString*)mark onTabBarItem:(NSUInteger)index withBadgeColor:(UIColor*)badgeColor
{
if (mark)
NSInteger itemIndex = [self indexOfTabItemWithTag:index];
if (itemIndex != NSNotFound)
{
self.tabBar.items[index].badgeValue = mark;
self.tabBar.items[index].badgeColor = badgeColor;
[self.tabBar.items[index] setBadgeTextAttributes:@{
NSForegroundColorAttributeName: ThemeService.shared.theme.baseTextPrimaryColor
}
forState:UIControlStateNormal];
}
else
{
self.tabBar.items[index].badgeValue = nil;
if (mark)
{
self.tabBar.items[itemIndex].badgeValue = mark;
self.tabBar.items[itemIndex].badgeColor = badgeColor;
[self.tabBar.items[itemIndex] setBadgeTextAttributes:@{
NSForegroundColorAttributeName: ThemeService.shared.theme.baseTextPrimaryColor
}
forState:UIControlStateNormal];
}
else
{
self.tabBar.items[itemIndex].badgeValue = nil;
}
}
}
@ -975,6 +1022,19 @@
return badgeValue;
}
- (NSInteger)indexOfTabItemWithTag:(NSUInteger)tag
{
for (int i = 0 ; i < self.tabBar.items.count ; i++)
{
if (self.tabBar.items[i].tag == tag)
{
return i;
}
}
return NSNotFound;
}
#pragma mark -
- (void)promptUserBeforeUsingAnalytics