Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions Bitkit/Components/ScreenshotPreventMask.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import SwiftUI
import UIKit

struct ScreenShotPreventMask: UIViewRepresentable {
func makeUIView(context: Context) -> UIView {
let view = UITextField()
view.isSecureTextEntry = true
view.text = ""
view.isUserInteractionEnabled = false

if let autoHideLayer = findAutoHideLayer(in: view) {
autoHideLayer.backgroundColor = UIColor.white.cgColor
} else {
view.layer.sublayers?.last?.backgroundColor = UIColor.white.cgColor
}

return view
}

func updateUIView(_ uiView: UIView, context: Context) {}

private func findAutoHideLayer(in view: UIView) -> CALayer? {
if let layers = view.layer.sublayers {
if let layer = layers.first(where: { layer in
layer.delegate.debugDescription.contains("UITextLayoutCanvasView")
}) {
return layer
}
}

return nil
}
}

extension View {
@ViewBuilder
func screenshotPreventMask(_ isEnabled: Bool) -> some View {
if isEnabled {
mask(
ScreenShotPreventMask()
.ignoresSafeArea()
)
.background(EmptyView())
} else {
self
}
}
}
2 changes: 1 addition & 1 deletion Bitkit/Views/Backup/BackupMnemonic.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ struct BackupMnemonicView: View {
.padding(32)
.background(Color.gray6)
.blur(radius: showMnemonic ? 0 : 5)
.privacySensitive()
.screenshotPreventMask(true)
.accessibilityElement(children: .ignore)
.accessibilityIdentifier("SeedContainer")
.accessibilityLabel(mnemonicAccessibilityLabel)
Expand Down
9 changes: 7 additions & 2 deletions Bitkit/Views/Onboarding/RestoreWalletView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,13 @@ struct RestoreWalletView: View {
ScrollView(showsIndicators: false) {
VStack(spacing: 0) {
headerSection
wordInputSection
passphraseSection

Group {
wordInputSection
passphraseSection
}
.screenshotPreventMask(true)

validationSection
Spacer(minLength: 16)
buttonSection
Expand Down
2 changes: 1 addition & 1 deletion Bitkit/Views/Recovery/RecoveryMnemonicScreen.swift
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ struct RecoveryMnemonicScreen: View {
.padding(32)
.background(Color.white10)
.cornerRadius(16)
.privacySensitive()
.screenshotPreventMask(true)

// Passphrase section (if available)
if !passphrase.isEmpty {
Expand Down
Loading