74 lines
2.9 KiB
Swift
74 lines
2.9 KiB
Swift
//
|
|
// LocationReportDialogPresenter.swift
|
|
// suixinkan
|
|
//
|
|
|
|
import UIKit
|
|
|
|
/// 位置上报相关弹窗,对齐 Android 文案。
|
|
enum LocationReportDialogPresenter {
|
|
|
|
/// 展示切换在线状态确认弹窗。
|
|
@MainActor
|
|
static func presentOnlineStatusSwitch(
|
|
from viewController: UIViewController,
|
|
isOnline: Bool,
|
|
onConfirm: @escaping () -> Void,
|
|
onCancel: (() -> Void)? = nil
|
|
) {
|
|
let message = isOnline
|
|
? "是否确认切换为离线状态?\n离线后将暂停位置上报,直到下次手动切换为在线状态"
|
|
: "是否确认切换为在线状态?\n在线后将开始位置上报和计时"
|
|
let alert = UIAlertController(title: "切换在线状态", message: message, preferredStyle: .alert)
|
|
alert.addAction(UIAlertAction(title: "取消", style: .cancel) { _ in onCancel?() })
|
|
alert.addAction(UIAlertAction(title: "确定", style: .default) { _ in onConfirm() })
|
|
viewController.present(alert, animated: true)
|
|
}
|
|
|
|
/// 展示上报成功弹窗。
|
|
@MainActor
|
|
static func presentReportSuccess(
|
|
from viewController: UIViewController,
|
|
reportTime: String,
|
|
countdown: String,
|
|
onDismiss: (() -> Void)? = nil
|
|
) {
|
|
let message = "上报已成功,上报时间为\(reportTime)\n距离下次上报时间\(countdown)"
|
|
let alert = UIAlertController(title: "上报成功", message: message, preferredStyle: .alert)
|
|
alert.addAction(UIAlertAction(title: "确定", style: .default) { _ in onDismiss?() })
|
|
viewController.present(alert, animated: true)
|
|
}
|
|
|
|
/// 展示位置超时提醒弹窗。
|
|
@MainActor
|
|
static func presentLocationTimeout(
|
|
from viewController: UIViewController,
|
|
onReport: @escaping () -> Void,
|
|
onLater: (() -> Void)? = nil
|
|
) {
|
|
let alert = UIAlertController(
|
|
title: "位置上报提醒",
|
|
message: "倒计时即将结束,请立即上报位置",
|
|
preferredStyle: .alert
|
|
)
|
|
alert.addAction(UIAlertAction(title: "稍后", style: .cancel) { _ in onLater?() })
|
|
alert.addAction(UIAlertAction(title: "立即上报", style: .default) { _ in onReport() })
|
|
viewController.present(alert, animated: true)
|
|
}
|
|
|
|
/// 展示提醒设置选择器。
|
|
@MainActor
|
|
static func presentReminderPicker(
|
|
from viewController: UIViewController,
|
|
onSelect: @escaping (Int) -> Void
|
|
) {
|
|
let alert = UIAlertController(title: "提醒设置", message: "提前提醒时间", preferredStyle: .actionSheet)
|
|
[0, 5, 10, 15, 30].forEach { minutes in
|
|
let title = minutes == 0 ? "不提醒" : "提前\(minutes)分钟"
|
|
alert.addAction(UIAlertAction(title: title, style: .default) { _ in onSelect(minutes) })
|
|
}
|
|
alert.addAction(UIAlertAction(title: "取消", style: .cancel))
|
|
viewController.present(alert, animated: true)
|
|
}
|
|
}
|