mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-05-09 09:27:42 +02:00
Feature/4772 add accessibility declaration
This commit is contained in:
committed by
Frank Rotermund
parent
b4ad32afb2
commit
273017eafa
@@ -0,0 +1,46 @@
|
||||
//
|
||||
/*
|
||||
* Copyright (c) 2023 BWI GmbH
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import SwiftUI
|
||||
|
||||
@objcMembers class AccessibilityDeclarationViewController: NSObject {
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
class func makeViewController() -> UIViewController {
|
||||
var accessibilityDeclarationFilePath: URL? = nil
|
||||
if !BWIBuildSettings.shared.accessibilityDeclarationFileDe.isEmpty && Bundle.main.preferredLocalizations[0].elementsEqual("de") {
|
||||
accessibilityDeclarationFilePath = Bundle.main.url(forResource: BWIBuildSettings.shared.accessibilityDeclarationFileDe, withExtension: "md")
|
||||
} else if !BWIBuildSettings.shared.accessibilityDeclarationFileEn.isEmpty {
|
||||
accessibilityDeclarationFilePath = Bundle.main.url(forResource: BWIBuildSettings.shared.accessibilityDeclarationFileEn, withExtension: "md")
|
||||
}
|
||||
|
||||
if let url = accessibilityDeclarationFilePath {
|
||||
guard let string = try? String(contentsOf: url) else {
|
||||
return UIHostingController(rootView: EmptyView())
|
||||
}
|
||||
let vc = UIHostingController(rootView: MarkDownView(markdownString: string))
|
||||
vc.title = BWIL10n.bwiAccessibilityDeclarationButtonTitle
|
||||
vc.view.backgroundColor = ThemeService.shared().theme.backgroundColor
|
||||
vc.navigationItem.largeTitleDisplayMode = .never
|
||||
return vc
|
||||
} else {
|
||||
return UIHostingController(rootView: EmptyView())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
//
|
||||
/*
|
||||
* Copyright (c) 2023 BWI GmbH
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import SwiftUI
|
||||
import Down
|
||||
|
||||
struct MarkDownView: View {
|
||||
var markdownString: String
|
||||
@State var labelHeight: CGFloat = .zero
|
||||
|
||||
var body: some View {
|
||||
GeometryReader { geometry in
|
||||
ScrollView(.vertical) {
|
||||
UIMarkDownWrapper(markDownString: markdownString, height: $labelHeight)
|
||||
.frame(width: geometry.size.width - 20)
|
||||
.frame(minHeight: labelHeight)
|
||||
.padding(10)
|
||||
}
|
||||
.background(Color(ThemeService.shared().theme.backgroundColor))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct UIMarkDownWrapper: UIViewRepresentable {
|
||||
var markDownString: String
|
||||
@Binding var height: CGFloat
|
||||
|
||||
func makeUIView(context: Context) -> UILabel {
|
||||
let label = UILabel(frame: .zero)
|
||||
label.numberOfLines = 0
|
||||
label.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
|
||||
return label
|
||||
}
|
||||
|
||||
func updateUIView(_ uiView: UILabel, context: Context) {
|
||||
let down = Down(markdownString: markDownString)
|
||||
|
||||
guard let attributedString = try? down.toAttributedString() else { return }
|
||||
let mutableString = NSMutableAttributedString(attributedString: attributedString)
|
||||
mutableString.addAttributes([.foregroundColor: ThemeService.shared().theme.textPrimaryColor], range: NSRange(location: 0, length: attributedString.length))
|
||||
|
||||
uiView.attributedText = mutableString
|
||||
DispatchQueue.main.async {
|
||||
height = uiView.sizeThatFits(CGSize(width: uiView.bounds.width, height: CGFloat.greatestFiniteMagnitude)).height
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user