Container_UserSync.swift [plain text]
import Foundation
// Apple TVs and watches have no UI to enable or disable this status.
// So, help them out by ignoring all efforts.
extension TPPBPeerStableInfo_UserControllableViewStatus {
func sanitizeForPlatform(permanentInfo: TPPeerPermanentInfo) -> TPPBPeerStableInfo_UserControllableViewStatus {
// Unknown is the unknown for any platform
if self == .UNKNOWN {
return .UNKNOWN
}
if permanentInfo.modelID.hasPrefix("AppleTV") ||
permanentInfo.modelID.hasPrefix("AudioAccessory") {
// Apple TVs, and HomePods don't have UI to set this bit. So, they should always sync the
// user-controlled views to which they have access.
//
// Some watches don't have UI to set the bit, but some do.
//
// Note that we want this sanitization behavior to be baked into the local OS, which is what owns
// the UI software, and not in the Policy, which can change.
return .FOLLOWING
} else {
// All other platforms can choose their own fate
return self
}
}
}
extension StableChanges {
static func change(viewStatus: TPPBPeerStableInfo_UserControllableViewStatus?) -> StableChanges? {
if viewStatus == nil {
return nil
}
return StableChanges(deviceName: nil,
serialNumber: nil,
osVersion: nil,
policyVersion: nil,
policySecrets: nil,
setSyncUserControllableViews: viewStatus)
}
}