Extract shared LocationReportService, wire location_report menu routing, and add unit tests for reporting cooldown and history pagination. Co-authored-by: Cursor <cursoragent@cursor.com>
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)
|
||
}
|
||
}
|