blob: a9c64557bec6d52ef1aa37a0e75e3126c367fd67 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/ui/settings/language/language_details_table_view_controller.h"
#include "base/feature_list.h"
#include "base/metrics/histogram_macros.h"
#import "ios/chrome/browser/ui/settings/cells/settings_cells_constants.h"
#import "ios/chrome/browser/ui/settings/language/cells/language_item.h"
#import "ios/chrome/browser/ui/settings/language/language_settings_data_source.h"
#import "ios/chrome/browser/ui/settings/language/language_settings_histograms.h"
#import "ios/chrome/browser/ui/settings/language/language_settings_ui_constants.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h"
#import "ios/chrome/browser/ui/table_view/table_view_utils.h"
#include "ios/chrome/browser/ui/ui_feature_flags.h"
#import "ios/chrome/browser/ui/util/uikit_ui_util.h"
#import "ios/chrome/common/ui/colors/semantic_color_names.h"
#include "ios/chrome/grit/ios_strings.h"
#include "ui/base/l10n/l10n_util_mac.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
typedef NS_ENUM(NSInteger, SectionIdentifier) {
SectionIdentifierOptions = kSectionIdentifierEnumZero,
};
typedef NS_ENUM(NSInteger, ItemType) {
ItemTypeNeverTranslate = kItemTypeEnumZero,
ItemTypeOfferTranslate,
};
} // namespace
@interface LanguageDetailsTableViewController ()
// The model data passed to this instance.
@property(nonatomic, strong) LanguageItem* languageItem;
// The delegate passed to this instance.
@property(nonatomic, weak) id<LanguageDetailsTableViewControllerDelegate>
delegate;
@end
@implementation LanguageDetailsTableViewController
- (instancetype)initWithLanguageItem:(LanguageItem*)languageItem
delegate:
(id<LanguageDetailsTableViewControllerDelegate>)
delegate {
DCHECK(languageItem);
DCHECK(delegate);
self = [super initWithStyle:ChromeTableViewStyle()];
if (self) {
_languageItem = languageItem;
_delegate = delegate;
UMA_HISTOGRAM_ENUMERATION(kLanguageSettingsPageImpressionHistogram,
LanguageSettingsPages::PAGE_LANGUAGE_DETAILS);
}
return self;
}
#pragma mark - UIViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.title = self.languageItem.text;
self.shouldHideDoneButton = YES;
self.tableView.accessibilityIdentifier =
kLanguageDetailsTableViewAccessibilityIdentifier;
[self loadModel];
}
#pragma mark - ChromeTableViewController
- (void)loadModel {
[super loadModel];
TableViewModel* model = self.tableViewModel;
[model addSectionWithIdentifier:SectionIdentifierOptions];
// Never translate item.
TableViewTextItem* neverTranslateItem =
[[TableViewTextItem alloc] initWithType:ItemTypeNeverTranslate];
neverTranslateItem.text =
l10n_util::GetNSString(IDS_IOS_LANGUAGE_SETTINGS_NEVER_TRANSLATE_TITLE);
neverTranslateItem.accessibilityTraits |= UIAccessibilityTraitButton;
if ([self.languageItem isBlocked]) {
neverTranslateItem.accessibilityTraits |= UIAccessibilityTraitSelected;
neverTranslateItem.accessoryType = UITableViewCellAccessoryCheckmark;
}
[model addItem:neverTranslateItem
toSectionWithIdentifier:SectionIdentifierOptions];
// Offer to translate item.
TableViewTextItem* offerTranslateItem =
[[TableViewTextItem alloc] initWithType:ItemTypeOfferTranslate];
offerTranslateItem.text = l10n_util::GetNSString(
IDS_IOS_LANGUAGE_SETTINGS_OFFER_TO_TRANSLATE_TITLE);
offerTranslateItem.accessibilityTraits |= UIAccessibilityTraitButton;
if (![self.languageItem isBlocked]) {
offerTranslateItem.accessibilityTraits |= UIAccessibilityTraitSelected;
offerTranslateItem.accessoryType = UITableViewCellAccessoryCheckmark;
}
if (!self.languageItem.canOfferTranslate) {
offerTranslateItem.enabled = NO;
offerTranslateItem.textColor = [UIColor colorNamed:kTextSecondaryColor];
}
[model addItem:offerTranslateItem
toSectionWithIdentifier:SectionIdentifierOptions];
}
#pragma mark - UITableViewDelegate
- (void)tableView:(UITableView*)tableView
didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
NSInteger type = [self.tableViewModel itemTypeForIndexPath:indexPath];
[self.delegate
languageDetailsTableViewController:self
didSelectOfferTranslate:(type == ItemTypeOfferTranslate)
languageCode:self.languageItem.languageCode];
}
@end