[go: nahoru, domu]

blob: d7d4f9509df4b73075a8ee290eb5781ea6bdb1c3 [file] [log] [blame]
// Copyright 2015 The Chromium Authors
// 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/bandwidth/dataplan_usage_table_view_controller.h"
#import "base/apple/foundation_util.h"
#import "base/check.h"
#import "components/prefs/pref_member.h"
#import "components/prefs/pref_service.h"
#import "ios/chrome/browser/prerender/prerender_pref.h"
#import "ios/chrome/browser/shared/public/features/features.h"
#import "ios/chrome/browser/shared/ui/table_view/cells/table_view_detail_text_item.h"
#import "ios/chrome/browser/shared/ui/table_view/cells/table_view_text_item.h"
#import "ios/chrome/browser/shared/ui/table_view/chrome_table_view_styler.h"
#import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h"
#import "ios/chrome/browser/ui/settings/bandwidth/dataplan_usage_table_view_controller+private.h"
#import "ios/chrome/common/ui/colors/semantic_color_names.h"
#import "ios/chrome/grit/ios_strings.h"
#import "ui/base/l10n/l10n_util.h"
#import "ui/base/l10n/l10n_util_mac.h"
using prerender_prefs::NetworkPredictionSetting;
namespace {
typedef NS_ENUM(NSInteger, SectionIdentifier) {
SectionIdentifierOptions = kSectionIdentifierEnumZero,
};
// Item types to enumerate the table items.
typedef NS_ENUM(NSInteger, ItemType) {
ItemTypeOptionsEnabledAlways = kItemTypeEnumZero,
ItemTypeOptionsWifiOnly,
ItemTypeOptionsNever,
};
// Converts an NetworkPredictionSetting, to a corresponding ItemType.
ItemType ItemTypeWithSetting(NetworkPredictionSetting setting) {
switch (setting) {
case NetworkPredictionSetting::kEnabledWifiAndCellular: {
return ItemTypeOptionsEnabledAlways;
}
case NetworkPredictionSetting::kEnabledWifiOnly: {
return ItemTypeOptionsWifiOnly;
}
case NetworkPredictionSetting::kDisabled: {
return ItemTypeOptionsNever;
}
}
}
// Converts an ItemType, to a corresponding NetworkPredictionSetting.
NetworkPredictionSetting SettingWithItemType(ItemType item_type) {
switch (item_type) {
case ItemTypeOptionsEnabledAlways: {
return NetworkPredictionSetting::kEnabledWifiAndCellular;
}
case ItemTypeOptionsWifiOnly: {
return NetworkPredictionSetting::kEnabledWifiOnly;
}
case ItemTypeOptionsNever: {
return NetworkPredictionSetting::kDisabled;
}
}
}
} // namespace.
@interface DataplanUsageTableViewController () {
IntegerPrefMember _settingPreference;
}
@end
@implementation DataplanUsageTableViewController
#pragma mark - Initialization
- (instancetype)initWithPrefs:(PrefService*)prefs
settingPref:(const char*)settingPreference
title:(NSString*)title {
self = [super initWithStyle:ChromeTableViewStyle()];
if (self) {
self.title = title;
_settingPreference.Init(settingPreference, prefs);
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.estimatedRowHeight = 70;
self.tableView.rowHeight = UITableViewAutomaticDimension;
[self loadModel];
}
- (void)loadModel {
[super loadModel];
self.styler.cellTitleColor = [UIColor colorNamed:kTextPrimaryColor];
TableViewModel<TableViewItem*>* model = self.tableViewModel;
[model addSectionWithIdentifier:SectionIdentifierOptions];
TableViewDetailTextItem* always = [[TableViewDetailTextItem alloc]
initWithType:ItemTypeWithSetting(
NetworkPredictionSetting::kEnabledWifiAndCellular)];
[always setText:l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_ALWAYS)];
[always setAccessibilityTraits:UIAccessibilityTraitButton];
[model addItem:always toSectionWithIdentifier:SectionIdentifierOptions];
TableViewDetailTextItem* wifi = [[TableViewDetailTextItem alloc]
initWithType:ItemTypeWithSetting(
NetworkPredictionSetting::kEnabledWifiOnly)];
[wifi setText:l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_ONLY_WIFI)];
[wifi setAccessibilityTraits:UIAccessibilityTraitButton];
[model addItem:wifi toSectionWithIdentifier:SectionIdentifierOptions];
TableViewDetailTextItem* never = [[TableViewDetailTextItem alloc]
initWithType:ItemTypeWithSetting(NetworkPredictionSetting::kDisabled)];
[never setText:l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_NEVER)];
[never setAccessibilityTraits:UIAccessibilityTraitButton];
[model addItem:never toSectionWithIdentifier:SectionIdentifierOptions];
[self updateCheckedState];
}
// Updates the checked state of the cells to match the preferences.
- (void)updateCheckedState {
NetworkPredictionSetting setting =
static_cast<prerender_prefs::NetworkPredictionSetting>(
_settingPreference.GetValue());
TableViewModel<TableViewItem*>* model = self.tableViewModel;
NSMutableArray* modifiedItems = [NSMutableArray array];
for (TableViewDetailTextItem* item in
[model itemsInSectionWithIdentifier:SectionIdentifierOptions]) {
NetworkPredictionSetting itemSetting =
SettingWithItemType(static_cast<ItemType>(item.type));
UITableViewCellAccessoryType desiredType =
itemSetting == setting ? UITableViewCellAccessoryCheckmark
: UITableViewCellAccessoryNone;
if (item.accessoryType != desiredType) {
item.accessoryType = desiredType;
[modifiedItems addObject:item];
}
}
[self reconfigureCellsForItems:modifiedItems];
}
#pragma mark - Internal methods
+ (NSString*)currentLabelForPreference:(PrefService*)prefs
settingPref:(const char*)settingPreference {
if (!prefs)
return nil;
NetworkPredictionSetting setting =
static_cast<prerender_prefs::NetworkPredictionSetting>(
prefs->GetInteger(settingPreference));
switch (setting) {
case NetworkPredictionSetting::kDisabled: {
return l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_NEVER);
}
case NetworkPredictionSetting::kEnabledWifiOnly: {
return l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_ONLY_WIFI);
}
case NetworkPredictionSetting::kEnabledWifiAndCellular: {
return l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_ALWAYS);
}
}
}
- (void)updateSetting:(prerender_prefs::NetworkPredictionSetting)newSetting {
_settingPreference.SetValue(static_cast<int>(newSetting));
[self updateCheckedState];
}
#pragma mark - UITableViewDelegate
- (void)tableView:(UITableView*)tableView
didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
NetworkPredictionSetting chosenSetting =
SettingWithItemType(static_cast<ItemType>(
[self.tableViewModel itemTypeForIndexPath:indexPath]));
[self updateSetting:chosenSetting];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
@end