[iOS] Fix: Clear Browsing Data CollectionView UI consistency

- Manager holds a reference to the time range item upon creation and update the item text when notified a change of time range.
- Replace the |timePeriod| property with one that is synced with preferences.

Bug: 944230
Change-Id: Id815963830eb2337ae1dfed931259b3d10de68fe
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1532010
Commit-Queue: Huanzhong Huang <huanzhong@chromium.org>
Reviewed-by: Gauthier Ambard <gambard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#643396}
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm
index 18624ab..2dbfe0b 100644
--- a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm
+++ b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm
@@ -64,11 +64,12 @@
 
 }  // namespace
 
-@interface ClearBrowsingDataManager ()
+@interface ClearBrowsingDataManager () {
+  // Access to the kDeleteTimePeriod preference.
+  IntegerPrefMember _timeRangePref;
+}
 
 @property(nonatomic, assign) ios::ChromeBrowserState* browserState;
-// Time Period to clear data.
-@property(nonatomic, assign) browsing_data::TimePeriod timePeriod;
 // Whether to show alert about other forms of browsing history.
 @property(nonatomic, assign)
     BOOL shouldShowNoticeAboutOtherFormsOfBrowsingHistory;
@@ -79,13 +80,15 @@
 // CollectionsViewController.
 @property(nonatomic, assign) ClearBrowsingDataListType listType;
 
+@property(nonatomic, strong)
+    LegacySettingsDetailItem* collectionViewTimeRangeItem;
+
 @end
 
 @implementation ClearBrowsingDataManager
 @synthesize browserState = _browserState;
 @synthesize consumer = _consumer;
 @synthesize linkDelegate = _linkDelegate;
-@synthesize timePeriod = _timePeriod;
 @synthesize shouldShowNoticeAboutOtherFormsOfBrowsingHistory =
     _shouldShowNoticeAboutOtherFormsOfBrowsingHistory;
 @synthesize shouldPopupDialogAboutOtherFormsOfBrowsingHistory =
@@ -99,17 +102,8 @@
     _browserState = browserState;
     _listType = listType;
 
-    _timePeriod = browsing_data::TimePeriod::ALL_TIME;
-    if (IsNewClearBrowsingDataUIEnabled()) {
-      constexpr int maxValue =
-          static_cast<int>(browsing_data::TimePeriod::TIME_PERIOD_LAST);
-      const int prefValue = browserState->GetPrefs()->GetInteger(
-          browsing_data::prefs::kDeleteTimePeriod);
-
-      if (0 <= prefValue && prefValue <= maxValue) {
-        _timePeriod = static_cast<browsing_data::TimePeriod>(prefValue);
-      }
-    }
+    _timeRangePref.Init(browsing_data::prefs::kDeleteTimePeriod,
+                        _browserState->GetPrefs());
   }
   return self;
 }
@@ -122,8 +116,13 @@
   if (IsNewClearBrowsingDataUIEnabled() &&
       self.listType == ClearBrowsingDataListType::kListTypeCollectionView) {
     [model addSectionWithIdentifier:SectionIdentifierTimeRange];
-    [model addItem:[self timeRangeItem]
+    ListItem* timeRangeItem = [self timeRangeItem];
+    [model addItem:timeRangeItem
         toSectionWithIdentifier:SectionIdentifierTimeRange];
+    if (self.listType == ClearBrowsingDataListType::kListTypeCollectionView) {
+      self.collectionViewTimeRangeItem =
+          base::mac::ObjCCastStrict<LegacySettingsDetailItem>(timeRangeItem);
+    }
   }
 
   [self addClearBrowsingDataItemsToModel:model];
@@ -208,7 +207,9 @@
                              (~NSByteCountFormatterUseKB);
     formatter.countStyle = NSByteCountFormatterCountStyleMemory;
     NSString* formattedSize = [formatter stringFromByteCount:cacheSizeBytes];
-    return (self.timePeriod == browsing_data::TimePeriod::ALL_TIME)
+    return (!IsNewClearBrowsingDataUIEnabled() ||
+            _timeRangePref.GetValue() ==
+                static_cast<int>(browsing_data::TimePeriod::ALL_TIME))
                ? formattedSize
                : l10n_util::GetNSStringF(
                      IDS_DEL_CACHE_COUNTER_UPPER_ESTIMATE,
@@ -542,8 +543,12 @@
 - (void)clearDataForDataTypes:(BrowsingDataRemoveMask)mask {
   DCHECK(mask != BrowsingDataRemoveMask::REMOVE_NOTHING);
 
+  browsing_data::TimePeriod timePeriod =
+      IsNewClearBrowsingDataUIEnabled()
+          ? static_cast<browsing_data::TimePeriod>(_timeRangePref.GetValue())
+          : browsing_data::TimePeriod::ALL_TIME;
   [self.consumer removeBrowsingDataForBrowserState:_browserState
-                                        timePeriod:self.timePeriod
+                                        timePeriod:timePeriod
                                         removeMask:mask
                                    completionBlock:nil];
 
@@ -675,7 +680,10 @@
 - (void)timeRangeSelectorViewController:
             (TimeRangeSelectorCollectionViewController*)collectionViewController
                     didSelectTimePeriod:(browsing_data::TimePeriod)timePeriod {
-  self.timePeriod = timePeriod;
+  NSString* detailText = [TimeRangeSelectorCollectionViewController
+      timePeriodLabelForPrefs:self.browserState->GetPrefs()];
+  self.collectionViewTimeRangeItem.detailText = detailText;
+  [self.consumer updateCellsForItem:self.collectionViewTimeRangeItem];
 }
 
 @end