ios: toolbar opacity (#4630)

* ios: toolbar material

* top toolbar too
This commit is contained in:
Evgeny
2024-08-08 17:25:45 +01:00
committed by GitHub
parent ed50623ef5
commit b3f0e71ded
20 changed files with 123 additions and 4 deletions
@@ -25,6 +25,7 @@ struct ChatListView: View {
@AppStorage(DEFAULT_SHOW_UNREAD_AND_FAVORITES) private var showUnreadAndFavorites = false
@AppStorage(GROUP_DEFAULT_ONE_HAND_UI, store: groupDefaults) private var oneHandUI = true
@AppStorage(DEFAULT_ONE_HAND_UI_CARD_SHOWN) private var oneHandUICardShown = false
@AppStorage(DEFAULT_TOOLBAR_MATERIAL) private var toolbarMaterial = ToolbarMaterial.bar.rawValue
var body: some View {
if #available(iOS 16.0, *) {
@@ -62,7 +63,8 @@ struct ChatListView: View {
}
private var chatListView: some View {
withToolbar {
let tm = ToolbarMaterial.material(toolbarMaterial)
return withToolbar(tm) {
chatList
.background(theme.colors.background)
.navigationBarTitleDisplayMode(.inline)
@@ -87,11 +89,11 @@ struct ChatListView: View {
))
}
.safeAreaInset(edge: .top) {
if oneHandUI { Divider().background(Material.ultraThin) }
if oneHandUI { Divider().background(tm) }
}
.safeAreaInset(edge: .bottom) {
if oneHandUI {
Divider().padding(.bottom, Self.hasHomeIndicator ? 0 : 8).background(Material.ultraThin)
Divider().padding(.bottom, Self.hasHomeIndicator ? 0 : 8).background(tm)
}
}
}
@@ -103,7 +105,7 @@ struct ChatListView: View {
} else { false }
}()
@ViewBuilder func withToolbar(content: () -> some View) -> some View {
@ViewBuilder func withToolbar(_ material: Material, content: () -> some View) -> some View {
if #available(iOS 16.0, *) {
if oneHandUI {
content()
@@ -112,6 +114,7 @@ struct ChatListView: View {
} else {
content()
.toolbarBackground(.automatic, for: .navigationBar)
.toolbarBackground(material)
.toolbar { topToolbar }
}
} else {
@@ -32,8 +32,10 @@ struct AppearanceSettings: View {
if currentThemeDefault.get() == DefaultTheme.SYSTEM_THEME_NAME { nil as DefaultThemeMode? } else { CurrentColors.base.mode }
}()
@State private var darkModeTheme: String = UserDefaults.standard.string(forKey: DEFAULT_SYSTEM_DARK_THEME) ?? DefaultTheme.DARK.themeName
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
@AppStorage(DEFAULT_PROFILE_IMAGE_CORNER_RADIUS) private var profileImageCornerRadius = defaultProfileImageCorner
@AppStorage(GROUP_DEFAULT_ONE_HAND_UI, store: groupDefaults) private var oneHandUI = true
@AppStorage(DEFAULT_TOOLBAR_MATERIAL) private var toolbarMaterial = ToolbarMaterial.bar.rawValue
@State var themeUserDestination: (Int64, ThemeModeOverrides?)? = {
if let currentUser = ChatModel.shared.currentUser, let uiThemes = currentUser.uiThemes, uiThemes.preferredMode(!CurrentColors.colors.isLight) != nil {
@@ -65,6 +67,14 @@ struct AppearanceSettings: View {
Section("Chat list") {
Toggle("Reachable chat toolbar", isOn: $oneHandUI)
if developerTools {
Picker("Toolbar opacity", selection: $toolbarMaterial) {
ForEach(ToolbarMaterial.allCases, id: \.rawValue) { tm in
Text(tm.text).tag(tm.rawValue)
}
}
.frame(height: 36)
}
}
Section {
@@ -296,6 +306,41 @@ struct AppearanceSettings: View {
}
}
enum ToolbarMaterial: String, CaseIterable {
case bar
case ultraThin
case thin
case regular
case thick
case ultraThick
static func material(_ s: String) -> Material {
ToolbarMaterial(rawValue: s)?.material ?? Material.bar
}
var material: Material {
switch self {
case .bar: .bar
case .ultraThin: .ultraThin
case .thin: .thin
case .regular: .regular
case .thick: .thick
case .ultraThick: .ultraThick
}
}
var text: String {
switch self {
case .bar: "System"
case .ultraThin: "Ultra thin"
case .thin: "Thin"
case .regular: "Regular"
case .thick: "Thick"
case .ultraThick: "Ultra thick"
}
}
}
struct ChatThemePreview: View {
@EnvironmentObject var theme: AppTheme
var base: DefaultTheme
@@ -48,6 +48,7 @@ let DEFAULT_ACCENT_COLOR_BLUE = "accentColorBlue" // deprecated, only used for m
let DEFAULT_USER_INTERFACE_STYLE = "userInterfaceStyle" // deprecated, only used for migration
let DEFAULT_PROFILE_IMAGE_CORNER_RADIUS = "profileImageCornerRadius"
let DEFAULT_ONE_HAND_UI_CARD_SHOWN = "oneHandUICardShown"
let DEFAULT_TOOLBAR_MATERIAL = "toolbarMaterial"
let DEFAULT_CONNECT_VIA_LINK_TAB = "connectViaLinkTab"
let DEFAULT_LIVE_MESSAGE_ALERT_SHOWN = "liveMessageAlertShown"
let DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE = "showHiddenProfilesNotice"
@@ -98,6 +99,7 @@ let appDefaults: [String: Any] = [
DEFAULT_ENCRYPTION_STARTED: false,
DEFAULT_PROFILE_IMAGE_CORNER_RADIUS: defaultProfileImageCorner,
DEFAULT_ONE_HAND_UI_CARD_SHOWN: false,
DEFAULT_TOOLBAR_MATERIAL: ToolbarMaterial.bar.rawValue,
DEFAULT_CONNECT_VIA_LINK_TAB: ConnectViaLinkTab.scan.rawValue,
DEFAULT_LIVE_MESSAGE_ALERT_SHOWN: false,
DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE: true,
@@ -6579,6 +6579,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Избор на инкогнито при свързване.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<note>No comment provided by engineer.</note>
@@ -6356,6 +6356,10 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření.</target>
<target>Změnit inkognito režim při připojení.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<note>No comment provided by engineer.</note>
@@ -6757,6 +6757,10 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt
<target>Inkognito beim Verbinden einschalten.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<target>Summe aller Abonnements</target>
@@ -6793,6 +6793,11 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Toggle incognito when connecting.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<target>Toolbar opacity</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<target>Total</target>
@@ -6781,6 +6781,10 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
<target>Activa incógnito al conectar.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<target>Total</target>
@@ -6341,6 +6341,10 @@ Sinua kehotetaan suorittamaan todennus loppuun, ennen kuin tämä ominaisuus ote
<source>Toggle incognito when connecting.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<note>No comment provided by engineer.</note>
@@ -6750,6 +6750,10 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
<target>Basculer en mode incognito lors de la connexion.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<target>Total</target>
@@ -6781,6 +6781,10 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll
<target>Inkognitó mód kapcsolódáskor.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<target>Összesen</target>
@@ -6781,6 +6781,10 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio
<target>Attiva/disattiva l'incognito quando ti colleghi.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<target>Totale</target>
@@ -6359,6 +6359,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<source>Toggle incognito when connecting.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<note>No comment provided by engineer.</note>
@@ -6781,6 +6781,10 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc
<target>Schakel incognito in tijdens het verbinden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<target>Totaal</target>
@@ -6730,6 +6730,10 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.</ta
<target>Przełącz incognito przy połączeniu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<target>Łącznie</target>
@@ -6781,6 +6781,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Установите режим Инкогнито при соединении.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<target>Всего</target>
@@ -6313,6 +6313,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<source>Toggle incognito when connecting.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<note>No comment provided by engineer.</note>
@@ -6610,6 +6610,10 @@ Bu özellik etkinleştirilmeden önce kimlik doğrulamayı tamamlamanız istenec
<target>Bağlanırken gizli moda geçiş yap.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<note>No comment provided by engineer.</note>
@@ -6610,6 +6610,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Увімкніть інкогніто при підключенні.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<note>No comment provided by engineer.</note>
@@ -6529,6 +6529,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>在连接时切换隐身模式。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toolbar opacity" xml:space="preserve">
<source>Toolbar opacity</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<note>No comment provided by engineer.</note>