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

Unified Diff: ios/chrome/browser/ui/settings/physical_web_collection_view_controller.mm

Issue 2587023002: Upstream Chrome on iOS source code [8/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/physical_web_collection_view_controller.mm
diff --git a/ios/chrome/browser/ui/settings/physical_web_collection_view_controller.mm b/ios/chrome/browser/ui/settings/physical_web_collection_view_controller.mm
new file mode 100644
index 0000000000000000000000000000000000000000..bae23328a754b2a0e87f21c0c5d99921201d5f89
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/physical_web_collection_view_controller.mm
@@ -0,0 +1,249 @@
+// Copyright 2015 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/physical_web_collection_view_controller.h"
+
+#import <CoreLocation/CoreLocation.h>
+
+#include "base/ios/weak_nsobject.h"
+#import "base/mac/foundation_util.h"
+#import "base/mac/scoped_nsobject.h"
+#include "base/metrics/user_metrics.h"
+#include "components/google/core/browser/google_util.h"
+#include "components/physical_web/data_source/physical_web_data_source.h"
+#include "components/prefs/pref_member.h"
+#include "ios/chrome/browser/application_context.h"
+#include "ios/chrome/browser/chrome_url_constants.h"
+#include "ios/chrome/browser/physical_web/physical_web_constants.h"
+#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h"
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item.h"
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h"
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_switch_item.h"
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_text_item.h"
+#import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
+#import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
+#import "ios/chrome/browser/ui/settings/settings_utils.h"
+#include "ios/chrome/common/string_util.h"
+#include "ios/chrome/grit/ios_chromium_strings.h"
+#include "ios/chrome/grit/ios_strings.h"
+#import "ios/third_party/material_components_ios/src/components/Palettes/src/MaterialPalettes.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "url/gurl.h"
+
+namespace {
+
+typedef NS_ENUM(NSInteger, SectionIdentifier) {
+ SectionIdentifierPhysicalWeb = kSectionIdentifierEnumZero,
+ SectionIdentifierLearnMore,
+};
+
+typedef NS_ENUM(NSInteger, ItemType) {
+ ItemTypePhysicalWebSwitch = kItemTypeEnumZero,
+ ItemTypeLearnMore,
+};
+
+} // namespace
+
+@interface PhysicalWebCollectionViewController () {
+ // Pref for the Physical Web enabled state.
+ IntegerPrefMember _physicalWebEnabled;
+}
+
+// Called when the preference switch is toggled on or off.
+- (void)physicalWebSwitched:(UISwitch*)switchView;
+
+// Updates the Physical Web preference.
+- (void)updatePhysicalWebEnabled:(BOOL)enabled;
+@end
+
+@implementation PhysicalWebCollectionViewController
+
+#pragma mark - Initialization
+
+- (instancetype)initWithPrefs:(PrefService*)prefs {
+ self = [super initWithStyle:CollectionViewControllerStyleAppBar];
+ if (self) {
+ self.title = l10n_util::GetNSString(IDS_IOS_OPTIONS_ENABLE_PHYSICAL_WEB);
+ _physicalWebEnabled.Init(prefs::kIosPhysicalWebEnabled, prefs);
+ [self loadModel];
+ }
+ return self;
+}
+
+- (instancetype)init {
+ NOTREACHED();
+ return nil;
+}
+
+- (instancetype)initWithStyle:(CollectionViewControllerStyle)style {
+ NOTREACHED();
+ return nil;
+}
+
+#pragma mark - Preference switch
+
++ (BOOL)shouldEnableForPreferenceState:(int)preferenceState {
+ // In the default (onboarding) state, render the preference as On if the
+ // location app permission is granted.
+ if (preferenceState == physical_web::kPhysicalWebOnboarding) {
+ CLAuthorizationStatus authStatus = [CLLocationManager authorizationStatus];
+ return (authStatus == kCLAuthorizationStatusAuthorizedWhenInUse ||
+ authStatus == kCLAuthorizationStatusAuthorizedAlways);
+ }
+
+ return (preferenceState == physical_web::kPhysicalWebOn);
+}
+
+- (void)physicalWebSwitched:(UISwitch*)switchView {
+ [self updatePhysicalWebEnabled:switchView.isOn];
+}
+
+- (void)updatePhysicalWebEnabled:(BOOL)enabled {
+ _physicalWebEnabled.SetValue(enabled ? physical_web::kPhysicalWebOn
+ : physical_web::kPhysicalWebOff);
+
+ physical_web::PhysicalWebDataSource* dataSource =
+ GetApplicationContext()->GetPhysicalWebDataSource();
+
+ if (enabled) {
+ base::RecordAction(
+ base::UserMetricsAction("PhysicalWeb.Prefs.FeatureEnabled"));
+ if (dataSource) {
+ dataSource->StartDiscovery(true);
+ }
+ } else {
+ base::RecordAction(
+ base::UserMetricsAction("PhysicalWeb.Prefs.FeatureDisabled"));
+ if (dataSource) {
+ dataSource->StopDiscovery();
+ }
+ }
+}
+
+#pragma mark - UICollectionViewDataSource
+
+- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView
+ cellForItemAtIndexPath:(NSIndexPath*)indexPath {
+ UICollectionViewCell* cell =
+ [super collectionView:collectionView cellForItemAtIndexPath:indexPath];
+
+ NSInteger type = [self.collectionViewModel itemTypeForIndexPath:indexPath];
+ switch (type) {
+ case ItemTypePhysicalWebSwitch: {
+ CollectionViewSwitchCell* switchCell =
+ base::mac::ObjCCastStrict<CollectionViewSwitchCell>(cell);
+ [switchCell.switchView addTarget:self
+ action:@selector(physicalWebSwitched:)
+ forControlEvents:UIControlEventValueChanged];
+ break;
+ }
+ }
+
+ return cell;
+}
+
+#pragma mark - UICollectionViewDelegate
+
+- (BOOL)collectionView:(UICollectionView*)collectionView
+ shouldHighlightItemAtIndexPath:(NSIndexPath*)indexPath {
+ NSInteger type = [self.collectionViewModel itemTypeForIndexPath:indexPath];
+ switch (type) {
+ case ItemTypePhysicalWebSwitch:
+ case ItemTypeLearnMore:
+ return NO;
+ default:
+ return [super collectionView:collectionView
+ shouldHighlightItemAtIndexPath:indexPath];
+ }
+}
+
+#pragma mark - SettingsRootCollectionViewController
+
+- (void)loadModel {
+ [super loadModel];
+ CollectionViewModel* model = self.collectionViewModel;
+
+ [model addSectionWithIdentifier:SectionIdentifierPhysicalWeb];
+
+ NSString* switchLabelText =
+ l10n_util::GetNSString(IDS_IOS_OPTIONS_ENABLE_PHYSICAL_WEB);
+
+ CollectionViewSwitchItem* switchItem = [[[CollectionViewSwitchItem alloc]
+ initWithType:ItemTypePhysicalWebSwitch] autorelease];
+ switchItem.text = switchLabelText;
+ switchItem.on = [PhysicalWebCollectionViewController
+ shouldEnableForPreferenceState:_physicalWebEnabled.GetValue()];
+ [model addItem:switchItem
+ toSectionWithIdentifier:SectionIdentifierPhysicalWeb];
+
+ [model addSectionWithIdentifier:SectionIdentifierLearnMore];
+
+ NSString* learnMoreText =
+ l10n_util::GetNSString(IDS_IOS_OPTIONS_ENABLE_PHYSICAL_WEB_DETAILS);
+
+ CollectionViewFooterItem* learnMore = [[[CollectionViewFooterItem alloc]
+ initWithType:ItemTypeLearnMore] autorelease];
+ learnMore.text = learnMoreText;
+ learnMore.linkURL = GURL(kPhysicalWebLearnMoreURL);
+ learnMore.linkDelegate = self;
+ learnMore.accessibilityTraits = UIAccessibilityTraitButton;
+ [model addItem:learnMore toSectionWithIdentifier:SectionIdentifierLearnMore];
+}
+
+#pragma mark - MDCCollectionViewStylingDelegate
+
+- (MDCCollectionViewCellStyle)collectionView:(UICollectionView*)collectionView
+ cellStyleForSection:(NSInteger)section {
+ NSInteger sectionIdentifier =
+ [self.collectionViewModel sectionIdentifierForSection:section];
+ switch (sectionIdentifier) {
+ case SectionIdentifierLearnMore:
+ // Display the Learn More footer in the default style with no "card" UI
+ // and no section padding.
+ return MDCCollectionViewCellStyleDefault;
+ default:
+ return self.styler.cellStyle;
+ }
+}
+
+- (CGFloat)collectionView:(UICollectionView*)collectionView
+ cellHeightAtIndexPath:(NSIndexPath*)indexPath {
+ CollectionViewItem* item =
+ [self.collectionViewModel itemAtIndexPath:indexPath];
+ switch (item.type) {
+ case ItemTypeLearnMore:
+ return [MDCCollectionViewCell
+ cr_preferredHeightForWidth:CGRectGetWidth(collectionView.bounds)
+ forItem:item];
+ default:
+ return MDCCellDefaultOneLineHeight;
+ }
+}
+
+- (BOOL)collectionView:(UICollectionView*)collectionView
+ shouldHideItemBackgroundAtIndexPath:(NSIndexPath*)indexPath {
+ NSInteger sectionIdentifier =
+ [self.collectionViewModel sectionIdentifierForSection:indexPath.section];
+ switch (sectionIdentifier) {
+ case SectionIdentifierLearnMore:
+ // Display the Learn More footer without any background image or
+ // shadowing.
+ return YES;
+ default:
+ return NO;
+ }
+}
+- (BOOL)collectionView:(UICollectionView*)collectionView
+ hidesInkViewAtIndexPath:(NSIndexPath*)indexPath {
+ NSInteger type = [self.collectionViewModel itemTypeForIndexPath:indexPath];
+ switch (type) {
+ case ItemTypePhysicalWebSwitch:
+ return YES;
+ default:
+ return NO;
+ }
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698