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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.mm
diff --git a/ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.mm b/ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.mm
new file mode 100644
index 0000000000000000000000000000000000000000..93cb4e59f3d4f273af7a27cf9587b751248f383f
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/dataplan_usage_collection_view_controller.mm
@@ -0,0 +1,167 @@
+// Copyright 2015 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/dataplan_usage_collection_view_controller.h"
+
+#include "base/logging.h"
+#import "base/mac/foundation_util.h"
+#include "base/mac/scoped_nsobject.h"
+#include "components/prefs/pref_member.h"
+#include "components/prefs/pref_service.h"
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_text_item.h"
+#import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
+#include "ios/chrome/grit/ios_strings.h"
+#import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/l10n/l10n_util_mac.h"
+
+namespace {
+
+typedef NS_ENUM(NSInteger, SectionIdentifier) {
+ SectionIdentifierOptions = kSectionIdentifierEnumZero,
+};
+
+typedef NS_ENUM(NSInteger, ItemType) {
+ ItemTypeOptionsAlways = kItemTypeEnumZero,
+ ItemTypeOptionsOnlyOnWiFi,
+ ItemTypeOptionsNever,
+};
+
+} // namespace.
+
+@interface DataplanUsageCollectionViewController () {
+ BooleanPrefMember basePreference_;
+ BooleanPrefMember wifiPreference_;
+}
+
+// Updates the checked state of the cells to match the preferences.
+- (void)updateCheckedState;
+
+// Updates the PrefService with the given values.
+- (void)updateBasePref:(BOOL)basePref wifiPref:(BOOL)wifiPref;
+@end
+
+@implementation DataplanUsageCollectionViewController
+
+#pragma mark - Initialization
+
+- (instancetype)initWithPrefs:(PrefService*)prefs
+ basePref:(const char*)basePreference
+ wifiPref:(const char*)wifiPreference
+ title:(NSString*)title {
+ self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+ if (self) {
+ self.title = title;
+ basePreference_.Init(basePreference, prefs);
+ wifiPreference_.Init(wifiPreference, prefs);
+ [self loadModel];
+ }
+ return self;
+}
+
+- (instancetype)initWithStyle:(CollectionViewControllerStyle)style {
+ NOTREACHED();
+ return nil;
+}
+
+- (void)loadModel {
+ [super loadModel];
+ CollectionViewModel* model = self.collectionViewModel;
+
+ [model addSectionWithIdentifier:SectionIdentifierOptions];
+
+ base::scoped_nsobject<CollectionViewTextItem> always(
+ [[CollectionViewTextItem alloc] initWithType:ItemTypeOptionsAlways]);
+ [always setText:l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_ALWAYS)];
+ [always setAccessibilityTraits:UIAccessibilityTraitButton];
+ [model addItem:always toSectionWithIdentifier:SectionIdentifierOptions];
+
+ base::scoped_nsobject<CollectionViewTextItem> wifi(
+ [[CollectionViewTextItem alloc] initWithType:ItemTypeOptionsOnlyOnWiFi]);
+ [wifi setText:l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_ONLY_WIFI)];
+ [wifi setAccessibilityTraits:UIAccessibilityTraitButton];
+ [model addItem:wifi toSectionWithIdentifier:SectionIdentifierOptions];
+
+ base::scoped_nsobject<CollectionViewTextItem> never(
+ [[CollectionViewTextItem alloc] initWithType:ItemTypeOptionsNever]);
+ [never setText:l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_NEVER)];
+ [never setAccessibilityTraits:UIAccessibilityTraitButton];
+ [model addItem:never toSectionWithIdentifier:SectionIdentifierOptions];
+
+ [self updateCheckedState];
+}
+
+- (void)updateCheckedState {
+ BOOL basePrefOn = basePreference_.GetValue();
+ BOOL wifiPrefOn = wifiPreference_.GetValue();
+ CollectionViewModel* model = self.collectionViewModel;
+
+ std::unordered_map<NSInteger, bool> optionsMap = {
+ {ItemTypeOptionsAlways, basePrefOn && !wifiPrefOn},
+ {ItemTypeOptionsOnlyOnWiFi, basePrefOn && wifiPrefOn},
+ {ItemTypeOptionsNever, !basePrefOn},
+ };
+
+ NSMutableArray* modifiedItems = [NSMutableArray array];
+ for (CollectionViewTextItem* item in
+ [model itemsInSectionWithIdentifier:SectionIdentifierOptions]) {
+ auto value = optionsMap.find(item.type);
+ DCHECK(value != optionsMap.end());
+
+ MDCCollectionViewCellAccessoryType desiredType =
+ value->second ? MDCCollectionViewCellAccessoryCheckmark
+ : MDCCollectionViewCellAccessoryNone;
+ if (item.accessoryType != desiredType) {
+ item.accessoryType = desiredType;
+ [modifiedItems addObject:item];
+ }
+ }
+
+ [self reconfigureCellsForItems:modifiedItems
+ inSectionWithIdentifier:SectionIdentifierOptions];
+}
+
+- (void)updateBasePref:(BOOL)basePref wifiPref:(BOOL)wifiPref {
+ basePreference_.SetValue(basePref);
+ wifiPreference_.SetValue(wifiPref);
+ [self updateCheckedState];
+}
+
+#pragma mark - Internal methods
+
++ (NSString*)currentLabelForPreference:(PrefService*)prefs
+ basePref:(const char*)basePreference
+ wifiPref:(const char*)wifiPreference {
+ if (!prefs)
+ return nil;
+ if (prefs->GetBoolean(basePreference)) {
+ if (prefs->GetBoolean(wifiPreference))
+ return l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_ONLY_WIFI);
+ else
+ return l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_ALWAYS);
+ }
+ return l10n_util::GetNSString(IDS_IOS_OPTIONS_DATA_USAGE_NEVER);
+}
+
+#pragma mark - UICollectionViewDelegate
+
+- (void)collectionView:(UICollectionView*)collectionView
+ didSelectItemAtIndexPath:(NSIndexPath*)indexPath {
+ [super collectionView:collectionView didSelectItemAtIndexPath:indexPath];
+
+ NSInteger type = [self.collectionViewModel itemTypeForIndexPath:indexPath];
+ switch (type) {
+ case ItemTypeOptionsAlways:
+ [self updateBasePref:YES wifiPref:NO];
+ break;
+ case ItemTypeOptionsOnlyOnWiFi:
+ [self updateBasePref:YES wifiPref:YES];
+ break;
+ case ItemTypeOptionsNever:
+ [self updateBasePref:NO wifiPref:NO];
+ break;
+ }
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698