Release note view
This commit is contained in:
parent
de220435cc
commit
f9dbcf5cd1
|
@ -21,6 +21,7 @@
|
||||||
B93B677A2B42EC51000892E9 /* MetaPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = B93B67792B42EC51000892E9 /* MetaPicker.swift */; };
|
B93B677A2B42EC51000892E9 /* MetaPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = B93B67792B42EC51000892E9 /* MetaPicker.swift */; };
|
||||||
B93B677C2B433A6E000892E9 /* PostingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B93B677B2B433A6E000892E9 /* PostingView.swift */; };
|
B93B677C2B433A6E000892E9 /* PostingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B93B677B2B433A6E000892E9 /* PostingView.swift */; };
|
||||||
B97491E32B6E96700098BC48 /* SymbolWidth.swift in Sources */ = {isa = PBXBuildFile; fileRef = B97491E22B6E96700098BC48 /* SymbolWidth.swift */; };
|
B97491E32B6E96700098BC48 /* SymbolWidth.swift in Sources */ = {isa = PBXBuildFile; fileRef = B97491E22B6E96700098BC48 /* SymbolWidth.swift */; };
|
||||||
|
B97798892B853E6600DC869F /* UpdateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B97798882B853E6600DC869F /* UpdateView.swift */; };
|
||||||
B97BCE242B3DD8400044756D /* HapticManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B97BCE232B3DD8400044756D /* HapticManager.swift */; };
|
B97BCE242B3DD8400044756D /* HapticManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B97BCE232B3DD8400044756D /* HapticManager.swift */; };
|
||||||
B97BCE262B3DE5A10044756D /* AccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B97BCE252B3DE5A10044756D /* AccountView.swift */; };
|
B97BCE262B3DE5A10044756D /* AccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B97BCE252B3DE5A10044756D /* AccountView.swift */; };
|
||||||
B97BCE282B3ED2A80044756D /* .gitignore in Resources */ = {isa = PBXBuildFile; fileRef = B97BCE272B3ED2A80044756D /* .gitignore */; };
|
B97BCE282B3ED2A80044756D /* .gitignore in Resources */ = {isa = PBXBuildFile; fileRef = B97BCE272B3ED2A80044756D /* .gitignore */; };
|
||||||
|
@ -130,6 +131,7 @@
|
||||||
B93B67792B42EC51000892E9 /* MetaPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaPicker.swift; sourceTree = "<group>"; };
|
B93B67792B42EC51000892E9 /* MetaPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaPicker.swift; sourceTree = "<group>"; };
|
||||||
B93B677B2B433A6E000892E9 /* PostingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostingView.swift; sourceTree = "<group>"; };
|
B93B677B2B433A6E000892E9 /* PostingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostingView.swift; sourceTree = "<group>"; };
|
||||||
B97491E22B6E96700098BC48 /* SymbolWidth.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SymbolWidth.swift; sourceTree = "<group>"; };
|
B97491E22B6E96700098BC48 /* SymbolWidth.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SymbolWidth.swift; sourceTree = "<group>"; };
|
||||||
|
B97798882B853E6600DC869F /* UpdateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateView.swift; sourceTree = "<group>"; };
|
||||||
B97BCE232B3DD8400044756D /* HapticManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HapticManager.swift; sourceTree = "<group>"; };
|
B97BCE232B3DD8400044756D /* HapticManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HapticManager.swift; sourceTree = "<group>"; };
|
||||||
B97BCE252B3DE5A10044756D /* AccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountView.swift; sourceTree = "<group>"; };
|
B97BCE252B3DE5A10044756D /* AccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountView.swift; sourceTree = "<group>"; };
|
||||||
B97BCE272B3ED2A80044756D /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; path = .gitignore; sourceTree = "<group>"; };
|
B97BCE272B3ED2A80044756D /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; path = .gitignore; sourceTree = "<group>"; };
|
||||||
|
@ -402,6 +404,7 @@
|
||||||
B9FB94962B2EDABF00D81C07 /* SupportView.swift */,
|
B9FB94962B2EDABF00D81C07 /* SupportView.swift */,
|
||||||
B9CC45B72B40A2D6001E4FA5 /* AboutView.swift */,
|
B9CC45B72B40A2D6001E4FA5 /* AboutView.swift */,
|
||||||
B98BC7482B46CEDA00595441 /* AppearenceView.swift */,
|
B98BC7482B46CEDA00595441 /* AppearenceView.swift */,
|
||||||
|
B97798882B853E6600DC869F /* UpdateView.swift */,
|
||||||
);
|
);
|
||||||
path = Settings;
|
path = Settings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -580,6 +583,7 @@
|
||||||
B9FB94992B2EEB9400D81C07 /* AddInstanceView.swift in Sources */,
|
B9FB94992B2EEB9400D81C07 /* AddInstanceView.swift in Sources */,
|
||||||
B9FB94972B2EDABF00D81C07 /* SupportView.swift in Sources */,
|
B9FB94972B2EDABF00D81C07 /* SupportView.swift in Sources */,
|
||||||
B9F8FA162B5D3AC30044DAB4 /* SafariView.swift in Sources */,
|
B9F8FA162B5D3AC30044DAB4 /* SafariView.swift in Sources */,
|
||||||
|
B97798892B853E6600DC869F /* UpdateView.swift in Sources */,
|
||||||
B9842C142B2F310C00D9F3C1 /* FetchTimeline.swift in Sources */,
|
B9842C142B2F310C00D9F3C1 /* FetchTimeline.swift in Sources */,
|
||||||
B9842C162B2F363600D9F3C1 /* TimelineFilter.swift in Sources */,
|
B9842C162B2F363600D9F3C1 /* TimelineFilter.swift in Sources */,
|
||||||
B9B63B232B447B8000BBC82D /* PostCardView.swift in Sources */,
|
B9B63B232B447B8000BBC82D /* PostCardView.swift in Sources */,
|
||||||
|
|
|
@ -74,6 +74,7 @@ public enum SheetDestination: Identifiable {
|
||||||
case post(content: String = "", replyId: String? = nil, editId: String? = nil)
|
case post(content: String = "", replyId: String? = nil, editId: String? = nil)
|
||||||
case safari(url: URL)
|
case safari(url: URL)
|
||||||
case shareImage(image: UIImage, status: Status)
|
case shareImage(image: UIImage, status: Status)
|
||||||
|
case update
|
||||||
|
|
||||||
public var id: String {
|
public var id: String {
|
||||||
switch self {
|
switch self {
|
||||||
|
@ -92,6 +93,8 @@ public enum SheetDestination: Identifiable {
|
||||||
return "safari"
|
return "safari"
|
||||||
case .shareImage:
|
case .shareImage:
|
||||||
return "shareImage"
|
return "shareImage"
|
||||||
|
case .update:
|
||||||
|
return "update"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,6 +115,8 @@ public enum SheetDestination: Identifiable {
|
||||||
return false
|
return false
|
||||||
case .shareImage:
|
case .shareImage:
|
||||||
return false
|
return false
|
||||||
|
case .update:
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -198,6 +203,8 @@ extension View {
|
||||||
.ignoresSafeArea()
|
.ignoresSafeArea()
|
||||||
case let .shareImage(image, status):
|
case let .shareImage(image, status):
|
||||||
ShareSheet(image: image, status: status)
|
ShareSheet(image: image, status: status)
|
||||||
|
case .update:
|
||||||
|
UpdateView()
|
||||||
default:
|
default:
|
||||||
EmptySheetView(destId: destination.id)
|
EmptySheetView(destId: destination.id)
|
||||||
}
|
}
|
||||||
|
|
|
@ -2641,6 +2641,38 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"update.hide" : {
|
||||||
|
"localizations" : {
|
||||||
|
"en" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Continue"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fr" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Continuer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"update.title" : {
|
||||||
|
"localizations" : {
|
||||||
|
"en" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "What's new?"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fr" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Quoi de neuf ?"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"version" : "1.0"
|
"version" : "1.0"
|
||||||
|
|
|
@ -15,6 +15,7 @@ struct ThreadedApp: App {
|
||||||
.task {
|
.task {
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Tips.showAllTipsForTesting()
|
Tips.showAllTipsForTesting()
|
||||||
|
UserDefaults.standard.removeObject(forKey: "lastVersion")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
try? Tips.configure([
|
try? Tips.configure([
|
||||||
|
|
|
@ -54,6 +54,8 @@ struct ContentView: View {
|
||||||
.environmentObject(preferences)
|
.environmentObject(preferences)
|
||||||
.navigationBarTitleDisplayMode(.inline)
|
.navigationBarTitleDisplayMode(.inline)
|
||||||
.onAppear {
|
.onAppear {
|
||||||
|
showNew()
|
||||||
|
|
||||||
do {
|
do {
|
||||||
preferences = try UserPreferences.loadAsCurrent() ?? .defaultPreferences
|
preferences = try UserPreferences.loadAsCurrent() ?? .defaultPreferences
|
||||||
} catch {
|
} catch {
|
||||||
|
@ -100,6 +102,14 @@ struct ContentView: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func showNew() {
|
||||||
|
let lastVersion = UserDefaults.standard.string(forKey: "lastVersion")
|
||||||
|
if lastVersion == nil || lastVersion != AppInfo.appVersion {
|
||||||
|
UserDefaults.standard.setValue(AppInfo.appVersion, forKey: "lastVersion")
|
||||||
|
uniNavigator.presentedSheet = .update
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
let appearance = UITabBarAppearance()
|
let appearance = UITabBarAppearance()
|
||||||
appearance.configureWithTransparentBackground()
|
appearance.configureWithTransparentBackground()
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
//Made by Lumaa
|
||||||
|
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct UpdateView: View {
|
||||||
|
@Environment(\.dismiss) private var dismiss
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
ZStack {
|
||||||
|
Color.appBackground
|
||||||
|
.ignoresSafeArea()
|
||||||
|
|
||||||
|
VStack(alignment: .center) {
|
||||||
|
Text("update.title")
|
||||||
|
.font(.title.bold())
|
||||||
|
.padding(.top)
|
||||||
|
Text("about.version-\(AppInfo.appVersion)")
|
||||||
|
.font(.caption)
|
||||||
|
.foregroundStyle(Color.gray)
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
|
||||||
|
features
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
|
||||||
|
Button {
|
||||||
|
dismiss()
|
||||||
|
} label: {
|
||||||
|
Text("update.hide")
|
||||||
|
}
|
||||||
|
.buttonStyle(LargeButton(filled: true))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var features: some View {
|
||||||
|
VStack(spacing: 40) {
|
||||||
|
newFeature(systemImage: "sparkle.magnifyingglass", title: "Account officials", text: "In the Discovery tab, A new section \"\(String(localized: "discovery.app"))\" displays official accounts")
|
||||||
|
|
||||||
|
newFeature(systemImage: "accessibility", title: "Accessibility interactors", text: "The like, repost, bookmark, and share buttons are now displayed at the same font size")
|
||||||
|
|
||||||
|
newFeature(systemImage: "photo.on.rectangle", title: "Attachments viewer", text: "Tapping on an attachment will display a brand new screen, with ALT text and downloading")
|
||||||
|
}
|
||||||
|
.frame(height: 500)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ViewBuilder
|
||||||
|
private func newFeature(systemImage: String, title: String, text: String) -> some View {
|
||||||
|
ViewThatFits {
|
||||||
|
HStack(alignment: .center) {
|
||||||
|
Image(systemName: systemImage)
|
||||||
|
.resizable()
|
||||||
|
.scaledToFit()
|
||||||
|
.frame(width: 60, height: 60)
|
||||||
|
.foregroundStyle(Color(uiColor: UIColor.label))
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
.frame(width: 30)
|
||||||
|
|
||||||
|
VStack(alignment: .leading) {
|
||||||
|
Text(title)
|
||||||
|
.bold()
|
||||||
|
.foregroundStyle(Color(uiColor: UIColor.label))
|
||||||
|
.multilineTextAlignment(.leading)
|
||||||
|
.lineLimit(1)
|
||||||
|
|
||||||
|
Text(text)
|
||||||
|
.foregroundStyle(Color(uiColor: UIColor.label).opacity(0.7))
|
||||||
|
.font(.callout)
|
||||||
|
.multilineTextAlignment(.leading)
|
||||||
|
.lineLimit(4)
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
}
|
||||||
|
.frame(width: 330)
|
||||||
|
|
||||||
|
VStack(alignment: .leading) {
|
||||||
|
Text(title)
|
||||||
|
.bold()
|
||||||
|
.foregroundStyle(Color(uiColor: UIColor.label))
|
||||||
|
.multilineTextAlignment(.leading)
|
||||||
|
.lineLimit(1)
|
||||||
|
|
||||||
|
Text(text)
|
||||||
|
.foregroundStyle(Color(uiColor: UIColor.label))
|
||||||
|
.multilineTextAlignment(.leading)
|
||||||
|
.lineLimit(4)
|
||||||
|
}
|
||||||
|
.padding(.horizontal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Preview {
|
||||||
|
UpdateView()
|
||||||
|
}
|
Loading…
Reference in New Issue