mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-17 02:58:07 +00:00
Theme - Colors
This commit is contained in:
parent
068b93cf1c
commit
888b75a2d4
6 changed files with 148 additions and 5 deletions
|
|
@ -305,6 +305,7 @@ class CoreContext: ObservableObject {
|
|||
}
|
||||
}, onConfiguringStatus: { (_: Core, status: ConfiguringState, message: String) in
|
||||
Log.info("New configuration state is \(status) = \(message)\n")
|
||||
let themeMainColor = CorePreferences.themeMainColor
|
||||
DispatchQueue.main.async {
|
||||
if status == ConfiguringState.Successful {
|
||||
var accountModels: [AccountModel] = []
|
||||
|
|
@ -312,6 +313,7 @@ class CoreContext: ObservableObject {
|
|||
accountModels.append(AccountModel(account: account, core: self.mCore))
|
||||
}
|
||||
self.accounts = accountModels
|
||||
ThemeManager.shared.applyTheme(named: themeMainColor)
|
||||
}
|
||||
}
|
||||
}, onLogCollectionUploadStateChanged: { (_: Core, _: Core.LogCollectionUploadState, info: String) in
|
||||
|
|
|
|||
|
|
@ -28,10 +28,13 @@ struct SplashScreen: View {
|
|||
HStack {
|
||||
Spacer()
|
||||
Image("linphone")
|
||||
.renderingMode(.template)
|
||||
.foregroundColor(ThemeManager.shared.currentTheme.main500)
|
||||
Spacer()
|
||||
}
|
||||
Spacer()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
.ignoresSafeArea(.all)
|
||||
|
|
|
|||
|
|
@ -26,11 +26,11 @@ extension Color {
|
|||
static let black = Color(hex: "#000000")
|
||||
static let white = Color(hex: "#FFFFFF")
|
||||
|
||||
static let orangeMain700 = Color(hex: "#B72D00")
|
||||
static let orangeMain500 = Color(hex: "#FF5E00")
|
||||
static let orangeMain300 = Color(hex: "#FFB266")
|
||||
static let orangeMain100 = Color(hex: "#FFEACB")
|
||||
static let orangeMain100Alpha50 = Color(hex: "#80FFEACB")
|
||||
static let orangeMain700 = ThemeManager.shared.currentTheme.main700
|
||||
static let orangeMain500 = ThemeManager.shared.currentTheme.main500
|
||||
static let orangeMain300 = ThemeManager.shared.currentTheme.main300
|
||||
static let orangeMain100 = ThemeManager.shared.currentTheme.main100
|
||||
static let orangeMain100Alpha50 = ThemeManager.shared.currentTheme.main100Alpha50
|
||||
|
||||
static let grayMain2c800 = Color(hex: "#22334D")
|
||||
static let grayMain2c800Alpha65 = Color(hex: "#A622334D")
|
||||
|
|
|
|||
|
|
@ -38,6 +38,10 @@ extension Config {
|
|||
if _instance == nil {
|
||||
let factoryPath = FileUtil.bundleFilePath("linphonerc-factory")!
|
||||
_instance = Config.newForSharedCore(appGroupId: Config.appGroupName, configFilename: "linphonerc", factoryConfigFilename: factoryPath)!
|
||||
let themeMainColor = CorePreferences.themeMainColor
|
||||
DispatchQueue.main.async {
|
||||
ThemeManager.shared.applyTheme(named: themeMainColor)
|
||||
}
|
||||
}
|
||||
return _instance!
|
||||
}
|
||||
|
|
|
|||
126
Linphone/Utils/ThemeManager.swift
Normal file
126
Linphone/Utils/ThemeManager.swift
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
/*
|
||||
* Copyright (c) 2010-2025 Belledonne Communications SARL.
|
||||
*
|
||||
* This file is part of linphone-iphone
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import SwiftUI
|
||||
|
||||
|
||||
struct Theme {
|
||||
let name: String
|
||||
let main100: Color
|
||||
let main100Alpha50: Color
|
||||
let main300: Color
|
||||
let main500: Color
|
||||
let main700: Color
|
||||
}
|
||||
|
||||
class ThemeManager {
|
||||
|
||||
static let shared = ThemeManager()
|
||||
private let themeKey = "selectedTheme"
|
||||
var currentTheme: Theme
|
||||
|
||||
init () {
|
||||
let storedName = UserDefaults.standard.string(forKey: themeKey)
|
||||
currentTheme = themes[storedName ?? ""] ?? ThemeManager.orange
|
||||
}
|
||||
|
||||
func applyTheme(named name: String) {
|
||||
guard let theme = themes[name] else {
|
||||
return
|
||||
}
|
||||
self.currentTheme = theme
|
||||
UserDefaults.standard.setValue(name, forKey: self.themeKey)
|
||||
}
|
||||
|
||||
// MARK: - Theme Instances
|
||||
|
||||
let themes: [String: Theme] = [
|
||||
orange.name: orange,
|
||||
yellow.name: yellow,
|
||||
green.name: green,
|
||||
blue.name: blue,
|
||||
red.name: red,
|
||||
pink.name: pink,
|
||||
purple.name: purple
|
||||
]
|
||||
|
||||
static let orange = Theme(
|
||||
name: "orange",
|
||||
main100: Color(hex: "#FFEACB"),
|
||||
main100Alpha50: Color(hex: "#80FFEACB"),
|
||||
main300: Color(hex: "#FFB266"),
|
||||
main500: Color(hex: "#FF5E00"),
|
||||
main700: Color(hex: "#B72D00")
|
||||
)
|
||||
|
||||
static let yellow = Theme(
|
||||
name: "yellow",
|
||||
main100: Color(hex: "#FFF5D6"),
|
||||
main100Alpha50: Color(hex: "#80FFF5D6"),
|
||||
main300: Color(hex: "#FFE799"),
|
||||
main500: Color(hex: "#F5BC00"),
|
||||
main700: Color(hex: "#A37D00")
|
||||
)
|
||||
|
||||
static let green = Theme(
|
||||
name: "green",
|
||||
main100: Color(hex: "#DCF9E7"),
|
||||
main100Alpha50: Color(hex: "#80DCF9E7"),
|
||||
main300: Color(hex: "#A8F0C2"),
|
||||
main500: Color(hex: "#25D366"),
|
||||
main700: Color(hex: "#1C9C4B")
|
||||
)
|
||||
|
||||
static let blue = Theme(
|
||||
name: "blue",
|
||||
main100: Color(hex: "#D6F4FF"),
|
||||
main100Alpha50: Color(hex: "#80D6F4FF"),
|
||||
main300: Color(hex: "#99E4FF"),
|
||||
main500: Color(hex: "#00AFF0"),
|
||||
main700: Color(hex: "#0078A3")
|
||||
)
|
||||
|
||||
static let red = Theme(
|
||||
name: "red",
|
||||
main100: Color(hex: "#FBE1DA"),
|
||||
main100Alpha50: Color(hex: "#80FBE1DA"),
|
||||
main300: Color(hex: "#F5B53A"),
|
||||
main500: Color(hex: "#E14318"),
|
||||
main700: Color(hex: "#A63211")
|
||||
)
|
||||
|
||||
static let pink = Theme(
|
||||
name: "pink",
|
||||
main100: Color(hex: "#FFD6F1"),
|
||||
main100Alpha50: Color(hex: "#80FFD6F1"),
|
||||
main300: Color(hex: "#FF99DD"),
|
||||
main500: Color(hex: "#FF00A9"),
|
||||
main700: Color(hex: "#B8007A")
|
||||
)
|
||||
|
||||
static let purple = Theme(
|
||||
name: "purple",
|
||||
main100: Color(hex: "#FFD6FF"),
|
||||
main100Alpha50: Color(hex: "#80FFD6FF"),
|
||||
main300: Color(hex: "#FF99FF"),
|
||||
main500: Color(hex: "#800080"),
|
||||
main700: Color(hex: "#520052")
|
||||
)
|
||||
|
||||
}
|
||||
|
|
@ -47,6 +47,9 @@
|
|||
C62817302C1C3DCC00DBA646 /* AccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C628172F2C1C3DCC00DBA646 /* AccountModel.swift */; };
|
||||
C62817322C1C400A00DBA646 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C62817312C1C400A00DBA646 /* StringExtension.swift */; };
|
||||
C62817342C1C7C7400DBA646 /* HelpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C62817332C1C7C7400DBA646 /* HelpView.swift */; };
|
||||
C642277B2E8E4AC50094FEDC /* ThemeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C642277A2E8E4AC50094FEDC /* ThemeManager.swift */; };
|
||||
C642277C2E8E4D900094FEDC /* ThemeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C642277A2E8E4AC50094FEDC /* ThemeManager.swift */; };
|
||||
C642277D2E8E4E2B0094FEDC /* ColorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D717071D2AC5922E0037746F /* ColorExtension.swift */; };
|
||||
C67586AE2C09F23C002E77BF /* URLExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C67586AD2C09F23C002E77BF /* URLExtension.swift */; };
|
||||
C67586B02C09F247002E77BF /* URIHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C67586AF2C09F247002E77BF /* URIHandler.swift */; };
|
||||
C67586B52C09F617002E77BF /* SingleSignOnManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C67586B22C09F617002E77BF /* SingleSignOnManager.swift */; };
|
||||
|
|
@ -268,6 +271,7 @@
|
|||
C628172F2C1C3DCC00DBA646 /* AccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountModel.swift; sourceTree = "<group>"; };
|
||||
C62817312C1C400A00DBA646 /* StringExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = "<group>"; };
|
||||
C62817332C1C7C7400DBA646 /* HelpView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpView.swift; sourceTree = "<group>"; };
|
||||
C642277A2E8E4AC50094FEDC /* ThemeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeManager.swift; sourceTree = "<group>"; };
|
||||
C67586AD2C09F23C002E77BF /* URLExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLExtension.swift; sourceTree = "<group>"; };
|
||||
C67586AF2C09F247002E77BF /* URIHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URIHandler.swift; sourceTree = "<group>"; };
|
||||
C67586B22C09F617002E77BF /* SingleSignOnManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SingleSignOnManager.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -585,6 +589,7 @@
|
|||
D717071C2AC591EF0037746F /* Utils */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C642277A2E8E4AC50094FEDC /* ThemeManager.swift */,
|
||||
D738ACED2E857BEF0039F7D1 /* KeyboardResponder.swift */,
|
||||
D7DF8BE82E2104E5003A3BC7 /* EmojiPickerView.swift */,
|
||||
D703F7072DC8C5FF005B8F75 /* FilePicker.swift */,
|
||||
|
|
@ -1246,9 +1251,11 @@
|
|||
66FBFC482B83B8CC00BC6AB1 /* Log.swift in Sources */,
|
||||
6691CA7E2B839C2D00B2A7B8 /* NotificationService.swift in Sources */,
|
||||
66FBFC492B83BD2400BC6AB1 /* ConfigExtension.swift in Sources */,
|
||||
C642277D2E8E4E2B0094FEDC /* ColorExtension.swift in Sources */,
|
||||
66FBFC4A2B83BD3300BC6AB1 /* FileUtils.swift in Sources */,
|
||||
66FBFC4B2B83BD7B00BC6AB1 /* CoreExtension.swift in Sources */,
|
||||
D756C8172D352C5F00A58F2F /* CorePreferences.swift in Sources */,
|
||||
C642277C2E8E4D900094FEDC /* ThemeManager.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -1400,6 +1407,7 @@
|
|||
D7CEE0352B7A210300FD79B7 /* ConversationsView.swift in Sources */,
|
||||
D717071E2AC5922E0037746F /* ColorExtension.swift in Sources */,
|
||||
D71968922B86369D00DF4459 /* ChatBubbleView.swift in Sources */,
|
||||
C642277B2E8E4AC50094FEDC /* ThemeManager.swift in Sources */,
|
||||
D732C38C2D311D2500F78100 /* SettingsFragment.swift in Sources */,
|
||||
D78290B82ADD3910004AA85C /* ContactsFragment.swift in Sources */,
|
||||
D7DA67642ACCB31700E95002 /* ProfileModeFragment.swift in Sources */,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue