mirror of
https://github.com/Dimillian/IceCubesApp.git
synced 2024-12-22 15:16:36 +00:00
Add settings for haptic feedbacks
This commit is contained in:
parent
6b285cdbcf
commit
65ed2d871c
27 changed files with 183 additions and 25 deletions
|
@ -16,6 +16,7 @@
|
||||||
7429BCE2297C55D00069A946 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 7429BCE4297C55D00069A946 /* Localizable.stringsdict */; };
|
7429BCE2297C55D00069A946 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 7429BCE4297C55D00069A946 /* Localizable.stringsdict */; };
|
||||||
7429BCE5297C5A750069A946 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 7429BCE4297C55D00069A946 /* Localizable.stringsdict */; };
|
7429BCE5297C5A750069A946 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 7429BCE4297C55D00069A946 /* Localizable.stringsdict */; };
|
||||||
7429BCE6297C5A750069A946 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 7429BCE4297C55D00069A946 /* Localizable.stringsdict */; };
|
7429BCE6297C5A750069A946 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 7429BCE4297C55D00069A946 /* Localizable.stringsdict */; };
|
||||||
|
9F1E8B47298EBCBB00609F80 /* HapticSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F1E8B46298EBCBB00609F80 /* HapticSettingsView.swift */; };
|
||||||
9F24EEB829360C330042359D /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9F24EEB729360C330042359D /* Preview Assets.xcassets */; };
|
9F24EEB829360C330042359D /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9F24EEB729360C330042359D /* Preview Assets.xcassets */; };
|
||||||
9F295540292B6C3400E0E81B /* Timeline in Frameworks */ = {isa = PBXBuildFile; productRef = 9F29553F292B6C3400E0E81B /* Timeline */; };
|
9F295540292B6C3400E0E81B /* Timeline in Frameworks */ = {isa = PBXBuildFile; productRef = 9F29553F292B6C3400E0E81B /* Timeline */; };
|
||||||
9F2A540729699698009B2D7C /* SupportAppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F2A540629699698009B2D7C /* SupportAppView.swift */; };
|
9F2A540729699698009B2D7C /* SupportAppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F2A540629699698009B2D7C /* SupportAppView.swift */; };
|
||||||
|
@ -147,6 +148,7 @@
|
||||||
8C27D978298471E900CDF593 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = "<group>"; };
|
8C27D978298471E900CDF593 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
8C27D979298471E900CDF593 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
8C27D979298471E900CDF593 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
9606B7A1297AD2BB00C1FB75 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
|
9606B7A1297AD2BB00C1FB75 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
|
9F1E8B46298EBCBB00609F80 /* HapticSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HapticSettingsView.swift; sourceTree = "<group>"; };
|
||||||
9F24EEB729360C330042359D /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
|
9F24EEB729360C330042359D /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
|
||||||
9F29553D292B67B600E0E81B /* Network */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = Network; path = Packages/Network; sourceTree = "<group>"; };
|
9F29553D292B67B600E0E81B /* Network */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = Network; path = Packages/Network; sourceTree = "<group>"; };
|
||||||
9F29553E292B6AF600E0E81B /* Timeline */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = Timeline; path = Packages/Timeline; sourceTree = "<group>"; };
|
9F29553E292B6AF600E0E81B /* Timeline */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = Timeline; path = Packages/Timeline; sourceTree = "<group>"; };
|
||||||
|
@ -441,16 +443,17 @@
|
||||||
9FE151A4293C90EA00E9683D /* Settings */ = {
|
9FE151A4293C90EA00E9683D /* Settings */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
9FAE4ACA293783B000772766 /* SettingsTab.swift */,
|
|
||||||
9FE151A5293C90F900E9683D /* IconSelectorView.swift */,
|
|
||||||
9F2B92F9295DA7D700DE16D0 /* AddAccountsView.swift */,
|
|
||||||
9F2B92FB295DA94500DE16D0 /* InstanceInfoView.swift */,
|
|
||||||
9F7335F82968576500AFF0BA /* DisplaySettingsView.swift */,
|
|
||||||
9F2A540629699698009B2D7C /* SupportAppView.swift */,
|
|
||||||
9F2A5410296A1429009B2D7C /* PushNotificationsView.swift */,
|
|
||||||
C9B22676297F6C2E001F9EFE /* ContentSettingsView.swift */,
|
|
||||||
9F7D939929805DBD00EE6B7A /* AccountSettingView.swift */,
|
|
||||||
069709A9298C9AD7006E4CB5 /* AboutView.swift */,
|
069709A9298C9AD7006E4CB5 /* AboutView.swift */,
|
||||||
|
9F7D939929805DBD00EE6B7A /* AccountSettingView.swift */,
|
||||||
|
9F2B92F9295DA7D700DE16D0 /* AddAccountsView.swift */,
|
||||||
|
C9B22676297F6C2E001F9EFE /* ContentSettingsView.swift */,
|
||||||
|
9F7335F82968576500AFF0BA /* DisplaySettingsView.swift */,
|
||||||
|
9F1E8B46298EBCBB00609F80 /* HapticSettingsView.swift */,
|
||||||
|
9FE151A5293C90F900E9683D /* IconSelectorView.swift */,
|
||||||
|
9F2B92FB295DA94500DE16D0 /* InstanceInfoView.swift */,
|
||||||
|
9F2A5410296A1429009B2D7C /* PushNotificationsView.swift */,
|
||||||
|
9FAE4ACA293783B000772766 /* SettingsTab.swift */,
|
||||||
|
9F2A540629699698009B2D7C /* SupportAppView.swift */,
|
||||||
);
|
);
|
||||||
path = Settings;
|
path = Settings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -744,6 +747,7 @@
|
||||||
9F35DB4729506F6600B3281A /* NotificationTab.swift in Sources */,
|
9F35DB4729506F6600B3281A /* NotificationTab.swift in Sources */,
|
||||||
9F7335F22967608F00AFF0BA /* AddRemoteTimelineView.swift in Sources */,
|
9F7335F22967608F00AFF0BA /* AddRemoteTimelineView.swift in Sources */,
|
||||||
9F55C68D2955968700F94077 /* ExploreTab.swift in Sources */,
|
9F55C68D2955968700F94077 /* ExploreTab.swift in Sources */,
|
||||||
|
9F1E8B47298EBCBB00609F80 /* HapticSettingsView.swift in Sources */,
|
||||||
9F2A5411296A1429009B2D7C /* PushNotificationsView.swift in Sources */,
|
9F2A5411296A1429009B2D7C /* PushNotificationsView.swift in Sources */,
|
||||||
9FAD85A8297582F100496AB1 /* QuickLookRepresentable.swift in Sources */,
|
9FAD85A8297582F100496AB1 /* QuickLookRepresentable.swift in Sources */,
|
||||||
);
|
);
|
||||||
|
|
|
@ -140,7 +140,9 @@ struct IceCubesApp: App {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
selectedTab = newTab
|
selectedTab = newTab
|
||||||
HapticManager.shared.selectionChanged()
|
if userPreferences.hapticTabSelectionEnabled {
|
||||||
|
HapticManager.shared.selectionChanged()
|
||||||
|
}
|
||||||
})) {
|
})) {
|
||||||
ForEach(availableTabs) { tab in
|
ForEach(availableTabs) { tab in
|
||||||
tab.makeContentView(popToRootTab: $popToRootTab)
|
tab.makeContentView(popToRootTab: $popToRootTab)
|
||||||
|
|
24
IceCubesApp/App/Tabs/Settings/HapticSettingsView.swift
Normal file
24
IceCubesApp/App/Tabs/Settings/HapticSettingsView.swift
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import DesignSystem
|
||||||
|
import Env
|
||||||
|
import Models
|
||||||
|
import Status
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct HapticSettingsView: View {
|
||||||
|
@EnvironmentObject private var theme: Theme
|
||||||
|
@EnvironmentObject private var userPreferences: UserPreferences
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
Form {
|
||||||
|
Section {
|
||||||
|
Toggle("settings.haptic.timeline", isOn: $userPreferences.hapticTimelineEnabled)
|
||||||
|
Toggle("settings.haptic.tab-selection", isOn: $userPreferences.hapticTabSelectionEnabled)
|
||||||
|
Toggle("settings.haptic.buttons", isOn: $userPreferences.hapticButtonPressEnabled)
|
||||||
|
}
|
||||||
|
.listRowBackground(theme.primaryBackgroundColor)
|
||||||
|
}
|
||||||
|
.navigationTitle("settings.haptic.navigation-title")
|
||||||
|
.scrollContentBackground(.hidden)
|
||||||
|
.background(theme.secondaryBackgroundColor)
|
||||||
|
}
|
||||||
|
}
|
|
@ -100,6 +100,9 @@ struct SettingsTabs: View {
|
||||||
NavigationLink(destination: DisplaySettingsView()) {
|
NavigationLink(destination: DisplaySettingsView()) {
|
||||||
Label("settings.general.display", systemImage: "paintpalette")
|
Label("settings.general.display", systemImage: "paintpalette")
|
||||||
}
|
}
|
||||||
|
NavigationLink(destination: HapticSettingsView()) {
|
||||||
|
Label("settings.general.haptic", systemImage: "waveform.path")
|
||||||
|
}
|
||||||
NavigationLink(destination: remoteLocalTimelinesView) {
|
NavigationLink(destination: remoteLocalTimelinesView) {
|
||||||
Label("settings.general.remote-timelines", systemImage: "dot.radiowaves.right")
|
Label("settings.general.remote-timelines", systemImage: "dot.radiowaves.right")
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,6 +141,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
// MARK: Tabs
|
// MARK: Tabs
|
||||||
"tab.explore" = "Exploreu";
|
"tab.explore" = "Exploreu";
|
||||||
"tab.federated" = "Federat";
|
"tab.federated" = "Federat";
|
||||||
|
|
|
@ -139,6 +139,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
"enum.expand-media.show" = "Alle zeigen";
|
"enum.expand-media.show" = "Alle zeigen";
|
||||||
"enum.expand-media.hide" = "Alle ausblenden";
|
"enum.expand-media.hide" = "Alle ausblenden";
|
||||||
"enum.expand-media.hide-sensitive" = "Sensible ausblenden";
|
"enum.expand-media.hide-sensitive" = "Sensible ausblenden";
|
||||||
|
|
|
@ -143,6 +143,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
// MARK: Tabs
|
// MARK: Tabs
|
||||||
"tab.explore" = "Explore";
|
"tab.explore" = "Explore";
|
||||||
"tab.federated" = "Federated";
|
"tab.federated" = "Federated";
|
||||||
|
|
|
@ -139,9 +139,16 @@
|
||||||
"settings.other.autoplay-video" = "Auto Play Videos";
|
"settings.other.autoplay-video" = "Auto Play Videos";
|
||||||
"settings.about.built-with" = "Ice Cubes is built with the following Open Source software:";
|
"settings.about.built-with" = "Ice Cubes is built with the following Open Source software:";
|
||||||
"settings.about.title" = "Ice Cubes";
|
"settings.about.title" = "Ice Cubes";
|
||||||
|
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
// MARK: Tabs
|
// MARK: Tabs
|
||||||
"tab.explore" = "Explore";
|
"tab.explore" = "Explore";
|
||||||
"tab.federated" = "Federated";
|
"tab.federated" = "Federated";
|
||||||
|
|
|
@ -139,6 +139,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
"enum.expand-media.show" = "Siempre";
|
"enum.expand-media.show" = "Siempre";
|
||||||
"enum.expand-media.hide" = "Nunca";
|
"enum.expand-media.hide" = "Nunca";
|
||||||
"enum.expand-media.hide-sensitive" = "Ocultar contenido sensible";
|
"enum.expand-media.hide-sensitive" = "Ocultar contenido sensible";
|
||||||
|
|
|
@ -142,6 +142,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
// MARK: Tabs
|
// MARK: Tabs
|
||||||
"tab.explore" = "Explorer";
|
"tab.explore" = "Explorer";
|
||||||
"tab.federated" = "Fédéré";
|
"tab.federated" = "Fédéré";
|
||||||
|
|
|
@ -142,6 +142,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
// MARK: Tabs
|
// MARK: Tabs
|
||||||
"tab.explore" = "Esplora";
|
"tab.explore" = "Esplora";
|
||||||
"tab.federated" = "Federazione";
|
"tab.federated" = "Federazione";
|
||||||
|
|
|
@ -142,6 +142,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
// MARK: Tabs
|
// MARK: Tabs
|
||||||
"tab.explore" = "エクスプローラー";
|
"tab.explore" = "エクスプローラー";
|
||||||
"tab.federated" = "連合";
|
"tab.federated" = "連合";
|
||||||
|
|
|
@ -142,6 +142,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
// MARK: Tabs
|
// MARK: Tabs
|
||||||
"tab.explore" = "둘러보기";
|
"tab.explore" = "둘러보기";
|
||||||
"tab.federated" = "연합";
|
"tab.federated" = "연합";
|
||||||
|
|
|
@ -142,6 +142,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
// MARK: Tabs
|
// MARK: Tabs
|
||||||
"tab.explore" = "Utforsk";
|
"tab.explore" = "Utforsk";
|
||||||
"tab.federated" = "Federert";
|
"tab.federated" = "Federert";
|
||||||
|
|
|
@ -139,6 +139,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
// MARK: Tabs
|
// MARK: Tabs
|
||||||
"tab.explore" = "Ontdekken";
|
"tab.explore" = "Ontdekken";
|
||||||
"tab.federated" = "Gefedereerd";
|
"tab.federated" = "Gefedereerd";
|
||||||
|
|
|
@ -142,6 +142,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
// MARK: Tabs
|
// MARK: Tabs
|
||||||
"tab.explore" = "Odkrywaj";
|
"tab.explore" = "Odkrywaj";
|
||||||
"tab.federated" = "Globalny";
|
"tab.federated" = "Globalny";
|
||||||
|
|
|
@ -142,6 +142,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
// MARK: Tabs
|
// MARK: Tabs
|
||||||
"tab.explore" = "Explorar";
|
"tab.explore" = "Explorar";
|
||||||
"tab.federated" = "Linha global";
|
"tab.federated" = "Linha global";
|
||||||
|
|
|
@ -142,6 +142,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
// MARK: Tabs
|
// MARK: Tabs
|
||||||
"tab.explore" = "Keşfet";
|
"tab.explore" = "Keşfet";
|
||||||
"tab.federated" = "Birleştirilmiş";
|
"tab.federated" = "Birleştirilmiş";
|
||||||
|
|
|
@ -137,6 +137,12 @@
|
||||||
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
"settings.account.cached-posts-%@" = "Cached posts: %@";
|
||||||
"settings.account.action.delete-cache" = "Clear cache";
|
"settings.account.action.delete-cache" = "Clear cache";
|
||||||
|
|
||||||
|
"settings.general.haptic" = "Haptic Feedback";
|
||||||
|
"settings.haptic.navigation-title" = "Haptic Settings";
|
||||||
|
"settings.haptic.timeline" = "Timeline";
|
||||||
|
"settings.haptic.tab-selection" = "Tab Selection";
|
||||||
|
"settings.haptic.buttons" = "Button Press";
|
||||||
|
|
||||||
"settings.display.font" = "时间线字体";
|
"settings.display.font" = "时间线字体";
|
||||||
"settings.display.font.system" = "系统";
|
"settings.display.font.system" = "系统";
|
||||||
"settings.display.font.custom" = "自定义";
|
"settings.display.font.custom" = "自定义";
|
||||||
|
|
|
@ -38,7 +38,9 @@ public struct AppAccountsSelectorView: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.onTapGesture {
|
.onTapGesture {
|
||||||
HapticManager.shared.impact()
|
if UserPreferences.shared.hapticButtonPressEnabled {
|
||||||
|
HapticManager.shared.impact()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.onAppear {
|
.onAppear {
|
||||||
refreshAccounts()
|
refreshAccounts()
|
||||||
|
@ -78,7 +80,9 @@ public struct AppAccountsSelectorView: View {
|
||||||
appAccounts.currentAccount = viewModel.appAccount
|
appAccounts.currentAccount = viewModel.appAccount
|
||||||
}
|
}
|
||||||
|
|
||||||
HapticManager.shared.impact()
|
if UserPreferences.shared.hapticButtonPressEnabled {
|
||||||
|
HapticManager.shared.impact()
|
||||||
|
}
|
||||||
} label: {
|
} label: {
|
||||||
HStack {
|
HStack {
|
||||||
if viewModel.account?.id == currentAccount.account?.id {
|
if viewModel.account?.id == currentAccount.account?.id {
|
||||||
|
@ -92,7 +96,9 @@ public struct AppAccountsSelectorView: View {
|
||||||
if accountCreationEnabled {
|
if accountCreationEnabled {
|
||||||
Divider()
|
Divider()
|
||||||
Button {
|
Button {
|
||||||
HapticManager.shared.impact()
|
if UserPreferences.shared.hapticButtonPressEnabled {
|
||||||
|
HapticManager.shared.impact()
|
||||||
|
}
|
||||||
routerPath.presentedSheet = .addAccount
|
routerPath.presentedSheet = .addAccount
|
||||||
} label: {
|
} label: {
|
||||||
Label("app-account.button.add", systemImage: "person.badge.plus")
|
Label("app-account.button.add", systemImage: "person.badge.plus")
|
||||||
|
@ -102,7 +108,9 @@ public struct AppAccountsSelectorView: View {
|
||||||
if UIDevice.current.userInterfaceIdiom == .phone {
|
if UIDevice.current.userInterfaceIdiom == .phone {
|
||||||
Divider()
|
Divider()
|
||||||
Button {
|
Button {
|
||||||
HapticManager.shared.impact()
|
if UserPreferences.shared.hapticButtonPressEnabled {
|
||||||
|
HapticManager.shared.impact()
|
||||||
|
}
|
||||||
routerPath.presentedSheet = .settings
|
routerPath.presentedSheet = .settings
|
||||||
} label: {
|
} label: {
|
||||||
Label("tab.settings", systemImage: "gear")
|
Label("tab.settings", systemImage: "gear")
|
||||||
|
|
|
@ -8,7 +8,9 @@ public extension View {
|
||||||
ToolbarItem(placement: .navigationBarTrailing) {
|
ToolbarItem(placement: .navigationBarTrailing) {
|
||||||
Button {
|
Button {
|
||||||
routerPath.presentedSheet = .newStatusEditor(visibility: visibility)
|
routerPath.presentedSheet = .newStatusEditor(visibility: visibility)
|
||||||
HapticManager.shared.impact()
|
if UserPreferences.shared.hapticButtonPressEnabled {
|
||||||
|
HapticManager.shared.impact()
|
||||||
|
}
|
||||||
} label: {
|
} label: {
|
||||||
Image(systemName: "square.and.pencil")
|
Image(systemName: "square.and.pencil")
|
||||||
}
|
}
|
||||||
|
@ -29,7 +31,9 @@ public struct StatusEditorToolbarItem: ToolbarContent {
|
||||||
ToolbarItem(placement: .navigationBarTrailing) {
|
ToolbarItem(placement: .navigationBarTrailing) {
|
||||||
Button {
|
Button {
|
||||||
routerPath.presentedSheet = .newStatusEditor(visibility: visibility)
|
routerPath.presentedSheet = .newStatusEditor(visibility: visibility)
|
||||||
HapticManager.shared.impact()
|
if UserPreferences.shared.hapticButtonPressEnabled {
|
||||||
|
HapticManager.shared.impact()
|
||||||
|
}
|
||||||
} label: {
|
} label: {
|
||||||
Image(systemName: "square.and.pencil")
|
Image(systemName: "square.and.pencil")
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,10 @@ public class UserPreferences: ObservableObject {
|
||||||
@AppStorage("suppress_dupe_reblogs") public var suppressDupeReblogs: Bool = false
|
@AppStorage("suppress_dupe_reblogs") public var suppressDupeReblogs: Bool = false
|
||||||
|
|
||||||
@AppStorage("inAppBrowserReaderView") public var inAppBrowserReaderView = false
|
@AppStorage("inAppBrowserReaderView") public var inAppBrowserReaderView = false
|
||||||
|
|
||||||
|
@AppStorage("haptic_tab") public var hapticTabSelectionEnabled = true
|
||||||
|
@AppStorage("haptic_timeline") public var hapticTimelineEnabled = true
|
||||||
|
@AppStorage("haptic_button_press") public var hapticButtonPressEnabled = true
|
||||||
|
|
||||||
public var postVisibility: Models.Visibility {
|
public var postVisibility: Models.Visibility {
|
||||||
if useInstanceContentSettings {
|
if useInstanceContentSettings {
|
||||||
|
|
|
@ -155,7 +155,9 @@ public class StatusEditorViewModel: ObservableObject {
|
||||||
case let .edit(status):
|
case let .edit(status):
|
||||||
postStatus = try await client.put(endpoint: Statuses.editStatus(id: status.id, json: data))
|
postStatus = try await client.put(endpoint: Statuses.editStatus(id: status.id, json: data))
|
||||||
}
|
}
|
||||||
HapticManager.shared.notification(type: .success)
|
if UserPreferences.shared.hapticButtonPressEnabled {
|
||||||
|
HapticManager.shared.notification(type: .success)
|
||||||
|
}
|
||||||
if hasExplicitlySelectedLanguage, let selectedLanguage {
|
if hasExplicitlySelectedLanguage, let selectedLanguage {
|
||||||
preferences?.markLanguageAsSelected(isoCode: selectedLanguage)
|
preferences?.markLanguageAsSelected(isoCode: selectedLanguage)
|
||||||
}
|
}
|
||||||
|
@ -167,7 +169,9 @@ public class StatusEditorViewModel: ObservableObject {
|
||||||
showPostingErrorAlert = true
|
showPostingErrorAlert = true
|
||||||
}
|
}
|
||||||
isPosting = false
|
isPosting = false
|
||||||
HapticManager.shared.notification(type: .error)
|
if UserPreferences.shared.hapticButtonPressEnabled {
|
||||||
|
HapticManager.shared.notification(type: .error)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,7 +156,9 @@ struct StatusActionsView: View {
|
||||||
|
|
||||||
private func handleAction(action: Actions) {
|
private func handleAction(action: Actions) {
|
||||||
Task {
|
Task {
|
||||||
HapticManager.shared.notification(type: .success)
|
if UserPreferences.shared.hapticButtonPressEnabled {
|
||||||
|
HapticManager.shared.notification(type: .success)
|
||||||
|
}
|
||||||
switch action {
|
switch action {
|
||||||
case .respond:
|
case .respond:
|
||||||
routerPath.presentedSheet = .replyToStatusEditor(status: viewModel.status)
|
routerPath.presentedSheet = .replyToStatusEditor(status: viewModel.status)
|
||||||
|
|
|
@ -425,7 +425,9 @@ public struct StatusRowView: View {
|
||||||
private var trailinSwipeActions: some View {
|
private var trailinSwipeActions: some View {
|
||||||
Button {
|
Button {
|
||||||
Task {
|
Task {
|
||||||
HapticManager.shared.notification(type: .success)
|
if UserPreferences.shared.hapticButtonPressEnabled {
|
||||||
|
HapticManager.shared.notification(type: .success)
|
||||||
|
}
|
||||||
if viewModel.isFavorited {
|
if viewModel.isFavorited {
|
||||||
await viewModel.unFavorite()
|
await viewModel.unFavorite()
|
||||||
} else {
|
} else {
|
||||||
|
@ -438,7 +440,9 @@ public struct StatusRowView: View {
|
||||||
.tint(.yellow)
|
.tint(.yellow)
|
||||||
Button {
|
Button {
|
||||||
Task {
|
Task {
|
||||||
HapticManager.shared.notification(type: .success)
|
if UserPreferences.shared.hapticButtonPressEnabled {
|
||||||
|
HapticManager.shared.notification(type: .success)
|
||||||
|
}
|
||||||
if viewModel.isReblogged {
|
if viewModel.isReblogged {
|
||||||
await viewModel.unReblog()
|
await viewModel.unReblog()
|
||||||
} else {
|
} else {
|
||||||
|
@ -454,7 +458,9 @@ public struct StatusRowView: View {
|
||||||
@ViewBuilder
|
@ViewBuilder
|
||||||
private var leadingSwipeActions: some View {
|
private var leadingSwipeActions: some View {
|
||||||
Button {
|
Button {
|
||||||
HapticManager.shared.notification(type: .success)
|
if UserPreferences.shared.hapticButtonPressEnabled {
|
||||||
|
HapticManager.shared.notification(type: .success)
|
||||||
|
}
|
||||||
routerPath.presentedSheet = .replyToStatusEditor(status: viewModel.status)
|
routerPath.presentedSheet = .replyToStatusEditor(status: viewModel.status)
|
||||||
} label: {
|
} label: {
|
||||||
Image(systemName: "arrowshape.turn.up.left")
|
Image(systemName: "arrowshape.turn.up.left")
|
||||||
|
|
|
@ -19,7 +19,9 @@ class PendingStatusesObserver: ObservableObject {
|
||||||
func removeStatus(status: Status) {
|
func removeStatus(status: Status) {
|
||||||
if !disableUpdate, let index = pendingStatuses.firstIndex(of: status.id) {
|
if !disableUpdate, let index = pendingStatuses.firstIndex(of: status.id) {
|
||||||
pendingStatuses.removeSubrange(index ... (pendingStatuses.count - 1))
|
pendingStatuses.removeSubrange(index ... (pendingStatuses.count - 1))
|
||||||
HapticManager.shared.selectionChanged()
|
if UserPreferences.shared.hapticTimelineEnabled {
|
||||||
|
HapticManager.shared.selectionChanged()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,9 +93,13 @@ public struct TimelineView: View {
|
||||||
viewModel.isTimelineVisible = false
|
viewModel.isTimelineVisible = false
|
||||||
}
|
}
|
||||||
.refreshable {
|
.refreshable {
|
||||||
HapticManager.shared.impact(intensity: 0.3)
|
if UserPreferences.shared.hapticTimelineEnabled {
|
||||||
|
HapticManager.shared.impact(intensity: 0.3)
|
||||||
|
}
|
||||||
await viewModel.fetchStatuses()
|
await viewModel.fetchStatuses()
|
||||||
HapticManager.shared.impact(intensity: 0.7)
|
if UserPreferences.shared.hapticTimelineEnabled {
|
||||||
|
HapticManager.shared.impact(intensity: 0.7)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.onChange(of: watcher.latestEvent?.id) { _ in
|
.onChange(of: watcher.latestEvent?.id) { _ in
|
||||||
if let latestEvent = watcher.latestEvent {
|
if let latestEvent = watcher.latestEvent {
|
||||||
|
|
Loading…
Reference in a new issue