| // 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. |
| |
| #ifndef ASH_WALLPAPER_ONLINE_WALLPAPER_VARIANT_INFO_FETCHER_H_ |
| #define ASH_WALLPAPER_ONLINE_WALLPAPER_VARIANT_INFO_FETCHER_H_ |
| |
| #include <memory> |
| #include <string> |
| #include <vector> |
| |
| #include "ash/ash_export.h" |
| #include "ash/public/cpp/wallpaper/online_wallpaper_params.h" |
| #include "ash/public/cpp/wallpaper/wallpaper_info.h" |
| #include "base/functional/callback_forward.h" |
| #include "base/memory/raw_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "components/account_id/account_id.h" |
| |
| namespace backdrop { |
| class Image; |
| } |
| |
| namespace ash { |
| |
| class WallpaperControllerClient; |
| |
| // Resolves wallpaper variants for WallpaperController. These variants can exist |
| // from WallpaperInfo or can be fetched from the backdrop server. |
| class ASH_EXPORT OnlineWallpaperVariantInfoFetcher { |
| public: |
| OnlineWallpaperVariantInfoFetcher(); |
| |
| OnlineWallpaperVariantInfoFetcher(const OnlineWallpaperVariantInfoFetcher&) = |
| delete; |
| OnlineWallpaperVariantInfoFetcher& operator=( |
| const OnlineWallpaperVariantInfoFetcher&) = delete; |
| |
| ~OnlineWallpaperVariantInfoFetcher(); |
| |
| void SetClient(WallpaperControllerClient* client); |
| |
| // Callback for Fetch* methods which populates the |unit_id| and |variants| |
| // fields in OnlineWallpaperParams. |
| using FetchParamsCallback = |
| base::OnceCallback<void(std::optional<OnlineWallpaperParams>)>; |
| |
| // Fetches the wallpaper variants for |info| to produce a fully populated |
| // OnlineWallpaperParams in |callback|. |
| void FetchOnlineWallpaper(const AccountId& account_id, |
| const WallpaperInfo& info, |
| FetchParamsCallback callback); |
| |
| // Always fetches a new daily refresh wallpaper and calls |callback| with a |
| // fully populated OnlineWallpaperParams. |
| bool FetchDailyWallpaper(const AccountId& account_id, |
| const WallpaperInfo& info, |
| FetchParamsCallback callback); |
| |
| // Fetches the time of day wallpaper that has `unit_id` for the user with |
| // `account_id`. Callback is run after the operation completes. |
| void FetchTimeOfDayWallpaper(const AccountId& account_id, |
| uint64_t unit_id, |
| FetchParamsCallback callback); |
| |
| private: |
| // An internal representation of the partial information required to construct |
| // a complete OnlineWallpaperParams object as provided by the caller of |
| // Fetch*. |
| struct OnlineWallpaperRequest { |
| public: |
| OnlineWallpaperRequest(const AccountId& account_id, |
| const std::string& collection_id, |
| WallpaperLayout layout, |
| bool daily_refresh_enabled); |
| OnlineWallpaperRequest(const OnlineWallpaperRequest&) = delete; |
| OnlineWallpaperRequest& operator=(const OnlineWallpaperRequest&) = delete; |
| ~OnlineWallpaperRequest(); |
| |
| AccountId account_id; |
| std::string collection_id; |
| WallpaperLayout layout; |
| bool daily_refresh_enabled; |
| }; |
| |
| // Handles the response for a single random image in a collection and proceeds |
| // to fetch the rest of the collection. |
| void OnSingleFetch(std::unique_ptr<OnlineWallpaperRequest> request, |
| FetchParamsCallback callback, |
| bool success, |
| const backdrop::Image& image); |
| |
| // Finishes variants fetch by populating the remaining fields for |
| // OnlineWallpaperParams in |callback|. Combines data from |request| with |
| // |images| and the matching variant in |images| for |location|. |
| void FindAndSetOnlineWallpaperVariants( |
| std::unique_ptr<OnlineWallpaperRequest> request, |
| const std::string& location, |
| FetchParamsCallback callback, |
| bool success, |
| const std::vector<backdrop::Image>& images); |
| |
| // Used as callback when the time of day wallpapers are fetched. |
| void OnTimeOfDayWallpapersFetched( |
| std::unique_ptr<OnlineWallpaperRequest> request, |
| uint64_t unit_id, |
| FetchParamsCallback callback, |
| bool success, |
| const std::vector<backdrop::Image>& images); |
| |
| raw_ptr<WallpaperControllerClient> wallpaper_controller_client_ = |
| nullptr; // not owned |
| |
| base::WeakPtrFactory<OnlineWallpaperVariantInfoFetcher> weak_factory_{this}; |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_WALLPAPER_ONLINE_WALLPAPER_VARIANT_INFO_FETCHER_H_ |