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

Side by Side Diff: ios/chrome/browser/ui/settings/content_settings_collection_view_controller.mm

Issue 2870783002: Adds Compose Email Settings UI for deprecating Native App Launcher (Closed)
Patch Set: comments Created 3 years, 7 months 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 unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698