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

Unified Diff: ios/chrome/browser/ui/settings/content_settings_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/content_settings_collection_view_controller.mm
diff --git a/ios/chrome/browser/ui/settings/content_settings_collection_view_controller.mm b/ios/chrome/browser/ui/settings/content_settings_collection_view_controller.mm
new file mode 100644
index 0000000000000000000000000000000000000000..fe7c564b85f1fcf84ac6a2dda5eb7a4c1a44f857
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/content_settings_collection_view_controller.mm
@@ -0,0 +1,211 @@
+// Copyright 2013 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/content_settings_collection_view_controller.h"
+
+#include "base/logging.h"
+#include "base/mac/scoped_nsobject.h"
+#include "components/content_settings/core/browser/host_content_settings_map.h"
+#include "components/content_settings/core/common/content_settings.h"
+#include "components/content_settings/core/common/content_settings_types.h"
+#include "components/prefs/pref_change_registrar.h"
+#include "components/prefs/pref_service.h"
+#include "components/strings/grit/components_strings.h"
+#include "components/translate/core/common/translate_pref_names.h"
+#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
+#include "ios/chrome/browser/content_settings/host_content_settings_map_factory.h"
+#import "ios/chrome/browser/prefs/pref_observer_bridge.h"
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item.h"
+#import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
+#import "ios/chrome/browser/ui/settings/block_popups_collection_view_controller.h"
+#import "ios/chrome/browser/ui/settings/settings_navigation_controller.h"
+#import "ios/chrome/browser/ui/settings/translate_collection_view_controller.h"
+#import "ios/chrome/browser/ui/settings/utils/content_setting_backed_boolean.h"
+#include "ios/chrome/grit/ios_strings.h"
+#import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h"
+#import "ios/third_party/material_components_ios/src/components/Palettes/src/MaterialPalettes.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/l10n/l10n_util_mac.h"
+
+namespace {
+
+typedef NS_ENUM(NSInteger, SectionIdentifier) {
+ SectionIdentifierSettings = kSectionIdentifierEnumZero,
+};
+
+typedef NS_ENUM(NSInteger, ItemType) {
+ ItemTypeSettingsBlockPopups = kItemTypeEnumZero,
+ ItemTypeSettingsTranslate,
+};
+
+} // namespace
+
+@interface ContentSettingsCollectionViewController ()<PrefObserverDelegate,
+ BooleanObserver> {
+ // Pref observer to track changes to prefs.
+ std::unique_ptr<PrefObserverBridge> _prefObserverBridge;
+ // Registrar for pref changes notifications.
+ PrefChangeRegistrar _prefChangeRegistrar;
+
+ // The observable boolean that binds to the "Disable Popups" setting state.
+ base::scoped_nsobject<ContentSettingBackedBoolean> _disablePopupsSetting;
+
+ // Updatable Items
+ base::scoped_nsobject<CollectionViewDetailItem> _blockPopupsDetailItem;
+ base::scoped_nsobject<CollectionViewDetailItem> _translateDetailItem;
+}
+
+// Returns the value for the default setting with ID |settingID|.
+- (ContentSetting)getContentSetting:(ContentSettingsType)settingID;
+
+// Helpers to create collection view items.
+- (id)blockPopupsItem;
+- (id)translateItem;
+
+@end
+
+@implementation ContentSettingsCollectionViewController {
+ ios::ChromeBrowserState* browserState_; // weak
+}
+
+- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
+ DCHECK(browserState);
+ self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+ if (self) {
+ browserState_ = browserState;
+ self.title = l10n_util::GetNSString(IDS_IOS_CONTENT_SETTINGS_TITLE);
+
+ _prefChangeRegistrar.Init(browserState->GetPrefs());
+ _prefObserverBridge.reset(new PrefObserverBridge(self));
+ // Register to observe any changes on Perf backed values displayed by the
+ // screen.
+ _prefObserverBridge->ObserveChangesForPreference(prefs::kEnableTranslate,
+ &_prefChangeRegistrar);
+
+ HostContentSettingsMap* settingsMap =
+ ios::HostContentSettingsMapFactory::GetForBrowserState(browserState);
+ _disablePopupsSetting.reset([[ContentSettingBackedBoolean alloc]
+ initWithHostContentSettingsMap:settingsMap
+ settingID:CONTENT_SETTINGS_TYPE_POPUPS
+ inverted:YES]);
+ [_disablePopupsSetting setObserver:self];
+
+ [self loadModel];
+ }
+ return self;
+}
+
+- (void)dealloc {
+ [_disablePopupsSetting setObserver:nil];
+ [super dealloc];
+}
+
+- (instancetype)init {
+ NOTREACHED();
+ return nil;
+}
+
+- (void)loadModel {
+ [super loadModel];
+
+ CollectionViewModel* model = self.collectionViewModel;
+ [model addSectionWithIdentifier:SectionIdentifierSettings];
+ [model addItem:[self blockPopupsItem]
+ toSectionWithIdentifier:SectionIdentifierSettings];
+ [model addItem:[self translateItem]
+ toSectionWithIdentifier:SectionIdentifierSettings];
+}
+
+- (CollectionViewItem*)blockPopupsItem {
+ _blockPopupsDetailItem.reset([[CollectionViewDetailItem alloc]
+ initWithType:ItemTypeSettingsBlockPopups]);
+ NSString* subtitle = [_disablePopupsSetting value]
+ ? l10n_util::GetNSString(IDS_IOS_SETTING_ON)
+ : l10n_util::GetNSString(IDS_IOS_SETTING_OFF);
+ _blockPopupsDetailItem.get().text =
+ l10n_util::GetNSString(IDS_IOS_BLOCK_POPUPS);
+ _blockPopupsDetailItem.get().detailText = subtitle;
+ _blockPopupsDetailItem.get().accessoryType =
+ MDCCollectionViewCellAccessoryDisclosureIndicator;
+ _blockPopupsDetailItem.get().accessibilityTraits |=
+ UIAccessibilityTraitButton;
+ return _blockPopupsDetailItem;
+}
+
+- (CollectionViewItem*)translateItem {
+ _translateDetailItem.reset([[CollectionViewDetailItem alloc]
+ initWithType:ItemTypeSettingsTranslate]);
+ BOOL enabled = browserState_->GetPrefs()->GetBoolean(prefs::kEnableTranslate);
+ NSString* subtitle = enabled ? l10n_util::GetNSString(IDS_IOS_SETTING_ON)
+ : l10n_util::GetNSString(IDS_IOS_SETTING_OFF);
+ _translateDetailItem.get().text =
+ l10n_util::GetNSString(IDS_IOS_TRANSLATE_SETTING);
+ _translateDetailItem.get().detailText = subtitle;
+ _translateDetailItem.get().accessoryType =
+ MDCCollectionViewCellAccessoryDisclosureIndicator;
+ _translateDetailItem.get().accessibilityTraits |= UIAccessibilityTraitButton;
+ return _translateDetailItem;
+}
+
+- (ContentSetting)getContentSetting:(ContentSettingsType)settingID {
+ return ios::HostContentSettingsMapFactory::GetForBrowserState(browserState_)
+ ->GetDefaultContentSetting(settingID, NULL);
+}
+
+#pragma mark - UICollectionViewDelegate
+
+- (void)collectionView:(UICollectionView*)collectionView
+ didSelectItemAtIndexPath:(NSIndexPath*)indexPath {
+ [super collectionView:collectionView didSelectItemAtIndexPath:indexPath];
+
+ NSInteger itemType =
+ [self.collectionViewModel itemTypeForIndexPath:indexPath];
+ switch (itemType) {
+ case ItemTypeSettingsBlockPopups: {
+ base::scoped_nsobject<UIViewController> controller(
+ [[BlockPopupsCollectionViewController alloc]
+ initWithBrowserState:browserState_]);
+ [self.navigationController pushViewController:controller animated:YES];
+ break;
+ }
+ case ItemTypeSettingsTranslate: {
+ base::scoped_nsobject<UIViewController> controller(
+ [[TranslateCollectionViewController alloc]
+ initWithPrefs:browserState_->GetPrefs()]);
+ [self.navigationController pushViewController:controller animated:YES];
+ break;
+ }
+ }
+}
+
+#pragma mark - PrefObserverDelegate
+
+- (void)onPreferenceChanged:(const std::string&)preferenceName {
+ if (preferenceName == prefs::kEnableTranslate) {
+ BOOL enabled = browserState_->GetPrefs()->GetBoolean(preferenceName);
+ NSString* subtitle = enabled ? l10n_util::GetNSString(IDS_IOS_SETTING_ON)
+ : l10n_util::GetNSString(IDS_IOS_SETTING_OFF);
+ _translateDetailItem.get().detailText = subtitle;
+ [self reconfigureCellsForItems:@[ _translateDetailItem ]
+ inSectionWithIdentifier:SectionIdentifierSettings];
+ }
+}
+
+#pragma mark - BooleanObserver
+
+- (void)booleanDidChange:(id<ObservableBoolean>)observableBoolean {
+ DCHECK_EQ(observableBoolean, _disablePopupsSetting.get());
+
+ NSString* subtitle = [_disablePopupsSetting value]
+ ? l10n_util::GetNSString(IDS_IOS_SETTING_ON)
+ : l10n_util::GetNSString(IDS_IOS_SETTING_OFF);
+ // Update the item.
+ _blockPopupsDetailItem.get().detailText = subtitle;
+
+ // Update the cell.
+ [self reconfigureCellsForItems:@[ _blockPopupsDetailItem ]
+ inSectionWithIdentifier:SectionIdentifierSettings];
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698