Commit 62d5eebe authored by Moe Ahmadi's avatar Moe Ahmadi Committed by Commit Bot

[IOS][Language] Language Settings - Language details page.

Language details page allows the user to choose whether or not Translate
should be offered for a given language. If Translate cannot be offered for
a language such as the last Translate-blocked language or the target
language, the option to "Offer Translate" is disabled for it.

Demo: https://drive.google.com/file/d/0B2sUCLY7X-D2enZRZE9hUmUwa0pjNkpYWHVFbzV6cEhDbUVr/view?usp=sharing

Bug: 957688
Change-Id: I0a6b6286c2097c460bb41c33b274e96d9cde3fbf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1601979Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Reviewed-by: default avatarPeter Lee <pkl@chromium.org>
Commit-Queue: Moe Ahmadi <mahmadi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#659247}
parent 4720b305
...@@ -54,6 +54,8 @@ source_set("settings") { ...@@ -54,6 +54,8 @@ source_set("settings") {
"handoff_table_view_controller.mm", "handoff_table_view_controller.mm",
"import_data_table_view_controller.h", "import_data_table_view_controller.h",
"import_data_table_view_controller.mm", "import_data_table_view_controller.mm",
"language_details_table_view_controller.h",
"language_details_table_view_controller.mm",
"language_settings_table_view_controller.h", "language_settings_table_view_controller.h",
"language_settings_table_view_controller.mm", "language_settings_table_view_controller.mm",
"material_cell_catalog_view_controller.h", "material_cell_catalog_view_controller.h",
......
// 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.
#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_LANGUAGE_DETAILS_TABLE_VIEW_CONTROLLER_H_
#define IOS_CHROME_BROWSER_UI_SETTINGS_LANGUAGE_DETAILS_TABLE_VIEW_CONTROLLER_H_
#import "ios/chrome/browser/ui/settings/settings_root_table_view_controller.h"
@class LanguageDetailsTableViewController;
@protocol LanguageDetailsTableViewControllerDelegate
// Informs the delegate that user selected whether or not to offer Translate for
// |languageCode|.
- (void)languageDetailsTableViewController:
(LanguageDetailsTableViewController*)tableViewController
didSelectOfferTranslate:(BOOL)offerTranslate
languageCode:(NSString*)languageCode;
@end
// Controller for the UI that allows the user to change the settings for a given
// language, i.e., to choose whether or not Translate should be offered for it.
@interface LanguageDetailsTableViewController : SettingsRootTableViewController
// The designated initializer.
- (instancetype)initWithLanguageCode:(NSString*)languageCode
languageName:(NSString*)languageName
blocked:(BOOL)blocked
canOfferTranslate:(BOOL)canOfferTranslate
NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithTableViewStyle:(UITableViewStyle)style
appBarStyle:
(ChromeTableViewControllerStyle)appBarStyle
NS_UNAVAILABLE;
@property(nonatomic, weak) id<LanguageDetailsTableViewControllerDelegate>
delegate;
@end
#endif // IOS_CHROME_BROWSER_UI_SETTINGS_LANGUAGE_DETAILS_TABLE_VIEW_CONTROLLER_H_
// 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_details_table_view_controller.h"
#include "base/feature_list.h"
#import "ios/chrome/browser/ui/settings/cells/settings_cells_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"
#include "ios/chrome/browser/ui/ui_feature_flags.h"
#import "ios/chrome/browser/ui/util/uikit_ui_util.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 {
NSString* const kLanguageDetailsTableViewAccessibilityIdentifier =
@"language_details_table_view";
typedef NS_ENUM(NSInteger, SectionIdentifier) {
SectionIdentifierOptions = kSectionIdentifierEnumZero,
};
typedef NS_ENUM(NSInteger, ItemType) {
ItemTypeNeverTranslate = kItemTypeEnumZero,
ItemTypeOfferTranslate,
};
} // namespace
@interface LanguageDetailsTableViewController ()
// The language code for the given language.
@property(nonatomic, copy) NSString* languageCode;
// The name of the given language.
@property(nonatomic, copy) NSString* languageName;
// Whether the language is Translate-blocked.
@property(nonatomic, getter=isBlocked) BOOL blocked;
// Whether Translate can be offered for the language, i.e., it can be unblocked.
@property(nonatomic) BOOL canOfferTranslate;
@end
@implementation LanguageDetailsTableViewController
- (instancetype)initWithLanguageCode:(NSString*)languageCode
languageName:(NSString*)languageName
blocked:(BOOL)blocked
canOfferTranslate:(BOOL)canOfferTranslate {
UITableViewStyle style = base::FeatureList::IsEnabled(kSettingsRefresh)
? UITableViewStylePlain
: UITableViewStyleGrouped;
self = [super initWithTableViewStyle:style
appBarStyle:ChromeTableViewControllerStyleNoAppBar];
if (self) {
_languageCode = [languageCode copy];
_languageName = [languageName copy];
_blocked = blocked;
_canOfferTranslate = canOfferTranslate;
}
return self;
}
#pragma mark - UIViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.title = self.languageName;
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;
neverTranslateItem.accessoryType = self.isBlocked
? UITableViewCellAccessoryCheckmark
: UITableViewCellAccessoryNone;
[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;
offerTranslateItem.accessoryType = self.isBlocked
? UITableViewCellAccessoryNone
: UITableViewCellAccessoryCheckmark;
if (!self.canOfferTranslate) {
offerTranslateItem.enabled = NO;
offerTranslateItem.textColor =
UIColorFromRGB(kSettingsCellsDetailTextColor);
}
[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.languageCode];
}
@end
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#import "ios/chrome/browser/ui/settings/cells/settings_cells_constants.h" #import "ios/chrome/browser/ui/settings/cells/settings_cells_constants.h"
#import "ios/chrome/browser/ui/settings/cells/settings_switch_cell.h" #import "ios/chrome/browser/ui/settings/cells/settings_switch_cell.h"
#import "ios/chrome/browser/ui/settings/cells/settings_switch_item.h" #import "ios/chrome/browser/ui/settings/cells/settings_switch_item.h"
#import "ios/chrome/browser/ui/settings/language_details_table_view_controller.h"
#import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h" #import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_cells_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_link_header_footer_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h"
...@@ -64,8 +65,10 @@ typedef NS_ENUM(NSInteger, ItemType) { ...@@ -64,8 +65,10 @@ typedef NS_ENUM(NSInteger, ItemType) {
} // namespace } // namespace
@interface LanguageSettingsTableViewController () <BooleanObserver, @interface LanguageSettingsTableViewController () <
PrefObserverDelegate> { BooleanObserver,
LanguageDetailsTableViewControllerDelegate,
PrefObserverDelegate> {
// Registrar for pref change notifications. // Registrar for pref change notifications.
std::unique_ptr<PrefChangeRegistrar> _prefChangeRegistrar; std::unique_ptr<PrefChangeRegistrar> _prefChangeRegistrar;
...@@ -218,7 +221,22 @@ typedef NS_ENUM(NSInteger, ItemType) { ...@@ -218,7 +221,22 @@ typedef NS_ENUM(NSInteger, ItemType) {
didSelectRowAtIndexPath:(NSIndexPath*)indexPath { didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
[super tableView:tableView didSelectRowAtIndexPath:indexPath]; [super tableView:tableView didSelectRowAtIndexPath:indexPath];
// TODO(crbug.com/957688): Handle selections. TableViewItem* item = [self.tableViewModel itemAtIndexPath:indexPath];
if (item.type == ItemTypeLanguage) {
LanguageItem* languageItem = base::mac::ObjCCastStrict<LanguageItem>(item);
BOOL canOfferTranslate =
[self canOfferToTranslateLanguage:languageItem.languageCode
blocked:languageItem.isBlocked];
LanguageDetailsTableViewController* viewController =
[[LanguageDetailsTableViewController alloc]
initWithLanguageCode:base::SysUTF8ToNSString(
languageItem.languageCode)
languageName:languageItem.text
blocked:languageItem.isBlocked
canOfferTranslate:canOfferTranslate];
viewController.delegate = self;
[self.navigationController pushViewController:viewController animated:YES];
}
} }
- (NSIndexPath*)tableView:(UITableView*)tableView - (NSIndexPath*)tableView:(UITableView*)tableView
...@@ -328,6 +346,22 @@ typedef NS_ENUM(NSInteger, ItemType) { ...@@ -328,6 +346,22 @@ typedef NS_ENUM(NSInteger, ItemType) {
return cell; return cell;
} }
#pragma mark - LanguageDetailsTableViewControllerDelegate
- (void)languageDetailsTableViewController:
(LanguageDetailsTableViewController*)tableViewController
didSelectOfferTranslate:(BOOL)offerTranslate
languageCode:(NSString*)languageCode {
const std::string& code = base::SysNSStringToUTF8(languageCode);
if (offerTranslate) {
_translatePrefs->UnblockLanguage(code);
} else {
_translatePrefs->BlockLanguage(code);
}
[self updateLanguagesSection];
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark - BooleanObserver #pragma mark - BooleanObserver
// Called when the value of prefs::kOfferTranslateEnabled changes. // Called when the value of prefs::kOfferTranslateEnabled changes.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment