Merge pull request #1404 from vector-im/language_picker

Language picker
This commit is contained in:
manuroe 2017-07-21 16:07:03 +02:00 committed by GitHub
commit 90bf7f95b0
8 changed files with 150 additions and 6 deletions

View file

@ -14,6 +14,7 @@
3205ED851E97725E003D65FA /* DirectoryServerTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3205ED831E97725E003D65FA /* DirectoryServerTableViewCell.xib */; };
321082B21F0E9F40002E0091 /* RoomMembershipCollapsedBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 321082B01F0E9F40002E0091 /* RoomMembershipCollapsedBubbleCell.m */; };
321082B31F0E9F41002E0091 /* RoomMembershipCollapsedBubbleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 321082B11F0E9F40002E0091 /* RoomMembershipCollapsedBubbleCell.xib */; };
32185B311F20FA2B00752141 /* LanguagePickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 32185B301F20FA2B00752141 /* LanguagePickerViewController.m */; };
322806A01F0F64C4008C53D7 /* RoomMembershipExpandedBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3228069E1F0F64C4008C53D7 /* RoomMembershipExpandedBubbleCell.m */; };
322806A11F0F64C4008C53D7 /* RoomMembershipExpandedBubbleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3228069F1F0F64C4008C53D7 /* RoomMembershipExpandedBubbleCell.xib */; };
32471CDC1F1373A100BDF50A /* RoomMembershipCollapsedWithPaginationTitleBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 32471CDA1F1373A100BDF50A /* RoomMembershipCollapsedWithPaginationTitleBubbleCell.m */; };
@ -499,6 +500,8 @@
321082AF1F0E9F40002E0091 /* RoomMembershipCollapsedBubbleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomMembershipCollapsedBubbleCell.h; sourceTree = "<group>"; };
321082B01F0E9F40002E0091 /* RoomMembershipCollapsedBubbleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomMembershipCollapsedBubbleCell.m; sourceTree = "<group>"; };
321082B11F0E9F40002E0091 /* RoomMembershipCollapsedBubbleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomMembershipCollapsedBubbleCell.xib; sourceTree = "<group>"; };
32185B2F1F20FA2B00752141 /* LanguagePickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LanguagePickerViewController.h; sourceTree = "<group>"; };
32185B301F20FA2B00752141 /* LanguagePickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LanguagePickerViewController.m; sourceTree = "<group>"; };
3228069D1F0F64C4008C53D7 /* RoomMembershipExpandedBubbleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomMembershipExpandedBubbleCell.h; sourceTree = "<group>"; };
3228069E1F0F64C4008C53D7 /* RoomMembershipExpandedBubbleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomMembershipExpandedBubbleCell.m; sourceTree = "<group>"; };
3228069F1F0F64C4008C53D7 /* RoomMembershipExpandedBubbleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomMembershipExpandedBubbleCell.xib; sourceTree = "<group>"; };
@ -1599,6 +1602,8 @@
F083BC2F1E7009EC00A9B29C /* HomeMessagesSearchViewController.m */,
F083BC301E7009EC00A9B29C /* HomeViewController.h */,
F083BC311E7009EC00A9B29C /* HomeViewController.m */,
32185B2F1F20FA2B00752141 /* LanguagePickerViewController.h */,
32185B301F20FA2B00752141 /* LanguagePickerViewController.m */,
F083BC321E7009EC00A9B29C /* MediaAlbumContentViewController.h */,
F083BC331E7009EC00A9B29C /* MediaAlbumContentViewController.m */,
F083BC341E7009EC00A9B29C /* MediaAlbumContentViewController.xib */,
@ -2565,6 +2570,7 @@
F083BE7E1E7009ED00A9B29C /* InviteRecentTableViewCell.m in Sources */,
F083BE3C1E7009ED00A9B29C /* RoomIncomingEncryptedAttachmentWithoutSenderInfoBubbleCell.m in Sources */,
F083BE211E7009ED00A9B29C /* RoomSearchViewController.m in Sources */,
32185B311F20FA2B00752141 /* LanguagePickerViewController.m in Sources */,
F083BE3E1E7009ED00A9B29C /* RoomIncomingEncryptedAttachmentWithPaginationTitleBubbleCell.m in Sources */,
F083BE071E7009ED00A9B29C /* AttachmentsViewController.m in Sources */,
F083BE051E7009ED00A9B29C /* RiotDesignValues.m in Sources */,

View file

