chromium/ios/chrome/browser/widget_kit/model/widget_timelines_updater.swift

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import Foundation
import WidgetKit

/// Helper class to update timelines for WidgetKit widgets.
public final class WidgetTimelinesUpdater: NSObject {
  /// The queue onto which time-consuming work is dispatched.
  private static let queue = DispatchQueue(label: "com.google.chrome.ios.WidgetTimelinesUpdater")

  /// Updates timelines for all shared widgets.
  ///
  /// Whether or not widgets are actually updated depends on many factors
  /// governed by an OS level budgeting system. Widgets are guaranteed
  /// to be updated if the main app is in the foreground.
  ///
  /// This method is safe to call from any thread.
  @objc(reloadAllTimelines)
  public static func reloadAllTimelines() {
    queue.async {
      WidgetCenter.shared.reloadAllTimelines()
    }
  }

  /// Updates timelines of a widget kind.
  @objc(reloadTimelinesOfKind:)
  public static func reloadTimelines(ofKind kind: String) {
    queue.async {
      WidgetCenter.shared.reloadTimelines(ofKind: kind)
    }
  }
}