Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "ios/chrome/browser/ui/settings/content_settings_collection_view_control ler.h" | 5 #import "ios/chrome/browser/ui/settings/content_settings_collection_view_control ler.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "components/content_settings/core/browser/host_content_settings_map.h" | 8 #include "components/content_settings/core/browser/host_content_settings_map.h" |
| 9 #include "components/content_settings/core/common/content_settings.h" | 9 #include "components/content_settings/core/common/content_settings.h" |
| 10 #include "components/content_settings/core/common/content_settings_types.h" | 10 #include "components/content_settings/core/common/content_settings_types.h" |
| 11 #include "components/prefs/pref_change_registrar.h" | 11 #include "components/prefs/pref_change_registrar.h" |
| 12 #include "components/prefs/pref_service.h" | 12 #include "components/prefs/pref_service.h" |
| 13 #include "components/strings/grit/components_strings.h" | 13 #include "components/strings/grit/components_strings.h" |
| 14 #include "components/translate/core/browser/translate_pref_names.h" | 14 #include "components/translate/core/browser/translate_pref_names.h" |
| 15 #include "ios/chrome/browser/browser_state/chrome_browser_state.h" | 15 #include "ios/chrome/browser/browser_state/chrome_browser_state.h" |
| 16 #include "ios/chrome/browser/content_settings/host_content_settings_map_factory. h" | 16 #include "ios/chrome/browser/content_settings/host_content_settings_map_factory. h" |
| 17 #include "ios/chrome/browser/experimental_flags.h" | |
| 17 #import "ios/chrome/browser/prefs/pref_observer_bridge.h" | 18 #import "ios/chrome/browser/prefs/pref_observer_bridge.h" |
| 18 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item .h" | 19 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item .h" |
| 19 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h" | 20 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h" |
| 20 #import "ios/chrome/browser/ui/settings/block_popups_collection_view_controller. h" | 21 #import "ios/chrome/browser/ui/settings/block_popups_collection_view_controller. h" |
| 22 #import "ios/chrome/browser/ui/settings/compose_email_handler_collection_view_co ntroller.h" | |
| 21 #import "ios/chrome/browser/ui/settings/settings_navigation_controller.h" | 23 #import "ios/chrome/browser/ui/settings/settings_navigation_controller.h" |
| 22 #import "ios/chrome/browser/ui/settings/translate_collection_view_controller.h" | 24 #import "ios/chrome/browser/ui/settings/translate_collection_view_controller.h" |
| 23 #import "ios/chrome/browser/ui/settings/utils/content_setting_backed_boolean.h" | 25 #import "ios/chrome/browser/ui/settings/utils/content_setting_backed_boolean.h" |
| 24 #include "ios/chrome/grit/ios_strings.h" | 26 #include "ios/chrome/grit/ios_strings.h" |
| 25 #import "ios/third_party/material_components_ios/src/components/CollectionCells/ src/MaterialCollectionCells.h" | 27 #import "ios/third_party/material_components_ios/src/components/CollectionCells/ src/MaterialCollectionCells.h" |
| 26 #import "ios/third_party/material_components_ios/src/components/Palettes/src/Mat erialPalettes.h" | 28 #import "ios/third_party/material_components_ios/src/components/Palettes/src/Mat erialPalettes.h" |
| 27 #include "ui/base/l10n/l10n_util.h" | 29 #include "ui/base/l10n/l10n_util.h" |
| 28 #include "ui/base/l10n/l10n_util_mac.h" | 30 #include "ui/base/l10n/l10n_util_mac.h" |
| 29 | 31 |
| 30 #if !defined(__has_feature) || !__has_feature(objc_arc) | 32 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 31 #error "This file requires ARC support." | 33 #error "This file requires ARC support." |
| 32 #endif | 34 #endif |
| 33 | 35 |
| 34 namespace { | 36 namespace { |
| 35 | 37 |
| 36 typedef NS_ENUM(NSInteger, SectionIdentifier) { | 38 typedef NS_ENUM(NSInteger, SectionIdentifier) { |
| 37 SectionIdentifierSettings = kSectionIdentifierEnumZero, | 39 SectionIdentifierSettings = kSectionIdentifierEnumZero, |
| 38 }; | 40 }; |
| 39 | 41 |
| 40 typedef NS_ENUM(NSInteger, ItemType) { | 42 typedef NS_ENUM(NSInteger, ItemType) { |
| 41 ItemTypeSettingsBlockPopups = kItemTypeEnumZero, | 43 ItemTypeSettingsBlockPopups = kItemTypeEnumZero, |
| 42 ItemTypeSettingsTranslate, | 44 ItemTypeSettingsTranslate, |
| 45 ItemTypeSettingsComposeEmail, | |
| 43 }; | 46 }; |
| 44 | 47 |
| 45 } // namespace | 48 } // namespace |
| 46 | 49 |
| 47 @interface ContentSettingsCollectionViewController ()<PrefObserverDelegate, | 50 @interface ContentSettingsCollectionViewController ()<PrefObserverDelegate, |
| 48 BooleanObserver> { | 51 BooleanObserver> { |
| 49 // Pref observer to track changes to prefs. | 52 // Pref observer to track changes to prefs. |
| 50 std::unique_ptr<PrefObserverBridge> _prefObserverBridge; | 53 std::unique_ptr<PrefObserverBridge> _prefObserverBridge; |
| 51 // Registrar for pref changes notifications. | 54 // Registrar for pref changes notifications. |
| 52 PrefChangeRegistrar _prefChangeRegistrar; | 55 PrefChangeRegistrar _prefChangeRegistrar; |
| 53 | 56 |
| 54 // The observable boolean that binds to the "Disable Popups" setting state. | 57 // The observable boolean that binds to the "Disable Popups" setting state. |
| 55 ContentSettingBackedBoolean* _disablePopupsSetting; | 58 ContentSettingBackedBoolean* _disablePopupsSetting; |
| 56 | 59 |
| 60 MailtoURLRewriter* _mailtoURLRewriter; | |
|
jif
2017/05/11 14:03:58
optional:
add comment
pkl (ping after 24h if needed)
2017/05/11 17:23:16
Done.
| |
| 61 | |
| 57 // Updatable Items | 62 // Updatable Items |
| 58 CollectionViewDetailItem* _blockPopupsDetailItem; | 63 CollectionViewDetailItem* _blockPopupsDetailItem; |
| 59 CollectionViewDetailItem* _translateDetailItem; | 64 CollectionViewDetailItem* _translateDetailItem; |
| 65 CollectionViewDetailItem* _composeEmailDetailItem; | |
| 60 } | 66 } |
| 61 | 67 |
| 62 // Returns the value for the default setting with ID |settingID|. | 68 // Returns the value for the default setting with ID |settingID|. |
| 63 - (ContentSetting)getContentSetting:(ContentSettingsType)settingID; | 69 - (ContentSetting)getContentSetting:(ContentSettingsType)settingID; |
| 64 | 70 |
| 65 // Helpers to create collection view items. | 71 // Helpers to create collection view items. |
| 66 - (id)blockPopupsItem; | 72 - (id)blockPopupsItem; |
| 67 - (id)translateItem; | 73 - (id)translateItem; |
| 74 - (id)composeEmailItem; | |
| 68 | 75 |
| 69 @end | 76 @end |
| 70 | 77 |
| 71 @implementation ContentSettingsCollectionViewController { | 78 @implementation ContentSettingsCollectionViewController { |
| 72 ios::ChromeBrowserState* browserState_; // weak | 79 ios::ChromeBrowserState* browserState_; // weak |
| 73 } | 80 } |
| 74 | 81 |
| 75 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState { | 82 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState { |
| 76 DCHECK(browserState); | 83 DCHECK(browserState); |
| 77 self = [super initWithStyle:CollectionViewControllerStyleAppBar]; | 84 self = [super initWithStyle:CollectionViewControllerStyleAppBar]; |
| 78 if (self) { | 85 if (self) { |
| 79 browserState_ = browserState; | 86 browserState_ = browserState; |
| 80 self.title = l10n_util::GetNSString(IDS_IOS_CONTENT_SETTINGS_TITLE); | 87 self.title = l10n_util::GetNSString(IDS_IOS_CONTENT_SETTINGS_TITLE); |
| 81 | 88 |
| 82 _prefChangeRegistrar.Init(browserState->GetPrefs()); | 89 _prefChangeRegistrar.Init(browserState->GetPrefs()); |
| 83 _prefObserverBridge.reset(new PrefObserverBridge(self)); | 90 _prefObserverBridge.reset(new PrefObserverBridge(self)); |
| 84 // Register to observe any changes on Perf backed values displayed by the | 91 // Register to observe any changes on Perf backed values displayed by the |
| 85 // screen. | 92 // screen. |
| 86 _prefObserverBridge->ObserveChangesForPreference(prefs::kEnableTranslate, | 93 _prefObserverBridge->ObserveChangesForPreference(prefs::kEnableTranslate, |
| 87 &_prefChangeRegistrar); | 94 &_prefChangeRegistrar); |
| 88 | 95 |
| 89 HostContentSettingsMap* settingsMap = | 96 HostContentSettingsMap* settingsMap = |
| 90 ios::HostContentSettingsMapFactory::GetForBrowserState(browserState); | 97 ios::HostContentSettingsMapFactory::GetForBrowserState(browserState); |
| 91 _disablePopupsSetting = [[ContentSettingBackedBoolean alloc] | 98 _disablePopupsSetting = [[ContentSettingBackedBoolean alloc] |
| 92 initWithHostContentSettingsMap:settingsMap | 99 initWithHostContentSettingsMap:settingsMap |
| 93 settingID:CONTENT_SETTINGS_TYPE_POPUPS | 100 settingID:CONTENT_SETTINGS_TYPE_POPUPS |
| 94 inverted:YES]; | 101 inverted:YES]; |
| 95 [_disablePopupsSetting setObserver:self]; | 102 [_disablePopupsSetting setObserver:self]; |
| 96 | 103 |
| 104 if (!experimental_flags::IsNativeAppLauncherEnabled()) { | |
| 105 _mailtoURLRewriter = [[MailtoURLRewriter alloc] initWithStandardHandlers]; | |
| 106 [_mailtoURLRewriter setObserver:self]; | |
| 107 } | |
| 108 | |
| 97 [self loadModel]; | 109 [self loadModel]; |
| 98 } | 110 } |
| 99 return self; | 111 return self; |
| 100 } | 112 } |
| 101 | 113 |
| 102 - (void)dealloc { | 114 - (void)dealloc { |
| 103 [_disablePopupsSetting setObserver:nil]; | 115 [_disablePopupsSetting setObserver:nil]; |
| 116 [_mailtoURLRewriter setObserver:nil]; | |
|
jif
2017/05/11 14:03:58
This is not necessary.
Filed a bug about removing
pkl (ping after 24h if needed)
2017/05/11 17:23:16
Removed. Thanks.
| |
| 104 } | 117 } |
| 105 | 118 |
| 106 - (instancetype)init { | 119 - (instancetype)init { |
| 107 NOTREACHED(); | 120 NOTREACHED(); |
| 108 return nil; | 121 return nil; |
| 109 } | 122 } |
| 110 | 123 |
| 111 - (void)loadModel { | 124 - (void)loadModel { |
| 112 [super loadModel]; | 125 [super loadModel]; |
| 113 | 126 |
| 114 CollectionViewModel* model = self.collectionViewModel; | 127 CollectionViewModel* model = self.collectionViewModel; |
| 115 [model addSectionWithIdentifier:SectionIdentifierSettings]; | 128 [model addSectionWithIdentifier:SectionIdentifierSettings]; |
| 116 [model addItem:[self blockPopupsItem] | 129 [model addItem:[self blockPopupsItem] |
| 117 toSectionWithIdentifier:SectionIdentifierSettings]; | 130 toSectionWithIdentifier:SectionIdentifierSettings]; |
| 118 [model addItem:[self translateItem] | 131 [model addItem:[self translateItem] |
| 119 toSectionWithIdentifier:SectionIdentifierSettings]; | 132 toSectionWithIdentifier:SectionIdentifierSettings]; |
| 133 if (!experimental_flags::IsNativeAppLauncherEnabled() && | |
| 134 [[_mailtoURLRewriter defaultHandlers] count] > 1) { | |
| 135 [model addItem:[self composeEmailItem] | |
| 136 toSectionWithIdentifier:SectionIdentifierSettings]; | |
| 137 } | |
| 120 } | 138 } |
| 121 | 139 |
| 122 - (CollectionViewItem*)blockPopupsItem { | 140 - (CollectionViewItem*)blockPopupsItem { |
| 123 _blockPopupsDetailItem = [[CollectionViewDetailItem alloc] | 141 _blockPopupsDetailItem = [[CollectionViewDetailItem alloc] |
| 124 initWithType:ItemTypeSettingsBlockPopups]; | 142 initWithType:ItemTypeSettingsBlockPopups]; |
| 125 NSString* subtitle = [_disablePopupsSetting value] | 143 NSString* subtitle = [_disablePopupsSetting value] |
| 126 ? l10n_util::GetNSString(IDS_IOS_SETTING_ON) | 144 ? l10n_util::GetNSString(IDS_IOS_SETTING_ON) |
| 127 : l10n_util::GetNSString(IDS_IOS_SETTING_OFF); | 145 : l10n_util::GetNSString(IDS_IOS_SETTING_OFF); |
| 128 _blockPopupsDetailItem.text = l10n_util::GetNSString(IDS_IOS_BLOCK_POPUPS); | 146 _blockPopupsDetailItem.text = l10n_util::GetNSString(IDS_IOS_BLOCK_POPUPS); |
| 129 _blockPopupsDetailItem.detailText = subtitle; | 147 _blockPopupsDetailItem.detailText = subtitle; |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 140 NSString* subtitle = enabled ? l10n_util::GetNSString(IDS_IOS_SETTING_ON) | 158 NSString* subtitle = enabled ? l10n_util::GetNSString(IDS_IOS_SETTING_ON) |
| 141 : l10n_util::GetNSString(IDS_IOS_SETTING_OFF); | 159 : l10n_util::GetNSString(IDS_IOS_SETTING_OFF); |
| 142 _translateDetailItem.text = l10n_util::GetNSString(IDS_IOS_TRANSLATE_SETTING); | 160 _translateDetailItem.text = l10n_util::GetNSString(IDS_IOS_TRANSLATE_SETTING); |
| 143 _translateDetailItem.detailText = subtitle; | 161 _translateDetailItem.detailText = subtitle; |
| 144 _translateDetailItem.accessoryType = | 162 _translateDetailItem.accessoryType = |
| 145 MDCCollectionViewCellAccessoryDisclosureIndicator; | 163 MDCCollectionViewCellAccessoryDisclosureIndicator; |
| 146 _translateDetailItem.accessibilityTraits |= UIAccessibilityTraitButton; | 164 _translateDetailItem.accessibilityTraits |= UIAccessibilityTraitButton; |
| 147 return _translateDetailItem; | 165 return _translateDetailItem; |
| 148 } | 166 } |
| 149 | 167 |
| 168 - (CollectionViewItem*)composeEmailItem { | |
| 169 _composeEmailDetailItem = [[CollectionViewDetailItem alloc] | |
| 170 initWithType:ItemTypeSettingsComposeEmail]; | |
| 171 _composeEmailDetailItem.text = | |
| 172 l10n_util::GetNSString(IDS_IOS_COMPOSE_EMAIL_SETTING); | |
| 173 _composeEmailDetailItem.detailText = [_mailtoURLRewriter defaultHandlerName]; | |
| 174 _composeEmailDetailItem.accessoryType = | |
| 175 MDCCollectionViewCellAccessoryDisclosureIndicator; | |
| 176 _composeEmailDetailItem.accessibilityTraits |= UIAccessibilityTraitButton; | |
| 177 return _composeEmailDetailItem; | |
| 178 } | |
| 179 | |
| 150 - (ContentSetting)getContentSetting:(ContentSettingsType)settingID { | 180 - (ContentSetting)getContentSetting:(ContentSettingsType)settingID { |
| 151 return ios::HostContentSettingsMapFactory::GetForBrowserState(browserState_) | 181 return ios::HostContentSettingsMapFactory::GetForBrowserState(browserState_) |
| 152 ->GetDefaultContentSetting(settingID, NULL); | 182 ->GetDefaultContentSetting(settingID, NULL); |
| 153 } | 183 } |
| 154 | 184 |
| 155 #pragma mark - UICollectionViewDelegate | 185 #pragma mark - UICollectionViewDelegate |
| 156 | 186 |
| 157 - (void)collectionView:(UICollectionView*)collectionView | 187 - (void)collectionView:(UICollectionView*)collectionView |
| 158 didSelectItemAtIndexPath:(NSIndexPath*)indexPath { | 188 didSelectItemAtIndexPath:(NSIndexPath*)indexPath { |
| 159 [super collectionView:collectionView didSelectItemAtIndexPath:indexPath]; | 189 [super collectionView:collectionView didSelectItemAtIndexPath:indexPath]; |
| 160 | 190 |
| 161 NSInteger itemType = | 191 NSInteger itemType = |
| 162 [self.collectionViewModel itemTypeForIndexPath:indexPath]; | 192 [self.collectionViewModel itemTypeForIndexPath:indexPath]; |
| 163 switch (itemType) { | 193 switch (itemType) { |
| 164 case ItemTypeSettingsBlockPopups: { | 194 case ItemTypeSettingsBlockPopups: { |
| 165 UIViewController* controller = | 195 UIViewController* controller = |
| 166 [[BlockPopupsCollectionViewController alloc] | 196 [[BlockPopupsCollectionViewController alloc] |
| 167 initWithBrowserState:browserState_]; | 197 initWithBrowserState:browserState_]; |
| 168 [self.navigationController pushViewController:controller animated:YES]; | 198 [self.navigationController pushViewController:controller animated:YES]; |
| 169 break; | 199 break; |
| 170 } | 200 } |
| 171 case ItemTypeSettingsTranslate: { | 201 case ItemTypeSettingsTranslate: { |
| 172 UIViewController* controller = [[TranslateCollectionViewController alloc] | 202 UIViewController* controller = [[TranslateCollectionViewController alloc] |
| 173 initWithPrefs:browserState_->GetPrefs()]; | 203 initWithPrefs:browserState_->GetPrefs()]; |
| 174 [self.navigationController pushViewController:controller animated:YES]; | 204 [self.navigationController pushViewController:controller animated:YES]; |
| 175 break; | 205 break; |
| 176 } | 206 } |
| 207 case ItemTypeSettingsComposeEmail: { | |
| 208 UIViewController* controller = | |
| 209 [[ComposeEmailHandlerCollectionViewController alloc] | |
| 210 initWithRewriter:_mailtoURLRewriter]; | |
| 211 [self.navigationController pushViewController:controller animated:YES]; | |
| 212 break; | |
| 213 } | |
| 177 } | 214 } |
| 178 } | 215 } |
| 179 | 216 |
| 180 #pragma mark - PrefObserverDelegate | 217 #pragma mark - PrefObserverDelegate |
| 181 | 218 |
| 182 - (void)onPreferenceChanged:(const std::string&)preferenceName { | 219 - (void)onPreferenceChanged:(const std::string&)preferenceName { |
| 183 if (preferenceName == prefs::kEnableTranslate) { | 220 if (preferenceName == prefs::kEnableTranslate) { |
| 184 BOOL enabled = browserState_->GetPrefs()->GetBoolean(preferenceName); | 221 BOOL enabled = browserState_->GetPrefs()->GetBoolean(preferenceName); |
| 185 NSString* subtitle = enabled ? l10n_util::GetNSString(IDS_IOS_SETTING_ON) | 222 NSString* subtitle = enabled ? l10n_util::GetNSString(IDS_IOS_SETTING_ON) |
| 186 : l10n_util::GetNSString(IDS_IOS_SETTING_OFF); | 223 : l10n_util::GetNSString(IDS_IOS_SETTING_OFF); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 197 NSString* subtitle = [_disablePopupsSetting value] | 234 NSString* subtitle = [_disablePopupsSetting value] |
| 198 ? l10n_util::GetNSString(IDS_IOS_SETTING_ON) | 235 ? l10n_util::GetNSString(IDS_IOS_SETTING_ON) |
| 199 : l10n_util::GetNSString(IDS_IOS_SETTING_OFF); | 236 : l10n_util::GetNSString(IDS_IOS_SETTING_OFF); |
| 200 // Update the item. | 237 // Update the item. |
| 201 _blockPopupsDetailItem.detailText = subtitle; | 238 _blockPopupsDetailItem.detailText = subtitle; |
| 202 | 239 |
| 203 // Update the cell. | 240 // Update the cell. |
| 204 [self reconfigureCellsForItems:@[ _blockPopupsDetailItem ]]; | 241 [self reconfigureCellsForItems:@[ _blockPopupsDetailItem ]]; |
| 205 } | 242 } |
| 206 | 243 |
| 244 #pragma mark - MailtoURLRewriterObserver | |
| 245 | |
| 246 - (void)rewriterDidChange:(MailtoURLRewriter*)rewriter { | |
| 247 if (rewriter != _mailtoURLRewriter) | |
| 248 return; | |
| 249 _composeEmailDetailItem.detailText = [rewriter defaultHandlerName]; | |
| 250 [self reconfigureCellsForItems:@[ _composeEmailDetailItem ]]; | |
| 251 } | |
| 252 | |
| 207 @end | 253 @end |
| OLD | NEW |