Commit ad587681 authored by Ewann's avatar Ewann Committed by Commit Bot

[iOS] Updates Cookies option selection

This CL updates Cookies option selection, once an option is selected its
accessory is set and the previous one is hidden.

Bug: 1064961
Change-Id: I4db60f0629b4b308031ef1854ce29ccddb8cc87f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2130794
Commit-Queue: Ewann Pellé <ewannpv@chromium.org>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#759175}
parent 5e78df1b
......@@ -2,17 +2,15 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
source_set("privacy") {
source_set("privacy_ui") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [
"cookies_coordinator.h",
"cookies_coordinator.mm",
"cookies_commands.h",
"cookies_consumer.h",
"cookies_view_controller.h",
"cookies_view_controller.mm",
"handoff_table_view_controller.h",
"handoff_table_view_controller.mm",
"privacy_coordinator.h",
"privacy_coordinator.mm",
"privacy_navigation_commands.h",
"privacy_table_view_controller.h",
"privacy_table_view_controller.mm",
......@@ -31,12 +29,12 @@ source_set("privacy") {
"//ios/chrome/browser/ui:feature_flags",
"//ios/chrome/browser/ui/colors",
"//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/ui/coordinators:chrome_coordinators",
"//ios/chrome/browser/ui/list_model",
"//ios/chrome/browser/ui/page_info:features",
"//ios/chrome/browser/ui/settings:constants",
"//ios/chrome/browser/ui/settings:settings_root",
"//ios/chrome/browser/ui/settings/cells",
"//ios/chrome/browser/ui/settings/clear_browsing_data:clear_browsing_data",
"//ios/chrome/browser/ui/settings/clear_browsing_data",
"//ios/chrome/browser/ui/settings/sync/utils",
"//ios/chrome/browser/ui/settings/utils",
"//ios/chrome/browser/ui/table_view",
......@@ -46,6 +44,27 @@ source_set("privacy") {
]
}
source_set("privacy") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [
"cookies_coordinator.h",
"cookies_coordinator.mm",
"cookies_mediator.h",
"cookies_mediator.mm",
"privacy_coordinator.h",
"privacy_coordinator.mm",
]
deps = [
":privacy_ui",
"//ios/chrome/browser/main:public",
"//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/ui/coordinators:chrome_coordinators",
"//ios/chrome/browser/ui/settings:settings_root",
"//ios/chrome/browser/ui/settings/clear_browsing_data",
]
libs = [ "UIKit.framework" ]
}
source_set("unit_tests") {
configs += [ "//build/config/compiler:enable_arc" ]
testonly = true
......@@ -64,7 +83,7 @@ source_set("unit_tests") {
"//ios/chrome/browser/browsing_data:feature_flags",
"//ios/chrome/browser/main:test_support",
"//ios/chrome/browser/prefs:browser_prefs",
"//ios/chrome/browser/ui/settings/privacy",
"//ios/chrome/browser/ui/settings/privacy:privacy_ui",
"//ios/chrome/browser/ui/table_view:test_support",
"//ios/chrome/test:test_support",
"//ios/web/public/test",
......
// Copyright 2020 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.
#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_COOKIES_COMMANDS_H_
#define IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_COOKIES_COMMANDS_H_
#import "ios/chrome/browser/ui/settings/privacy/cookies_consumer.h"
// Commands related to the Cookies state.
@protocol PrivacyCookiesCommands
// Updates Cookies settings with the given item type.
- (void)selectedCookiesSettingType:(CookiesSettingType)settingType;
@end
#endif // IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_COOKIES_COMMANDS_H_
// Copyright 2020 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.
#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_COOKIES_CONSUMER_H_
#define IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_COOKIES_CONSUMER_H_
#import "ios/chrome/browser/ui/list_model/list_model.h"
typedef NS_ENUM(NSInteger, CookiesSettingType) {
SettingTypeAllowCookies,
SettingTypeBlockThirdPartyCookiesIncognito,
SettingTypeBlockThirdPartyCookies,
SettingTypeBlockAllCookies,
};
// A consumer for Cookies settings changes.
@protocol PrivacyCookiesConsumer
// Called when a cookie setting option was selected.
- (void)cookiesSettingsOptionSelected:(CookiesSettingType)settingType;
@end
#endif // IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_COOKIES_CONSUMER_H_
......@@ -5,6 +5,11 @@
#import "ios/chrome/browser/ui/settings/privacy/cookies_coordinator.h"
#include "base/logging.h"
#include "ios/chrome/browser/main/browser.h"
#import "ios/chrome/browser/ui/commands/browser_commands.h"
#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
#import "ios/chrome/browser/ui/settings/privacy/cookies_commands.h"
#import "ios/chrome/browser/ui/settings/privacy/cookies_mediator.h"
#import "ios/chrome/browser/ui/settings/privacy/cookies_view_controller.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
......@@ -12,9 +17,11 @@
#endif
@interface PrivacyCookiesCoordinator () <
PrivacyCookiesCommands,
PrivacyCookiesViewControllerPresentationDelegate>
@property(nonatomic, strong) PrivacyCookiesViewController* viewController;
@property(nonatomic, strong) PrivacyCookiesMediator* mediator;
@end
......@@ -36,13 +43,26 @@
- (void)start {
self.viewController = [[PrivacyCookiesViewController alloc]
initWithStyle:UITableViewStylePlain];
DCHECK(self.baseNavigationController);
[self.baseNavigationController pushViewController:self.viewController
animated:YES];
self.viewController.presentationDelegate = self;
self.viewController.handler = self;
self.mediator = [[PrivacyCookiesMediator alloc] init];
self.mediator.consumer = self.viewController;
}
- (void)stop {
self.viewController = nil;
self.mediator = nil;
}
#pragma mark - PrivacyCookiesCommands
- (void)selectedCookiesSettingType:(CookiesSettingType)settingType {
// TODO(crbug.com/1064961): Implement this.
}
#pragma mark - PrivacyCookiesViewControllerPresentationDelegate
......
// Copyright 2020 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.
#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_COOKIES_MEDIATOR_H_
#define IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_COOKIES_MEDIATOR_H_
#import <Foundation/Foundation.h>
@protocol PrivacyCookiesConsumer;
// The mediator is pushing the data for the root of the Cookies screen to the
// consumer.
@interface PrivacyCookiesMediator : NSObject
// The consumer for this mediator.
@property(nonatomic, weak) id<PrivacyCookiesConsumer> consumer;
@end
#endif // IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_COOKIES_MEDIATOR_H_
// Copyright 2020 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/privacy/cookies_mediator.h"
#import "ios/chrome/browser/ui/settings/privacy/cookies_consumer.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@implementation PrivacyCookiesMediator
- (void)setConsumer:(id<PrivacyCookiesConsumer>)consumer {
if (_consumer == consumer)
return;
_consumer = consumer;
[self updateConsumer];
}
#pragma mark - Private
- (void)updateConsumer {
// TODO(crbug.com/1064961): Implement this.
[self.consumer cookiesSettingsOptionSelected:SettingTypeAllowCookies];
}
@end
......@@ -9,8 +9,12 @@
#import "ios/chrome/browser/ui/settings/settings_root_table_view_controller.h"
#import "ios/chrome/browser/ui/settings/privacy/cookies_consumer.h"
@class PrivacyCookiesViewController;
@protocol PrivacyCookiesCommands;
// Delegate for presentation events related to
// PrivacyCookiesViewController.
@protocol PrivacyCookiesViewControllerPresentationDelegate
......@@ -22,12 +26,16 @@
@end
// View Controller for displaying the Cookies screen.
@interface PrivacyCookiesViewController : SettingsRootTableViewController
@interface PrivacyCookiesViewController
: SettingsRootTableViewController <PrivacyCookiesConsumer>
// Presentation delegate.
@property(nonatomic, weak) id<PrivacyCookiesViewControllerPresentationDelegate>
presentationDelegate;
// Handler used to update Cookies settings.
@property(nonatomic, weak) id<PrivacyCookiesCommands> handler;
@end
#endif // IOS_CHROME_BROWSER_UI_SETTINGS_PRIVACY_COOKIES_VIEW_CONTROLLER_H_
......@@ -4,7 +4,9 @@
#import "ios/chrome/browser/ui/settings/privacy/cookies_view_controller.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_multi_detail_text_item.h"
#import "ios/chrome/browser/ui/settings/cells/settings_multiline_detail_item.h"
#import "ios/chrome/browser/ui/settings/privacy/cookies_commands.h"
#import "ios/chrome/browser/ui/settings/settings_navigation_controller.h"
#include "ios/chrome/grit/ios_strings.h"
#include "ui/base/l10n/l10n_util.h"
......@@ -14,10 +16,6 @@
namespace {
typedef NS_ENUM(NSInteger, SectionIdentifier) {
SectionIdentifierContent = kSectionIdentifierEnumZero,
};
typedef NS_ENUM(NSInteger, ItemType) {
ItemTypeAllowCookies = kItemTypeEnumZero,
ItemTypeBlockThirdPartyCookiesIncognito,
......@@ -26,18 +24,32 @@ typedef NS_ENUM(NSInteger, ItemType) {
ItemTypeCookiesDescription,
};
typedef NS_ENUM(NSInteger, SectionIdentifier) {
SectionIdentifierContent = kSectionIdentifierEnumZero,
};
} // namespace
@interface PrivacyCookiesViewController ()
@property(nonatomic, strong) TableViewItem* selectedCookiesItem;
@property(nonatomic, assign) ItemType selectedSetting;
@end
@implementation PrivacyCookiesViewController
#pragma mark - UIViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.title = l10n_util::GetNSString(IDS_IOS_OPTIONS_PRIVACY_COOKIES);
[self loadModel];
// TODO(crbug.com/1064961): Implement this.
NSIndexPath* indexPath =
[self.tableViewModel indexPathForItemType:self.selectedSetting];
[self updateSelectedCookiesItemWithIndexPath:indexPath];
}
- (void)didMoveToParentViewController:(UIViewController*)parent {
......@@ -53,44 +65,117 @@ typedef NS_ENUM(NSInteger, ItemType) {
[super loadModel];
[self.tableViewModel addSectionWithIdentifier:SectionIdentifierContent];
TableViewMultiDetailTextItem* allowCookies =
[[TableViewMultiDetailTextItem alloc] initWithType:ItemTypeAllowCookies];
SettingsMultilineDetailItem* allowCookies =
[[SettingsMultilineDetailItem alloc] initWithType:ItemTypeAllowCookies];
allowCookies.text = l10n_util::GetNSString(
IDS_IOS_OPTIONS_PRIVACY_COOKIES_ALLOW_COOKIES_TITLE);
allowCookies.leadingDetailText = l10n_util::GetNSString(
allowCookies.detailText = l10n_util::GetNSString(
IDS_IOS_OPTIONS_PRIVACY_COOKIES_ALLOW_COOKIES_DETAIL);
[self.tableViewModel addItem:allowCookies
toSectionWithIdentifier:SectionIdentifierContent];
TableViewMultiDetailTextItem* blockThirdPartyCookiesIncognito =
[[TableViewMultiDetailTextItem alloc]
SettingsMultilineDetailItem* blockThirdPartyCookiesIncognito =
[[SettingsMultilineDetailItem alloc]
initWithType:ItemTypeBlockThirdPartyCookiesIncognito];
blockThirdPartyCookiesIncognito.text = l10n_util::GetNSString(
IDS_IOS_OPTIONS_PRIVACY_COOKIES_BLOCK_THIRD_PARTY_COOKIES_INCOGNITO_TITLE);
blockThirdPartyCookiesIncognito.leadingDetailText = l10n_util::GetNSString(
blockThirdPartyCookiesIncognito.detailText = l10n_util::GetNSString(
IDS_IOS_OPTIONS_PRIVACY_COOKIES_BLOCK_THIRD_PARTY_COOKIES_DETAIL);
[self.tableViewModel addItem:blockThirdPartyCookiesIncognito
toSectionWithIdentifier:SectionIdentifierContent];
TableViewMultiDetailTextItem* blockThirdPartyCookies =
[[TableViewMultiDetailTextItem alloc]
SettingsMultilineDetailItem* blockThirdPartyCookies =
[[SettingsMultilineDetailItem alloc]
initWithType:ItemTypeBlockThirdPartyCookies];
blockThirdPartyCookies.text = l10n_util::GetNSString(
IDS_IOS_OPTIONS_PRIVACY_COOKIES_BLOCK_THIRD_PARTY_COOKIES_TITLE);
blockThirdPartyCookies.leadingDetailText = l10n_util::GetNSString(
blockThirdPartyCookies.detailText = l10n_util::GetNSString(
IDS_IOS_OPTIONS_PRIVACY_COOKIES_BLOCK_THIRD_PARTY_COOKIES_DETAIL);
[self.tableViewModel addItem:blockThirdPartyCookies
toSectionWithIdentifier:SectionIdentifierContent];
TableViewMultiDetailTextItem* blockAllCookies =
[[TableViewMultiDetailTextItem alloc]
SettingsMultilineDetailItem* blockAllCookies =
[[SettingsMultilineDetailItem alloc]
initWithType:ItemTypeBlockAllCookies];
blockAllCookies.text = l10n_util::GetNSString(
IDS_IOS_OPTIONS_PRIVACY_COOKIES_BLOCK_ALL_COOKIES_TITLE);
blockAllCookies.leadingDetailText = l10n_util::GetNSString(
blockAllCookies.detailText = l10n_util::GetNSString(
IDS_IOS_OPTIONS_PRIVACY_COOKIES_BLOCK_ALL_COOKIES_DETAIL);
[self.tableViewModel addItem:blockAllCookies
toSectionWithIdentifier:SectionIdentifierContent];
// TODO(crbug.com/1064961): Implement this.
}
#pragma mark - Private
// Adds accessoryType to the selected item & cell.
// Removes the accessoryType of the prevous selected option item & cell.
- (void)updateSelectedCookiesItemWithIndexPath:(NSIndexPath*)indexPath {
UITableViewCell* selectedCookiesItemCell;
if (self.selectedCookiesItem) {
self.selectedCookiesItem.accessoryType = UITableViewCellAccessoryNone;
selectedCookiesItemCell = [self.tableView
cellForRowAtIndexPath:[self.tableViewModel
indexPathForItem:self.selectedCookiesItem]];
selectedCookiesItemCell.accessoryType = UITableViewCellAccessoryNone;
}
self.selectedCookiesItem = [self.tableViewModel itemAtIndexPath:indexPath];
self.selectedCookiesItem.accessoryType = UITableViewCellAccessoryCheckmark;
selectedCookiesItemCell = [self.tableView
cellForRowAtIndexPath:[self.tableViewModel
indexPathForItem:self.selectedCookiesItem]];
selectedCookiesItemCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
// Returns the ItemType associated with the CookiesSettingType.
- (ItemType)itemTypeForCookiesSettingType:(CookiesSettingType)settingType {
switch (settingType) {
case SettingTypeBlockThirdPartyCookiesIncognito:
return ItemTypeBlockThirdPartyCookiesIncognito;
case SettingTypeBlockThirdPartyCookies:
return ItemTypeBlockThirdPartyCookies;
case SettingTypeBlockAllCookies:
return ItemTypeBlockAllCookies;
case SettingTypeAllowCookies:
return ItemTypeAllowCookies;
}
}
// Returns the CookiesSettingType associated with the ItemType.
- (CookiesSettingType)SettingTypeForCookiesItemType:(ItemType)itemType {
switch (itemType) {
case ItemTypeBlockThirdPartyCookiesIncognito:
return SettingTypeBlockThirdPartyCookiesIncognito;
case ItemTypeBlockThirdPartyCookies:
return SettingTypeBlockThirdPartyCookies;
case ItemTypeBlockAllCookies:
return SettingTypeBlockAllCookies;
case ItemTypeAllowCookies:
return SettingTypeAllowCookies;
case ItemTypeCookiesDescription:
NOTREACHED();
return SettingTypeAllowCookies;
}
}
#pragma mark - UITableViewDelegate
- (void)tableView:(UITableView*)tableView
didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
// TODO(crbug.com/1064961): Implement this after adding new table view item.
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
[self updateSelectedCookiesItemWithIndexPath:indexPath];
ItemType itemType =
(ItemType)[self.tableViewModel itemTypeForIndexPath:indexPath];
CookiesSettingType settingType =
[self SettingTypeForCookiesItemType:itemType];
[self.handler selectedCookiesSettingType:settingType];
}
#pragma mark - PrivacyCookiesConsumer
- (void)cookiesSettingsOptionSelected:(CookiesSettingType)settingType {
self.selectedSetting = [self itemTypeForCookiesSettingType:settingType];
}
@end
......@@ -58,7 +58,6 @@
#import "ios/chrome/browser/ui/settings/language/language_settings_table_view_controller.h"
#import "ios/chrome/browser/ui/settings/password/passwords_table_view_controller.h"
#import "ios/chrome/browser/ui/settings/privacy/privacy_coordinator.h"
#import "ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.h"
#import "ios/chrome/browser/ui/settings/search_engine_table_view_controller.h"
#import "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h"
#import "ios/chrome/browser/ui/settings/sync/utils/sync_util.h"
......
......@@ -300,7 +300,7 @@ source_set("test_support") {
"//ios/chrome/browser/ui/settings/google_services:constants",
"//ios/chrome/browser/ui/settings/password:eg_test_support",
"//ios/chrome/browser/ui/settings/password:password_constants",
"//ios/chrome/browser/ui/settings/privacy",
"//ios/chrome/browser/ui/settings/privacy:privacy_ui",
"//ios/chrome/browser/ui/settings/sync",
"//ios/chrome/browser/ui/tab_grid:tab_grid_ui_constants",
"//ios/chrome/browser/ui/tab_grid/grid:grid_ui_constants",
......@@ -461,7 +461,7 @@ source_set("eg_app_support+eg2") {
"//ios/chrome/browser/ui/settings/language:eg_app_support+eg2",
"//ios/chrome/browser/ui/settings/password:eg_app_support+eg2",
"//ios/chrome/browser/ui/settings/password:password_constants",
"//ios/chrome/browser/ui/settings/privacy",
"//ios/chrome/browser/ui/settings/privacy:privacy_ui",
"//ios/chrome/browser/ui/settings/sync",
"//ios/chrome/browser/ui/signin_interaction:eg_app_support+eg2",
"//ios/chrome/browser/ui/tab_grid:tab_grid_ui_constants",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment