Add copying

This commit is contained in:
Shadowfacts 2021-08-25 11:26:21 -04:00
parent b006293896
commit 643452459b
1 changed files with 49 additions and 28 deletions

View File

@ -11,8 +11,9 @@ import OTPKit
struct KeyView: View { struct KeyView: View {
let key: TOTPKey let key: TOTPKey
let currentCode: TOTPCode let currentCode: TOTPCode
@State private var copying = false
var formattedCode: String { private var formattedCode: String {
let code = currentCode.code let code = currentCode.code
let mid = code.index(code.startIndex, offsetBy: code.count / 2) let mid = code.index(code.startIndex, offsetBy: code.count / 2)
return "\(code[code.startIndex..<mid]) \(code[mid...])" return "\(code[code.startIndex..<mid]) \(code[mid...])"
@ -24,6 +25,7 @@ struct KeyView: View {
} }
var body: some View { var body: some View {
Button(action: self.copy) {
HStack { HStack {
VStack(alignment: .leading) { VStack(alignment: .leading) {
Text(key.issuer) Text(key.issuer)
@ -37,11 +39,19 @@ struct KeyView: View {
Spacer() Spacer()
if copying {
Text("Copied!")
.font(.title2)
.transition(.move(edge: .trailing).combined(with: .opacity))
} else {
Text(formattedCode) Text(formattedCode)
.font(.system(.title2, design: .monospaced)) .font(.system(.title2, design: .monospaced))
.transition(.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading)).combined(with: .opacity))
}
// Text("\(currentCode.validUntil, style: .relative)") // Text("\(currentCode.validUntil, style: .relative)")
// .font(.body.monospacedDigit()) // .font(.body.monospacedDigit())
// I don't think this TimelineView should be necessary since the CodeHolder timer fires every .5 seconds // I don't think this TimelineView should be necessary since the CodeHolder timer fires every .5 seconds
TimelineView(.animation) { (ctx) in TimelineView(.animation) { (ctx) in
@ -53,15 +63,26 @@ struct KeyView: View {
} }
.frame(width: 30) .frame(width: 30)
} }
} }
} }
.tint(.black)
}
private func progress(at date: Date) -> Double { private func progress(at date: Date) -> Double {
let seconds = round(date.timeIntervalSince(currentCode.validFrom)) let seconds = round(date.timeIntervalSince(currentCode.validFrom))
let progress = 1 - seconds / Double(key.period) let progress = 1 - seconds / Double(key.period)
return progress return progress
} }
private func copy() {
UIPasteboard.general.string = currentCode.code
withAnimation(.easeInOut(duration: 0.5)) {
copying = true
}
withAnimation(.easeInOut(duration: 0.5).delay(0.65)) {
copying = false
}
}
} }
struct KeyView_Previews: PreviewProvider { struct KeyView_Previews: PreviewProvider {