blob: 0c9148958574354f1e120cc6ed61bf063a80ef06 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import SwiftUI
import ios_chrome_common_ui_colors_swift
private let kPromptInnerPaddingHorizontal: CGFloat = 12
private let kPromptInnerPaddingVertical: CGFloat = 8
private let kPromptOuterPaddingHorizontal: CGFloat = 6
private let kPromptOuterPaddingVertical: CGFloat = 8
private let kPromptCornerRadius: CGFloat = 20
private let kTextVerticalSpacing: CGFloat = 12
private let kTextMinimumScaleFactor: CGFloat = 0.5
private let kSeparatorHeight: CGFloat = 1
// The view object for "Bring Android Tabs" bottom message prompt.
struct BringAndroidTabsPromptBottomMessageView: View {
// Number of tabs brought from Android.
let tabsCount: Int
// Provider object for the view.
weak var provider: BringAndroidTabsPromptBottomMessageProvider?
var body: some View {
HStack(alignment: .top) {
Image(systemName: kTabsSymbol)
.imageScale(.large)
.padding(.top, kTextVerticalSpacing)
VStack(alignment: .leading, spacing: kTextVerticalSpacing) {
HStack(alignment: .top) {
VStack(
alignment: .leading,
spacing: kTextVerticalSpacing - kPromptInnerPaddingVertical
) {
Text(
L10nUtils.pluralString(
messageId: IDS_IOS_BRING_ANDROID_TABS_PROMPT_TITLE,
number: self.tabsCount)
)
.font(.body)
.minimumScaleFactor(kTextMinimumScaleFactor)
Text(
L10nUtils.pluralString(
messageId: IDS_IOS_BRING_ANDROID_TABS_PROMPT_SUBTITLE,
number: self.tabsCount)
)
.font(.footnote)
.foregroundColor(.textSecondary)
.minimumScaleFactor(kTextMinimumScaleFactor)
}
.padding(.top, kTextVerticalSpacing - kPromptInnerPaddingVertical)
Spacer()
Button(action: self.close) {
Image(systemName: kXMarkCircleFillSymbol)
.foregroundColor(.textQuaternary)
}
.accessibilityIdentifier(
kBringAndroidTabsPromptBottomMessageCloseButtonAXId)
}
.padding(0)
Divider().overlay(Color.separator).frame(height: kSeparatorHeight)
Button(action: self.review) {
HStack {
Text(
L10nUtils.pluralString(
messageId:
IDS_IOS_BRING_ANDROID_TABS_PROMPT_REVIEW_TABS_BUTTON_BOTTOM_MESSAGE,
number: self.tabsCount)
)
.minimumScaleFactor(kTextMinimumScaleFactor)
Spacer()
Image(systemName: kChevronForwardSymbol)
.foregroundColor(.textSecondary)
}
}
.foregroundColor(.chromeBlue)
.accessibilityIdentifier(
kBringAndroidTabsPromptBottomMessageReviewButtonAXId)
}
.padding(.bottom, kTextVerticalSpacing)
}
.padding(.horizontal, kPromptInnerPaddingHorizontal)
.padding(.vertical, kPromptInnerPaddingVertical)
.background(Color.primaryBackground)
.clipShape(RoundedRectangle(cornerRadius: kPromptCornerRadius))
.environment(\.colorScheme, .dark)
.onAppear { self.onAppear() }
.padding(.horizontal, kPromptOuterPaddingHorizontal)
.padding(.vertical, kPromptOuterPaddingVertical)
}
// MARK: - Action handlers.
// Invoked when the view is displayed.
func onAppear() {
self.provider?.delegate?.bringAndroidTabsPromptViewControllerDidShow()
}
// Review button action handler.
func review() {
self.provider?.delegate?
.bringAndroidTabsPromptViewControllerDidTapReviewButton()
self.provider?.commandHandler?.reviewAllBringAndroidTabs()
}
// Close button action handler.
func close() {
self.provider?.delegate?.bringAndroidTabsPromptViewControllerDidDismiss(
swiped: false)
self.provider?.commandHandler?.dismissBringAndroidTabsPrompt()
}
}