@ -292,6 +292,11 @@ NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateN
NSLog(@"Build: %@\n", build);
NSLog(@"------------------------------\n");
// Set up runtime language and fallback
NSString *langage = [[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"];;
[NSBundle mxk_setLanguage:langage];
[NSBundle mxk_setFallbackLanguage:@"en"];
// Define the navigation bar text color
[[UINavigationBar appearance] setTintColor:kRiotColorGreen];

View file

@ -329,6 +329,7 @@
//"settings_join_leave_rooms" = "When people join or leave rooms";
//"settings_call_invitations" = "Call invitations";
"settings_ui_language" = "Language";
"settings_ui_light_theme" = "Light theme";
"settings_ui_dark_theme" = "Dark theme";

View file

@ -237,7 +237,8 @@
}
userInfo[@"locale"] = [NSLocale preferredLanguages][0];
userInfo[@"app_language"] = [[NSBundle mainBundle] preferredLocalizations][0];
userInfo[@"default_app_language"] = [[NSBundle mainBundle] preferredLocalizations][0]; // The language chosen by the OS
userInfo[@"app_language"] = [NSBundle mxk_language] ? [NSBundle mxk_language] : userInfo[@"default_app_language"]; // The language chosen by the user
bugReportRestClient.others = userInfo;

View file

@ -0,0 +1,21 @@
/*
Copyright 2017 Vector Creations Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#import <MatrixKit/MatrixKit.h>
@interface LanguagePickerViewController : MXKLanguagePickerViewController
@end

View file

@ -0,0 +1,54 @@
/*
Copyright 2017 Vector Creations Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#import "LanguagePickerViewController.h"
#import "AppDelegate.h"
@implementation LanguagePickerViewController
- (void)finalizeInit
{
[super finalizeInit];
// Setup `MXKViewControllerHandling` properties
self.defaultBarTintColor = kRiotNavBarTintColor;
self.enableBarTintColorStatusChange = NO;
self.rageShakeManager = [RageShakeManager sharedManager];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Hide line separators of empty cells
self.tableView.tableFooterView = [[UIView alloc] init];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Screen tracking (via Google Analytics)
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
if (tracker)
{
[tracker set:kGAIScreenName value:@"CountryPicker"];
[tracker send:[[GAIDictionaryBuilder createScreenView] build]];
}
}
@end

View file

@ -21,7 +21,7 @@
#import "MediaPickerViewController.h"
#import "TableViewCellWithCheckBoxes.h"
@interface SettingsViewController : MXKTableViewController<UITextFieldDelegate, MediaPickerViewControllerDelegate, MXKDeviceViewDelegate, UIDocumentInteractionControllerDelegate, MXKCountryPickerViewControllerDelegate, TableViewCellWithCheckBoxesDelegate>
@interface SettingsViewController : MXKTableViewController<UITextFieldDelegate, MediaPickerViewControllerDelegate, MXKDeviceViewDelegate, UIDocumentInteractionControllerDelegate, MXKCountryPickerViewControllerDelegate, MXKLanguagePickerViewControllerDelegate, TableViewCellWithCheckBoxesDelegate>
@end

View file

@ -29,6 +29,7 @@
#import "BugReportViewController.h"
#import "CountryPickerViewController.h"
#import "LanguagePickerViewController.h"
#import "TableViewCellWithPhoneNumberTextField.h"
#import "NBPhoneNumberUtil.h"
@ -71,7 +72,8 @@ enum
enum
{
USER_INTERFACE_THEME_INDEX = 0,
USER_INTERFACE_LANGUAGE_INDEX = 0,
USER_INTERFACE_THEME_INDEX,
USER_INTERFACE_COUNT
};
@ -1565,7 +1567,26 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
}
else if (section == SETTINGS_SECTION_USER_INTERFACE_INDEX)
{
if (row == USER_INTERFACE_THEME_INDEX)
if (row == USER_INTERFACE_LANGUAGE_INDEX)
{
cell = [tableView dequeueReusableCellWithIdentifier:kSettingsViewControllerPhoneBookCountryCellId];
if (!cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kSettingsViewControllerPhoneBookCountryCellId];
}
NSString *language = [NSBundle mxk_language];
NSString *languageDescription = language ? [MXKLanguagePickerViewController languageDescription:language] : [MXKLanguagePickerViewController languageDescription:[MXKLanguagePickerViewController defaultLanguage]];
cell.textLabel.textColor = kRiotTextColorBlack;
cell.textLabel.text = NSLocalizedStringFromTable(@"settings_ui_language", @"Vector", nil);
cell.detailTextLabel.text = languageDescription;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.selectionStyle = UITableViewCellSelectionStyleDefault;
}
else if (row == USER_INTERFACE_THEME_INDEX)
{
uiThemeCell = [tableView dequeueReusableCellWithIdentifier:[TableViewCellWithCheckBoxes defaultReuseIdentifier] forIndexPath:indexPath];
@ -2057,7 +2078,18 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
NSInteger section = indexPath.section;
NSInteger row = indexPath.row;
if (section == SETTINGS_SECTION_IGNORED_USERS_INDEX)
if (section == SETTINGS_SECTION_USER_INTERFACE_INDEX)
{
if (row == USER_INTERFACE_LANGUAGE_INDEX)
{
// Display the language picker
LanguagePickerViewController *languagePickerViewController = [LanguagePickerViewController languagePickerViewController];
languagePickerViewController.selectedLanguage = [NSBundle mxk_language];
languagePickerViewController.delegate = self;
[self pushViewController:languagePickerViewController];
}
}
else if (section == SETTINGS_SECTION_IGNORED_USERS_INDEX)
{
MXSession* session = [[AppDelegate theDelegate].mxSessions objectAtIndex:0];
@ -3481,6 +3513,30 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
[countryPickerViewController withdrawViewControllerAnimated:YES completion:nil];
}
#pragma mark - MXKCountryPickerViewControllerDelegate
- (void)languagePickerViewController:(MXKLanguagePickerViewController *)languagePickerViewController didSelectLangugage:(NSString *)language
{
[languagePickerViewController withdrawViewControllerAnimated:YES completion:nil];
if (![language isEqualToString:[NSBundle mxk_language]]
|| (language == nil && [NSBundle mxk_language]))
{
[NSBundle mxk_setLanguage:language];
// Store user settings
[[NSUserDefaults standardUserDefaults] setObject:language forKey:@"appLanguage"];
[[NSUserDefaults standardUserDefaults] synchronize];
// Do a full sync to recompute matrix data (rooms data sources and summaries)
[self startActivityIndicator];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[[AppDelegate theDelegate] reloadMatrixSessions:NO];
});
}
}
#pragma mark - TableViewCellWithCheckBoxesDelegate
- (void)tableViewCellWithCheckBoxes:(TableViewCellWithCheckBoxes *)tableViewCellWithCheckBoxes didTapOnCheckBoxAtIndex:(NSUInteger)index