mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
Merge pull request #4235 from vector-im/element_4234
Show/Hide Home Screen tabs
This commit is contained in:
commit
aa51563950
4 changed files with 164 additions and 50 deletions
|
@ -5,7 +5,7 @@ Changes to be released in next version
|
|||
*
|
||||
|
||||
🙌 Improvements
|
||||
*
|
||||
* MasterTabBarController: Show/Hide Home Screen tabs (#4234).
|
||||
|
||||
🐛 Bugfix
|
||||
*
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue