Settings about section (#1041)

* Fixes #1011 - Add legal information screen in settings, move all settings related screens under Source/Screen/Settings
* Fix warnings after sliding sync api change
This commit is contained in:
Stefan Ceriu
2023-06-07 17:04:42 +03:00
committed by GitHub
parent c0611b4e6b
commit 8ff5c6144c
27 changed files with 408 additions and 123 deletions
@@ -0,0 +1,26 @@
//
// Copyright 2022 New Vector Ltd
//
// 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 Combine
import SwiftUI
final class LegalInformationScreenCoordinator: CoordinatorProtocol {
private let viewModel = LegalInformationScreenViewModel()
func toPresentable() -> AnyView {
AnyView(LegalInformationScreen(context: viewModel.context))
}
}
@@ -0,0 +1,23 @@
//
// Copyright 2022 New Vector Ltd
//
// 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 Foundation
enum LegalInformationScreenViewModelAction { }
struct LegalInformationScreenViewState: BindableState { }
enum LegalInformationScreenViewAction { }
@@ -0,0 +1,26 @@
//
// Copyright 2022 New Vector Ltd
//
// 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 Combine
import SwiftUI
typealias LegalInformationScreenViewModelType = StateStoreViewModel<LegalInformationScreenViewState, LegalInformationScreenViewAction>
class LegalInformationScreenViewModel: LegalInformationScreenViewModelType, LegalInformationScreenViewModelProtocol {
init() {
super.init(initialViewState: LegalInformationScreenViewState())
}
}
@@ -0,0 +1,22 @@
//
// Copyright 2022 New Vector Ltd
//
// 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 Combine
@MainActor
protocol LegalInformationScreenViewModelProtocol {
var context: LegalInformationScreenViewModelType.Context { get }
}
@@ -0,0 +1,52 @@
//
// Copyright 2022 New Vector Ltd
//
// 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
struct LegalInformationScreen: View {
@ObservedObject var context: LegalInformationScreenViewModel.Context
@Environment(\.openURL) private var openURL
var body: some View {
Form {
Section {
Button(L10n.commonCopyright) {
openURL(URL(staticString: "https://element.io/copyright"))
}
Button(L10n.commonAcceptableUsePolicy) {
openURL(URL(staticString: "https://element.io/acceptable-use-policy-terms"))
}
Button(L10n.commonPrivacyPolicy) {
openURL(URL(staticString: "https://element.io/privacy"))
}
}
.buttonStyle(.compoundForm(accessory: .navigationLink))
.compoundFormSection()
}
.compoundForm()
.navigationTitle(L10n.commonAbout)
.navigationBarTitleDisplayMode(.inline)
}
}
// MARK: - Previews
struct LegalInformationScreen_Previews: PreviewProvider {
static let viewModel = LegalInformationScreenViewModel()
static var previews: some View {
LegalInformationScreen(context: viewModel.context)
}
}