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

Unified Diff: ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm

Issue 2587023002: Upstream Chrome on iOS source code [8/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/time_range_selector_collection_view_controller.mm
diff --git a/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm b/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm
new file mode 100644
index 0000000000000000000000000000000000000000..391496d5fb6b0fd51f4f3a2fc7c85e2731858b73
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm
@@ -0,0 +1,172 @@
+// Copyright 2016 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/time_range_selector_collection_view_controller.h"
+
+#import "base/ios/weak_nsobject.h"
+#import "base/mac/foundation_util.h"
+#include "base/mac/scoped_nsobject.h"
+#include "components/browsing_data/core/pref_names.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_mac.h"
+
+namespace {
+
+typedef NS_ENUM(NSInteger, SectionIdentifier) {
+ SectionIdentifierOptions = kSectionIdentifierEnumZero,
+};
+
+typedef NS_ENUM(NSInteger, ItemType) {
+ ItemTypePastHour = kItemTypeEnumZero,
+ ItemTypePastDay,
+ ItemTypePastWeek,
+ ItemTypeLastFourWeeks,
+ ItemTypeBeginningOfTime,
+};
+
+const int kStringIDS[] = {
+ IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_PAST_HOUR,
+ IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_PAST_DAY,
+ IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_PAST_WEEK,
+ IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_LAST_FOUR_WEEKS,
+ IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_BEGINNING_OF_TIME};
+
+static_assert(arraysize(kStringIDS) == browsing_data::TIME_PERIOD_LAST + 1,
+ "Strings have to match the enum values.");
+
+} // namespace
+
+@interface TimeRangeSelectorCollectionViewController () {
+ // Instance of the parent view controller needed in order to set the time
+ // range for the browsing data deletion.
+ base::WeakNSProtocol<id<TimeRangeSelectorCollectionViewControllerDelegate>>
+ _weakDelegate;
+ IntegerPrefMember timeRangePref_;
+}
+
+// Updates the checked state of the cells to match the preferences.
+- (void)updateCheckedState;
+
+// Updates the PrefService with the given value.
+- (void)updatePrefValue:(int)prefValue;
+@end
+
+@implementation TimeRangeSelectorCollectionViewController
+
+#pragma mark Initialization
+
+- (instancetype)
+initWithPrefs:(PrefService*)prefs
+ delegate:(id<TimeRangeSelectorCollectionViewControllerDelegate>)delegate {
+ self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+ if (self) {
+ _weakDelegate.reset(delegate);
+ self.title = l10n_util::GetNSString(
+ IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_SELECTOR_TITLE);
+ timeRangePref_.Init(browsing_data::prefs::kDeleteTimePeriod, prefs);
+ [self loadModel];
+ self.shouldHideDoneButton = YES;
+ }
+ return self;
+}
+
+- (void)loadModel {
+ [super loadModel];
+ CollectionViewModel* model = self.collectionViewModel;
+
+ [model addSectionWithIdentifier:SectionIdentifierOptions];
+
+ [model addItem:[self timeRangeItemWithOption:ItemTypePastHour
+ textMessageID:kStringIDS[0]]
+ toSectionWithIdentifier:SectionIdentifierOptions];
+
+ [model addItem:[self timeRangeItemWithOption:ItemTypePastDay
+ textMessageID:kStringIDS[1]]
+ toSectionWithIdentifier:SectionIdentifierOptions];
+
+ [model addItem:[self timeRangeItemWithOption:ItemTypePastWeek
+ textMessageID:kStringIDS[2]]
+ toSectionWithIdentifier:SectionIdentifierOptions];
+
+ [model addItem:[self timeRangeItemWithOption:ItemTypeLastFourWeeks
+ textMessageID:kStringIDS[3]]
+ toSectionWithIdentifier:SectionIdentifierOptions];
+
+ [model addItem:[self timeRangeItemWithOption:ItemTypeBeginningOfTime
+ textMessageID:kStringIDS[4]]
+ toSectionWithIdentifier:SectionIdentifierOptions];
+
+ [self updateCheckedState];
+}
+
+- (void)updateCheckedState {
+ int timeRangePrefValue = timeRangePref_.GetValue();
+ CollectionViewModel* model = self.collectionViewModel;
+
+ NSMutableArray* modifiedItems = [NSMutableArray array];
+ for (CollectionViewTextItem* item in
+ [model itemsInSectionWithIdentifier:SectionIdentifierOptions]) {
+ NSInteger itemPrefValue = item.type - kItemTypeEnumZero;
+
+ MDCCollectionViewCellAccessoryType desiredType =
+ itemPrefValue == timeRangePrefValue
+ ? MDCCollectionViewCellAccessoryCheckmark
+ : MDCCollectionViewCellAccessoryNone;
+ if (item.accessoryType != desiredType) {
+ item.accessoryType = desiredType;
+ [modifiedItems addObject:item];
+ }
+ }
+
+ [self reconfigureCellsForItems:modifiedItems
+ inSectionWithIdentifier:SectionIdentifierOptions];
+}
+
+- (void)updatePrefValue:(int)prefValue {
+ timeRangePref_.SetValue(prefValue);
+ [self updateCheckedState];
+}
+
+- (CollectionViewTextItem*)timeRangeItemWithOption:(ItemType)itemOption
+ textMessageID:(int)textMessageID {
+ CollectionViewTextItem* item =
+ [[[CollectionViewTextItem alloc] initWithType:itemOption] autorelease];
+ [item setText:l10n_util::GetNSString(textMessageID)];
+ [item setAccessibilityTraits:UIAccessibilityTraitButton];
+ return item;
+}
+
+#pragma mark - UICollectionViewDelegate
+
+- (void)collectionView:(UICollectionView*)collectionView
+ didSelectItemAtIndexPath:(NSIndexPath*)indexPath {
+ [super collectionView:collectionView didSelectItemAtIndexPath:indexPath];
+ NSInteger itemType =
+ [self.collectionViewModel itemTypeForIndexPath:indexPath];
+ int timePeriod = itemType - kItemTypeEnumZero;
+ DCHECK_LE(timePeriod, browsing_data::TIME_PERIOD_LAST);
+ [self updatePrefValue:timePeriod];
+ [_weakDelegate
+ timeRangeSelectorViewController:self
+ didSelectTimePeriod:static_cast<browsing_data::TimePeriod>(
+ timePeriod)];
+}
+
+#pragma mark - Class methods
+
++ (NSString*)timePeriodLabelForPrefs:(PrefService*)prefs {
+ if (!prefs)
+ return nil;
+ int prefValue = prefs->GetInteger(browsing_data::prefs::kDeleteTimePeriod);
+ if (prefValue < 0 || static_cast<size_t>(prefValue) >= arraysize(kStringIDS))
+ return nil;
+ return l10n_util::GetNSString(kStringIDS[prefValue]);
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698