You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

104 lines
3.7 KiB

// Copyright 2020 Google LLC. All rights reserved.
//
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
// file except in compliance with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under
// the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
// ANY KIND, either express or implied. See the License for the specific language governing
// permissions and limitations under the License.
import GooglePlaces
import UIKit
/// The class which displays the list of demos.
class SampleListViewController: UITableViewController {
static let sampleCellIdentifier = "sampleCellIdentifier"
let sampleSections = Samples.allSamples()
let configuration: AutocompleteConfiguration = {
let fields: [GMSPlaceField] = [
.name, .placeID, .plusCode, .coordinate, .openingHours, .phoneNumber, .formattedAddress,
.rating, .userRatingsTotal, .priceLevel, .types, .website, .viewport, .addressComponents,
.photos, .utcOffsetMinutes, .businessStatus, .iconImageURL, .iconBackgroundColor,
]
return AutocompleteConfiguration(
autocompleteFilter: GMSAutocompleteFilter(),
placeFields: GMSPlaceField(rawValue: fields.reduce(0) { $0 | $1.rawValue }))
}()
private lazy var editButton: UIBarButtonItem = {
UIBarButtonItem(
title: "Edit", style: .plain, target: self, action: #selector(showConfiguration))
}()
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(
UITableViewCell.self, forCellReuseIdentifier: SampleListViewController.sampleCellIdentifier)
tableView.dataSource = self
tableView.delegate = self
navigationItem.rightBarButtonItem = editButton
}
func sample(at indexPath: IndexPath) -> Sample? {
guard indexPath.section >= 0 && indexPath.section < sampleSections.count else { return nil }
let section = sampleSections[indexPath.section]
guard indexPath.row >= 0 && indexPath.row < section.samples.count else { return nil }
return section.samples[indexPath.row]
}
@objc private func showConfiguration(_sender: UIButton) {
navigationController?.present(
ConfigurationViewController(configuration: configuration), animated: true)
}
// MARK: - Override UITableView
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard section <= sampleSections.count else {
return 0
}
return sampleSections[section].samples.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
-> UITableViewCell
{
let cell = tableView.dequeueReusableCell(
withIdentifier: SampleListViewController.sampleCellIdentifier, for: indexPath)
if let sample = sample(at: indexPath) {
cell.textLabel?.text = sample.title
}
return cell
}
override func numberOfSections(in tableView: UITableView) -> Int {
return sampleSections.count
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
{
guard section <= sampleSections.count else {
return nil
}
return sampleSections[section].name
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
if let sample = sample(at: indexPath) {
let viewController = sample.viewControllerClass.init()
if let controller = viewController as? AutocompleteBaseViewController {
controller.autocompleteConfiguration = configuration
}
navigationController?.pushViewController(viewController, animated: true)
}
}
}