Skip to content

Commit

Permalink
hopefully fix isShieldActiveWithSelection
Browse files Browse the repository at this point in the history
  • Loading branch information
robertherber committed Feb 14, 2025
1 parent dda0025 commit ac56216
Showing 1 changed file with 39 additions and 17 deletions.
56 changes: 39 additions & 17 deletions ios/ReactNativeDeviceActivityModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,31 @@ class NativeEventObserver {
}
}

@available(iOS 15.0, *)
func tokenSetsAreEqual<T>(
tokenSetOne: Set<Token<T>>?,
tokenSetTwo: Set<Token<T>>
) -> Bool {
if tokenSetOne == tokenSetTwo {
return true
}

if let tokenSetOne = tokenSetOne {
if tokenSetOne.count == tokenSetTwo.count {
if tokenSetOne.count == 0 {
return true
}
return tokenSetOne.allSatisfy { token in
tokenSetTwo.contains(token)
}
}
} else {
return tokenSetTwo.isEmpty
}

return false
}

@available(iOS 15.0, *)
public class ReactNativeDeviceActivityModule: Module {

Expand Down Expand Up @@ -485,33 +510,30 @@ public class ReactNativeDeviceActivityModule: Module {
let selection = deserializeFamilyActivitySelection(
familyActivitySelectionStr: familyActivitySelectionStr)

let areAnyApplicationsEqual =
store.shield.applications?.map({ token in
token
})
== selection.applicationTokens.map({ token in
token
})
let areAnyWebDomainsEqual =
store.shield.webDomains?.map({ token in
token
})
== selection.webDomainTokens.map({ token in
token
})
let shield = store.shield

let areApplicationsEqual = tokenSetsAreEqual(
tokenSetOne: shield.applications,
tokenSetTwo: selection.applicationTokens
)

let areWebDomainsEqual = tokenSetsAreEqual(
tokenSetOne: shield.webDomains,
tokenSetTwo: selection.webDomainTokens
)

let appCategoryPolicy = ShieldSettings.ActivityCategoryPolicy<Application>.specific(
selection.categoryTokens, except: Set())

let areAnyApplicationCategoriesEqual = store.shield.applicationCategories == appCategoryPolicy
let areAnyApplicationCategoriesEqual = shield.applicationCategories == appCategoryPolicy

let webDomainCategoryPolicy = ShieldSettings.ActivityCategoryPolicy<WebDomain>.specific(
selection.categoryTokens, except: Set())

let areAnyWebDomainCategoriesEqual =
webDomainCategoryPolicy == store.shield.webDomainCategories
webDomainCategoryPolicy == shield.webDomainCategories

return areAnyApplicationsEqual && areAnyWebDomainsEqual && areAnyApplicationCategoriesEqual
return areApplicationsEqual && areWebDomainsEqual && areAnyApplicationCategoriesEqual
&& areAnyWebDomainCategoriesEqual
}

Expand Down

0 comments on commit ac56216

Please sign in to comment.