| 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
|
|
|