CDocumentPasswordViewController.swift 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. //
  2. // CDocumentPasswordViewController.swift
  3. // ComPDFKit_Tools
  4. //
  5. // Copyright © 2014-2024 PDF Technologies, Inc. All Rights Reserved.
  6. //
  7. // THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  8. // AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  9. // UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  10. // This notice may not be removed from this file.
  11. //
  12. import UIKit
  13. import ComPDFKit
  14. public protocol CDocumentPasswordViewControllerDelegate: AnyObject {
  15. func documentPasswordViewControllerCancel(_ documentPasswordViewController: CDocumentPasswordViewController)
  16. func documentPasswordViewControllerOpen(_ documentPasswordViewController: CDocumentPasswordViewController, document: CPDFDocument)
  17. }
  18. public class CDocumentPasswordViewController: UIViewController, UITextFieldDelegate {
  19. public weak var delegate: CDocumentPasswordViewControllerDelegate?
  20. var backBtn:UIButton?
  21. var passwordImageView:UIImageView?
  22. var titleLablel:UILabel?
  23. var enterView:UIView?
  24. var passLabel:UILabel?
  25. var splitVidew:UIView?
  26. var enterTextField:UITextField?
  27. var warningLabel:UILabel?
  28. var OKBtn:UIButton?
  29. var document:CPDFDocument?
  30. var clearButton:UIButton?
  31. public init(document: CPDFDocument) {
  32. super.init(nibName: nil, bundle: nil)
  33. self.document = document
  34. }
  35. required init?(coder: NSCoder) {
  36. fatalError("init(coder:) has not been implemented")
  37. }
  38. public override func viewDidLoad() {
  39. super.viewDidLoad()
  40. self.backBtn = UIButton(type: .custom)
  41. self.backBtn?.setImage(UIImage(named: "CDocumentPasswordImageBack", in: Bundle(for: self.classForCoder), compatibleWith: nil), for: .normal)
  42. self.backBtn?.addTarget(self, action: #selector(buttonItemClicked_back(_:)), for: .touchUpInside)
  43. if backBtn != nil {
  44. self.view.addSubview(self.backBtn!)
  45. }
  46. self.passwordImageView = UIImageView(image: UIImage(named: "CDocumentPasswordImagePassword", in: Bundle(for: self.classForCoder), compatibleWith: nil))
  47. if passwordImageView != nil {
  48. self.view.addSubview(self.passwordImageView!)
  49. }
  50. self.titleLablel = UILabel()
  51. self.titleLablel?.text = NSLocalizedString("Please Enter The Password", comment: "")
  52. self.titleLablel?.adjustsFontSizeToFitWidth = true
  53. if passwordImageView != nil {
  54. self.view.addSubview(self.passwordImageView!)
  55. }
  56. self.enterView = UIView()
  57. if enterView != nil {
  58. self.view.addSubview(self.enterView!)
  59. }
  60. initEnterView()
  61. self.warningLabel = UILabel()
  62. self.warningLabel?.text = NSLocalizedString("Wrong Password", comment: "")
  63. self.warningLabel?.textColor = UIColor.red
  64. if warningLabel != nil {
  65. self.view.addSubview(self.warningLabel!)
  66. }
  67. self.warningLabel?.isHidden = true
  68. self.OKBtn = UIButton(type: .custom)
  69. self.OKBtn?.setTitle(NSLocalizedString("Done", comment: ""), for: .normal)
  70. self.OKBtn?.addTarget(self, action: #selector(buttonItemClicked_ok(_:)), for: .touchUpInside)
  71. self.OKBtn?.setTitleColor(UIColor(red: 255.0/255.0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 1.0), for: .normal)
  72. self.OKBtn?.backgroundColor = UIColor(red: 221.0/255.0, green: 233.0/255.0, blue: 255.0/255.0, alpha: 1.0)
  73. if OKBtn != nil {
  74. self.view.addSubview(self.OKBtn!)
  75. }
  76. self.view.backgroundColor = CPDFColorUtils.CPDFViewControllerBackgroundColor()
  77. }
  78. public override func viewWillLayoutSubviews() {
  79. if #available(iOS 11.0, *) {
  80. self.backBtn?.frame = CGRect(x: self.view.frame.size.width - self.view.safeAreaInsets.right - 70, y: self.view.safeAreaInsets.top, width: 50, height: 50)
  81. self.passwordImageView?.frame = CGRect(x: (self.view.frame.size.width - 100)/2, y: self.backBtn?.frame.maxY ?? 0, width: 100, height: 100)
  82. self.titleLablel?.frame = CGRect(x: (self.view.frame.size.width - 200)/2, y: self.passwordImageView?.frame.maxY ?? 0, width: 200, height: 50)
  83. self.enterView?.frame = CGRect(x: (self.view.frame.size.width - 300)/2, y: self.titleLablel?.frame.maxY ?? 0, width: 300, height: 60)
  84. self.warningLabel?.frame = CGRect(x: (self.view.frame.size.width - 300)/2, y: self.enterView?.frame.maxY ?? 0, width: 300, height: 40)
  85. self.OKBtn?.frame = CGRect(x: (self.view.frame.size.width - 300)/2, y: self.warningLabel?.frame.maxY ?? 0, width: 300, height: 60)
  86. } else {
  87. self.backBtn?.frame = CGRect(x: self.view.frame.size.width - 60, y: 65, width: 50, height: 50)
  88. self.passwordImageView?.frame = CGRect(x: (self.view.frame.size.width - 100)/2, y: self.backBtn?.frame.maxY ?? 0, width: 100, height: 100)
  89. self.titleLablel?.frame = CGRect(x: (self.view.frame.size.width - 100)/2, y: self.passwordImageView?.frame.maxY ?? 0, width: 200, height: 50)
  90. self.enterView?.frame = CGRect(x: (self.view.frame.size.width - 300)/2, y: self.titleLablel?.frame.maxY ?? 0, width: 300, height: 60)
  91. self.warningLabel?.frame = CGRect(x: (self.view.frame.size.width - 300)/2, y: self.enterView?.frame.maxY ?? 0, width: 300, height: 40)
  92. self.OKBtn?.frame = CGRect(x: (self.view.frame.size.width - 300)/2, y: self.warningLabel?.frame.maxY ?? 0, width: 300, height: 60)
  93. }
  94. self.passLabel?.frame = CGRect(x: 0, y: 0, width: 80, height: (self.enterView?.frame.size.height ?? 0)-1)
  95. self.enterTextField?.frame = CGRect(x: 80, y: 0, width: (self.enterView?.frame.size.width ?? 0) - 80, height: (self.enterView?.frame.size.height ?? 0) - 1)
  96. self.splitVidew?.frame = CGRect(x: 0, y: (self.enterView?.frame.size.height ?? 0)-1, width: self.enterView?.frame.size.width ?? 0, height: 1)
  97. self.clearButton?.frame = CGRect(x: (self.enterView?.frame.size.width ?? 0) - 30, y: ((self.enterView?.frame.size.height ?? 0) - 24)/2, width: 24, height: 24)
  98. }
  99. func initEnterView() {
  100. self.passLabel = UILabel()
  101. self.passLabel?.text = NSLocalizedString("Password", comment: "")
  102. self.enterView?.addSubview(self.passLabel!)
  103. self.enterTextField = UITextField()
  104. self.enterTextField?.borderStyle = .none
  105. self.enterTextField?.isSecureTextEntry = true
  106. self.enterTextField?.delegate = self
  107. self.enterTextField?.font = UIFont.systemFont(ofSize: 13)
  108. self.enterTextField?.returnKeyType = .done
  109. self.enterTextField?.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 8, height: 0))
  110. self.enterTextField?.leftViewMode = .always
  111. self.enterTextField?.rightView = UIView(frame: CGRect(x: 0, y: 0, width: 8, height: 0))
  112. self.enterTextField?.rightViewMode = .always
  113. self.enterTextField?.placeholder = NSLocalizedString("Please Enter the Password", comment: "")
  114. self.enterTextField?.becomeFirstResponder()
  115. self.enterTextField?.addTarget(self, action: #selector(textField_change(_:)), for: .editingChanged)
  116. self.enterView?.addSubview(self.enterTextField!)
  117. self.clearButton = UIButton(type: .custom)
  118. self.clearButton?.layer.cornerRadius = 12
  119. self.clearButton?.layer.masksToBounds = true
  120. self.clearButton?.setImage(UIImage(named: "CDocumentPasswordImageClear", in: Bundle(for: self.classForCoder), compatibleWith: nil), for: .normal)
  121. self.clearButton?.addTarget(self, action: #selector(buttonItemClicked_clear(_:)), for: .touchUpInside)
  122. self.enterView?.addSubview(self.clearButton!)
  123. self.clearButton!.isHidden = true
  124. self.splitVidew = UIView()
  125. self.splitVidew?.backgroundColor = CPDFColorUtils.CTableviewCellSplitColor()
  126. self.enterView?.addSubview(self.splitVidew!)
  127. }
  128. // MARK: - Action
  129. @objc func buttonItemClicked_ok(_ sender: UIButton) {
  130. if ((self.document?.unlock(withPassword: self.enterTextField?.text)) == true) {
  131. self.dismiss(animated: true, completion: {
  132. self.delegate?.documentPasswordViewControllerOpen(self, document: self.document!)
  133. })
  134. } else {
  135. warningLabel?.isHidden = false
  136. }
  137. }
  138. @objc func buttonItemClicked_back(_ sender: UIButton) {
  139. self.dismiss(animated: true, completion: {
  140. self.delegate?.documentPasswordViewControllerCancel(self)
  141. })
  142. }
  143. @objc func buttonItemClicked_clear(_ sender: UIButton) {
  144. self.OKBtn?.backgroundColor = UIColor.init(red: 221.0/255.0, green: 233.0/255.0, blue: 255.0/255.0, alpha: 1.0)
  145. self.warningLabel?.isHidden = true
  146. self.enterTextField?.text = ""
  147. self.clearButton?.isHidden = true
  148. }
  149. @objc func textField_change(_ sender: UITextField) {
  150. if sender.text?.count == 0 {
  151. self.OKBtn?.backgroundColor = UIColor(red: 221.0/255.0, green: 233.0/255.0, blue: 255.0/255.0, alpha: 1.0)
  152. self.warningLabel?.isHidden = true
  153. self.clearButton?.isHidden = true
  154. } else {
  155. self.OKBtn?.backgroundColor = UIColor.blue
  156. self.clearButton?.isHidden = false
  157. }
  158. }
  159. // MARK: - UITextFieldDelegate
  160. public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
  161. textField.resignFirstResponder()
  162. return true
  163. }
  164. public func textFieldShouldClear(_ textField: UITextField) -> Bool {
  165. self.OKBtn?.backgroundColor = UIColor(red: 221.0/255.0, green: 233.0/255.0, blue: 255.0/255.0, alpha: 1.0)
  166. self.warningLabel?.isHidden = true
  167. return true
  168. }
  169. }