Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(280)

Side by Side Diff: ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.mm

Issue 2589583003: Upstream Chrome on iOS source code [7/11]. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controlle r.h"
6
7 #include "base/logging.h"
8 #import "base/mac/foundation_util.h"
9 #include "base/mac/scoped_nsobject.h"
10 #include "components/prefs/pref_member.h"
11 #include "components/prefs/pref_service.h"
12 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_text_item.h "
13 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
14 #include "ios/chrome/grit/ios_strings.h"
15 #import "ios/third_party/material_components_ios/src/components/CollectionCells/ src/MaterialCollectionCells.h"
16 #include "ui/base/l10n/l10n_util.h"
17 #include "ui/base/l10n/l10n_util_mac.h"
18
19 namespace {
20
21 typedef NS_ENUM(NSInteger, SectionIdentifier) {
22 SectionIdentifierOptions = kSectionIdentifierEnumZero,
23 };
24
25 typedef NS_ENUM(NSInteger, ItemType) {
26 ItemTypeOptionsAlways = kItemTypeEnumZero,
27 ItemTypeOptionsOnlyOnWiFi,
28 ItemTypeOptionsNever,
29 };
30
31 } // namespace.
32
33 @interface DataplanUsageCollectionViewController () {
34 BooleanPrefMember basePreference_;
35 BooleanPrefMember wifiPreference_;
36 }
37
38 // Updates the checked state of the cells to match the preferences.
39 - (void)updateCheckedState;
40
41 // Updates the PrefService with the given values.
42 - (void)updateBasePref:(BOOL)basePref wifiPref:(BOOL)wifiPref;
43 @end
44
45 @implementation DataplanUsageCollectionViewController
46
47 #pragma mark - Initialization
48
49 - (instancetype)initWithPrefs:(PrefService*)prefs
50 basePref:(const char*)basePreference
51 wifiPref:(const char*)wifiPreference
52 title:(NSString*)title {
53 self = [super initWithStyle:CollectionViewControllerStyleAppBar];
54 if (self) {
55 self.title = title;
56 basePreference_.Init(basePreference, prefs);
57 wifiPreference_.Init(wifiPreference, prefs);
58 [self loadModel];
59 }
60 return self;
61 }
62
63 - (instancetype)initWithStyle:(CollectionViewControllerStyle)style {
64 NOTREACHED();
65 return nil;
66 }
67
68 - (void)loadModel {
69 [super loadModel];
70 CollectionViewModel* model = self.collectionViewModel;
71
72 [model addSectionWithIdentifier:SectionIdentifierOptions];
73
74 base::scoped_nsobject<CollectionViewTextItem> always(
75 [[CollectionViewTextItem alloc] initWithType:ItemTypeOptionsAlways]);
76 [always setText:l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_ALWAYS)];
77 [always setAccessibilityTraits:UIAccessibilityTraitButton];
78 [model addItem:always toSectionWithIdentifier:SectionIdentifierOptions];
79
80 base::scoped_nsobject<CollectionViewTextItem> wifi(
81 [[CollectionViewTextItem alloc] initWithType:ItemTypeOptionsOnlyOnWiFi]);
82 [wifi setText:l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_ONLY_WIFI)];
83 [wifi setAccessibilityTraits:UIAccessibilityTraitButton];
84 [model addItem:wifi toSectionWithIdentifier:SectionIdentifierOptions];
85
86 base::scoped_nsobject<CollectionViewTextItem> never(
87 [[CollectionViewTextItem alloc] initWithType:ItemTypeOptionsNever]);
88 [never setText:l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_NEVER)];
89 [never setAccessibilityTraits:UIAccessibilityTraitButton];
90 [model addItem:never toSectionWithIdentifier:SectionIdentifierOptions];
91
92 [self updateCheckedState];
93 }
94
95 - (void)updateCheckedState {
96 BOOL basePrefOn = basePreference_.GetValue();
97 BOOL wifiPrefOn = wifiPreference_.GetValue();
98 CollectionViewModel* model = self.collectionViewModel;
99
100 std::unordered_map<NSInteger, bool> optionsMap = {
101 {ItemTypeOptionsAlways, basePrefOn && !wifiPrefOn},
102 {ItemTypeOptionsOnlyOnWiFi, basePrefOn && wifiPrefOn},
103 {ItemTypeOptionsNever, !basePrefOn},
104 };
105
106 NSMutableArray* modifiedItems = [NSMutableArray array];
107 for (CollectionViewTextItem* item in
108 [model itemsInSectionWithIdentifier:SectionIdentifierOptions]) {
109 auto value = optionsMap.find(item.type);
110 DCHECK(value != optionsMap.end());
111
112 MDCCollectionViewCellAccessoryType desiredType =
113 value->second ? MDCCollectionViewCellAccessoryCheckmark
114 : MDCCollectionViewCellAccessoryNone;
115 if (item.accessoryType != desiredType) {
116 item.accessoryType = desiredType;
117 [modifiedItems addObject:item];
118 }
119 }
120
121 [self reconfigureCellsForItems:modifiedItems
122 inSectionWithIdentifier:SectionIdentifierOptions];
123 }
124
125 - (void)updateBasePref:(BOOL)basePref wifiPref:(BOOL)wifiPref {
126 basePreference_.SetValue(basePref);
127 wifiPreference_.SetValue(wifiPref);
128 [self updateCheckedState];
129 }
130
131 #pragma mark - Internal methods
132
133 + (NSString*)currentLabelForPreference:(PrefService*)prefs
134 basePref:(const char*)basePreference
135 wifiPref:(const char*)wifiPreference {
136 if (!prefs)
137 return nil;
138 if (prefs->GetBoolean(basePreference)) {
139 if (prefs->GetBoolean(wifiPreference))
140 return l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_ONLY_WIFI);
141 else
142 return l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_ALWAYS);
143 }
144 return l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_NEVER);
145 }
146
147 #pragma mark - UICollectionViewDelegate
148
149 - (void)collectionView:(UICollectionView*)collectionView
150 didSelectItemAtIndexPath:(NSIndexPath*)indexPath {
151 [super collectionView:collectionView didSelectItemAtIndexPath:indexPath];
152
153 NSInteger type = [self.collectionViewModel itemTypeForIndexPath:indexPath];
154 switch (type) {
155 case ItemTypeOptionsAlways:
156 [self updateBasePref:YES wifiPref:NO];
157 break;
158 case ItemTypeOptionsOnlyOnWiFi:
159 [self updateBasePref:YES wifiPref:YES];
160 break;
161 case ItemTypeOptionsNever:
162 [self updateBasePref:NO wifiPref:NO];
163 break;
164 }
165 }
166
167 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698