diff --git a/CoreDataStack/CoreData.xcdatamodeld/CoreData 2.xcdatamodel/contents b/CoreDataStack/CoreData.xcdatamodeld/CoreData 2.xcdatamodel/contents
index 670241f35..c26a0bdbb 100644
--- a/CoreDataStack/CoreData.xcdatamodeld/CoreData 2.xcdatamodel/contents
+++ b/CoreDataStack/CoreData.xcdatamodeld/CoreData 2.xcdatamodel/contents
@@ -191,7 +191,6 @@
-
@@ -289,7 +288,7 @@
-
+
diff --git a/CoreDataStack/Entity/Setting.swift b/CoreDataStack/Entity/Setting.swift
index 27971157f..94ee50959 100644
--- a/CoreDataStack/Entity/Setting.swift
+++ b/CoreDataStack/Entity/Setting.swift
@@ -13,7 +13,7 @@ public final class Setting: NSManagedObject {
@NSManaged public var domain: String
@NSManaged public var userID: String
- @NSManaged public var appearanceRaw: String
+// @NSManaged public var appearanceRaw: String
@NSManaged public var preferredTrueBlackDarkMode: Bool
@NSManaged public var preferredStaticAvatar: Bool
@NSManaged public var preferredStaticEmoji: Bool
@@ -41,17 +41,17 @@ extension Setting {
property: Property
) -> Setting {
let setting: Setting = context.insertObject()
- setting.appearanceRaw = property.appearanceRaw
+// setting.appearanceRaw = property.appearanceRaw
setting.domain = property.domain
setting.userID = property.userID
return setting
}
- public func update(appearanceRaw: String) {
- guard appearanceRaw != self.appearanceRaw else { return }
- self.appearanceRaw = appearanceRaw
- didUpdate(at: Date())
- }
+// public func update(appearanceRaw: String) {
+// guard appearanceRaw != self.appearanceRaw else { return }
+// self.appearanceRaw = appearanceRaw
+// didUpdate(at: Date())
+// }
public func update(preferredTrueBlackDarkMode: Bool) {
guard preferredTrueBlackDarkMode != self.preferredTrueBlackDarkMode else { return }
@@ -87,12 +87,16 @@ extension Setting {
public struct Property {
public let domain: String
public let userID: String
- public let appearanceRaw: String
+// public let appearanceRaw: String
- public init(domain: String, userID: String, appearanceRaw: String) {
+ public init(
+ domain: String,
+ userID: String
+// appearanceRaw: String
+ ) {
self.domain = domain
self.userID = userID
- self.appearanceRaw = appearanceRaw
+// self.appearanceRaw = appearanceRaw
}
}
}
diff --git a/Mastodon/Diffiable/Section/SettingsSection.swift b/Mastodon/Diffiable/Section/SettingsSection.swift
index 939fd4315..f59c13587 100644
--- a/Mastodon/Diffiable/Section/SettingsSection.swift
+++ b/Mastodon/Diffiable/Section/SettingsSection.swift
@@ -41,21 +41,17 @@ extension SettingsSection {
switch item {
case .appearance(let objectID):
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: SettingsAppearanceTableViewCell.self), for: indexPath) as! SettingsAppearanceTableViewCell
- managedObjectContext.performAndWait {
- let setting = managedObjectContext.object(with: objectID) as! Setting
- cell.update(with: setting.appearance)
- ManagedObjectObserver.observe(object: setting)
- .receive(on: DispatchQueue.main)
- .sink(receiveCompletion: { _ in
- // do nothing
- }, receiveValue: { [weak cell] change in
- guard let cell = cell else { return }
- guard case .update(let object) = change.changeType,
- let setting = object as? Setting else { return }
- cell.update(with: setting.appearance)
- })
- .store(in: &cell.disposeBag)
+ UserDefaults.shared.observe(\.customUserInterfaceStyle, options: [.initial, .new]) { [weak cell] defaults, _ in
+ guard let cell = cell else { return }
+ switch defaults.customUserInterfaceStyle {
+ case .unspecified: cell.update(with: .automatic)
+ case .dark: cell.update(with: .dark)
+ case .light: cell.update(with: .light)
+ @unknown default:
+ assertionFailure()
+ }
}
+ .store(in: &cell.observations)
cell.delegate = settingsAppearanceTableViewCellDelegate
return cell
case .notification(let objectID, let switchMode):
diff --git a/Mastodon/Extension/CoreDataStack/Setting.swift b/Mastodon/Extension/CoreDataStack/Setting.swift
index b995b80e3..4d1fc0ca5 100644
--- a/Mastodon/Extension/CoreDataStack/Setting.swift
+++ b/Mastodon/Extension/CoreDataStack/Setting.swift
@@ -11,9 +11,9 @@ import MastodonSDK
extension Setting {
- var appearance: SettingsItem.AppearanceMode {
- return SettingsItem.AppearanceMode(rawValue: appearanceRaw) ?? .automatic
- }
+// var appearance: SettingsItem.AppearanceMode {
+// return SettingsItem.AppearanceMode(rawValue: appearanceRaw) ?? .automatic
+// }
var activeSubscription: Subscription? {
return (subscriptions ?? Set())
diff --git a/Mastodon/Info.plist b/Mastodon/Info.plist
index 129f6bf10..c144fc6e7 100644
--- a/Mastodon/Info.plist
+++ b/Mastodon/Info.plist
@@ -2,6 +2,8 @@
+ UIViewControllerBasedStatusBarAppearance
+
CADisableMinimumFrameDurationOnPhone
CFBundleDevelopmentRegion
diff --git a/Mastodon/Scene/Settings/SettingsViewController.swift b/Mastodon/Scene/Settings/SettingsViewController.swift
index 3b4e522e6..04c343647 100644
--- a/Mastodon/Scene/Settings/SettingsViewController.swift
+++ b/Mastodon/Scene/Settings/SettingsViewController.swift
@@ -439,7 +439,7 @@ extension SettingsViewController {
.sink { _ in
// do nothing
} receiveValue: { _ in
- // do nohting
+ // do nothing
}
.store(in: &disposeBag)
}
@@ -451,16 +451,19 @@ extension SettingsViewController: SettingsAppearanceTableViewCellDelegate {
guard let dataSource = viewModel.dataSource else { return }
guard let indexPath = tableView.indexPath(for: cell) else { return }
let item = dataSource.itemIdentifier(for: indexPath)
- guard case let .appearance(settingObjectID) = item else { return }
+ guard case .appearance = item else { return }
- context.managedObjectContext.performChanges {
- let setting = self.context.managedObjectContext.object(with: settingObjectID) as! Setting
- setting.update(appearanceRaw: appearanceMode.rawValue)
+ switch appearanceMode {
+ case .automatic:
+ UserDefaults.shared.customUserInterfaceStyle = .unspecified
+ case .light:
+ UserDefaults.shared.customUserInterfaceStyle = .light
+ case .dark:
+ UserDefaults.shared.customUserInterfaceStyle = .dark
}
- .sink { _ in
- let feedbackGenerator = UIImpactFeedbackGenerator(style: .light)
- feedbackGenerator.impactOccurred()
- }.store(in: &disposeBag)
+
+ let feedbackGenerator = UIImpactFeedbackGenerator(style: .light)
+ feedbackGenerator.impactOccurred()
}
}
diff --git a/Mastodon/Scene/Settings/View/Cell/SettingsAppearanceTableViewCell.swift b/Mastodon/Scene/Settings/View/Cell/SettingsAppearanceTableViewCell.swift
index c4eb998e4..a4904136b 100644
--- a/Mastodon/Scene/Settings/View/Cell/SettingsAppearanceTableViewCell.swift
+++ b/Mastodon/Scene/Settings/View/Cell/SettingsAppearanceTableViewCell.swift
@@ -15,6 +15,7 @@ protocol SettingsAppearanceTableViewCellDelegate: AnyObject {
class SettingsAppearanceTableViewCell: UITableViewCell {
var disposeBag = Set()
+ var observations = Set()
static let spacing: CGFloat = 18
@@ -59,6 +60,7 @@ class SettingsAppearanceTableViewCell: UITableViewCell {
super.prepareForReuse()
disposeBag.removeAll()
+ observations.removeAll()
}
// MARK: - Methods
diff --git a/Mastodon/Service/SettingService.swift b/Mastodon/Service/SettingService.swift
index 1c030c519..79ed47abf 100644
--- a/Mastodon/Service/SettingService.swift
+++ b/Mastodon/Service/SettingService.swift
@@ -54,8 +54,7 @@ final class SettingService {
into: managedObjectContext,
property: Setting.Property(
domain: domain,
- userID: userID,
- appearanceRaw: SettingsItem.AppearanceMode.automatic.rawValue
+ userID: userID
)
)
} // end for
@@ -190,16 +189,16 @@ extension SettingService {
static func updatePreference(setting: Setting) {
// set appearance
- let userInterfaceStyle: UIUserInterfaceStyle = {
- switch setting.appearance {
- case .automatic: return .unspecified
- case .light: return .light
- case .dark: return .dark
- }
- }()
- if UserDefaults.shared.customUserInterfaceStyle != userInterfaceStyle {
- UserDefaults.shared.customUserInterfaceStyle = userInterfaceStyle
- }
+// let userInterfaceStyle: UIUserInterfaceStyle = {
+// switch setting.appearance {
+// case .automatic: return .unspecified
+// case .light: return .light
+// case .dark: return .dark
+// }
+// }()
+// if UserDefaults.shared.customUserInterfaceStyle != userInterfaceStyle {
+// UserDefaults.shared.customUserInterfaceStyle = userInterfaceStyle
+// }
// set theme
let themeName: ThemeName = setting.preferredTrueBlackDarkMode ? .system : .mastodon