Index: chrome/browser/chromeos/login/wallpaper_manager.h |
diff --git a/chrome/browser/chromeos/login/wallpaper_manager.h b/chrome/browser/chromeos/login/wallpaper_manager.h |
index 450d718567cb17da6430742ecb8b0fac34d158a1..603fb55c844c3192a2bc32d126324eb8b10718aa 100644 |
--- a/chrome/browser/chromeos/login/wallpaper_manager.h |
+++ b/chrome/browser/chromeos/login/wallpaper_manager.h |
@@ -8,23 +8,31 @@ |
#include <string> |
#include "ash/desktop_background/desktop_background_resources.h" |
-#include "base/memory/scoped_ptr.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/time.h" |
#include "base/timer.h" |
#include "chrome/browser/chromeos/login/user.h" |
#include "chrome/browser/chromeos/login/user_image.h" |
#include "chrome/browser/chromeos/login/user_image_loader.h" |
-#include "chrome/browser/chromeos/power/resume_observer.h" |
#include "chrome/browser/chromeos/system/timezone_settings.h" |
+#include "chrome/browser/ui/webui/options2/chromeos/set_wallpaper_options_handler.h" |
+#include "chromeos/dbus/power_manager_client.h" |
+#include "content/public/browser/notification_observer.h" |
+#include "content/public/browser/notification_registrar.h" |
+#include "ui/gfx/image/image_skia.h" |
#include "unicode/timezone.h" |
class PrefService; |
namespace chromeos { |
+class UserImage; |
+ |
// This class maintains wallpapers for users who have logged into this Chrome |
// OS device. |
class WallpaperManager: public system::TimezoneSettings::Observer, |
- public chromeos::ResumeObserver { |
+ public chromeos::PowerManagerClient::Observer, |
+ public content::NotificationObserver { |
public: |
static WallpaperManager* Get(); |
@@ -33,14 +41,67 @@ class WallpaperManager: public system::TimezoneSettings::Observer, |
// Registers wallpaper manager preferences. |
static void RegisterPrefs(PrefService* local_state); |
- // Adds PowerManagerClient observer. It needs to be added after |
- // PowerManagerClient initialized. |
- void AddPowerManagerClientObserver(); |
+ // Adds PowerManagerClient and TimeZoneSettings observers. It needs to be |
+ // added after PowerManagerClient initialized. |
+ void AddObservers(); |
+ |
+ // Caches |email|'s wallpaper to memory if it is custom wallpaper. |
+ void CacheIfCustomWallpaper(const std::string& email); |
+ |
+ // Loads wallpaper asynchronously if the current wallpaper is not the |
+ // wallpaper of logged in user. |
+ void EnsureLoggedInUserWallpaperLoaded(); |
+ |
+ // Fetches |email|'s wallpaper from local disk. |
+ void FetchCustomWallpaper(const std::string& email); |
+ |
+ // Gets encoded custom wallpaper from cache. Returns true if success. |
+ bool GetCustomWallpaperFromCache(const std::string& email, |
+ gfx::ImageSkia* wallpaper); |
+ |
+ // Returns wallpaper/thumbnail filepath for the given user. |
+ FilePath GetWallpaperPathForUser(const std::string& username, |
+ bool is_thumbnail); |
+ |
+ // Gets the thumbnail of custom wallpaper from cache. |
+ gfx::ImageSkia GetCustomWallpaperThumbnail(const std::string& email); |
+ |
+ // Sets |type| and |index| to the value saved in local state for logged in |
+ // user. |
+ void GetLoggedInUserWallpaperProperties(User::WallpaperType* type, |
+ int* index, |
+ base::Time* last_modification_date); |
+ |
+ // Initializes wallpaper. If logged in, loads user's wallpaper. If not logged |
+ // in, uses a solid color wallpaper. If logged in as a stub user, uses an |
+ // empty wallpaper. |
+ void InitializeWallpaper(); |
+ |
+ // NotificationObserver overrides: |
+ virtual void Observe(int type, |
+ const content::NotificationSource& source, |
+ const content::NotificationDetails& details) OVERRIDE; |
// Starts a one shot timer which calls BatchUpdateWallpaper at next midnight. |
// Cancel any previous timer if any. |
void RestartTimer(); |
+ // Tries to load user image from disk; if successful, sets it for the user, |
+ // and updates Local State. |
+ void SetUserWallpaperFromFile(const std::string& username, |
+ const FilePath& path, |
+ ash::WallpaperLayout layout, |
+ base::WeakPtr<WallpaperDelegate> delegate); |
+ |
+ // Set |email|'s wallpaper |type|, |index| and local date to local state. |
+ void SaveUserWallpaperProperties(const std::string& email, |
+ User::WallpaperType type, |
+ int index); |
+ |
+ // Sets one of the default wallpapers for the specified user and saves this |
+ // settings in local state. |
+ void SetInitialUserWallpaper(const std::string& username); |
+ |
// Saves |username| selected wallpaper information to local state. |
void SaveUserWallpaperInfo(const std::string& username, |
const std::string& file_name, |
@@ -50,45 +111,99 @@ class WallpaperManager: public system::TimezoneSettings::Observer, |
// Sets last selected user on user pod row. |
void SetLastSelectedUser(const std::string& last_selected_user); |
- // Sets wallpaper to the image file |path| points to. |
- void SetWallpaperFromFilePath(const std::string& path, |
- ash::WallpaperLayout layout); |
+ // Sets |email|'s wallpaper. |
+ void SetUserWallpaper(const std::string& email); |
// Sets wallpaper to |wallpaper|. |
void SetWallpaperFromImageSkia(const gfx::ImageSkia& wallpaper, |
ash::WallpaperLayout layout); |
// User was deselected at login screen, reset wallpaper if needed. |
- void UserDeselected(); |
+ void OnUserDeselected(); |
+ |
+ // User |email| was selected at login screen, load wallpaper. |
+ void OnUserSelected(const std::string& email); |
private: |
- virtual ~WallpaperManager(); |
+ typedef std::map<std::string, gfx::ImageSkia> CustomWallpaperMap; |
- void OnCustomWallpaperLoaded(const std::string& email, |
- ash::WallpaperLayout layout, |
- const UserImage& user_image); |
+ virtual ~WallpaperManager(); |
// Change the wallpapers for users who choose DAILY wallpaper type. Updates |
// current wallpaper if it changed. This function should be called at exactly |
// at 0am if chromeos device is on. |
void BatchUpdateWallpaper(); |
+ // Caches the decoded wallpaper to memory. |
+ void CacheWallpaper(const std::string& email, const UserImage& wallpaper); |
+ |
+ // Generates a 128x80 thumbnail and caches it. |
+ void CacheThumbnail(const std::string& email, |
+ const gfx::ImageSkia& wallpaper); |
+ |
+ // Sets wallpaper to the decoded wallpaper. |
+ void FetchWallpaper(const std::string& email, |
+ ash::WallpaperLayout layout, |
+ const UserImage& wallpaper); |
+ |
+ // Generates a 128x80 thumbnail and notifies delegate when ready. |
+ void GenerateUserWallpaperThumbnail(const std::string& email, |
+ User::WallpaperType type, |
+ base::WeakPtr<WallpaperDelegate> delegate, |
+ const gfx::ImageSkia& wallpaper); |
+ |
+ // Get wallpaper |type|, |index| and |last_modification_date| of |email| |
+ // from local state. |
+ void GetUserWallpaperProperties(const std::string& email, |
+ User::WallpaperType* type, |
+ int* index, |
+ base::Time* last_modification_date); |
+ |
+ // Updates the custom wallpaper thumbnail in wallpaper picker UI. |
+ void OnThumbnailUpdated(base::WeakPtr<WallpaperDelegate> delegate); |
+ |
+ // Saves wallpaper to |path|. |
+ void SaveWallpaper(const std::string& path, const UserImage& wallpaper); |
+ |
+ // Saves wallpaper to file, post task to generate thumbnail and updates local |
+ // state preferences. |
+ void SetWallpaper(const std::string& username, |
+ ash::WallpaperLayout layout, |
+ User::WallpaperType type, |
+ base::WeakPtr<WallpaperDelegate> delegate, |
+ const UserImage& wallpaper); |
+ |
// Sets wallpaper to image in |user_image| with |layout|. |
void OnWallpaperLoaded(ash::WallpaperLayout layout, |
const UserImage& user_image); |
- // Loads user image from its file. |
- scoped_refptr<UserImageLoader> image_loader_; |
- |
// Overridden from chromeos::ResumeObserver |
virtual void SystemResumed() OVERRIDE; |
// Overridden from system::TimezoneSettings::Observer. |
virtual void TimezoneChanged(const icu::TimeZone& timezone) OVERRIDE; |
+ // Loads user wallpaper from its file. |
+ scoped_refptr<UserImageLoader> wallpaper_loader_; |
+ |
+ // Logged-in user wallpaper type. |
+ User::WallpaperType current_user_wallpaper_type_; |
+ |
+ // Logged-in user wallpaper index. |
+ int current_user_wallpaper_index_; |
+ |
+ // Caches custom wallpapers of users. Accessed only on UI thread. |
+ CustomWallpaperMap custom_wallpaper_cache_; |
+ |
+ CustomWallpaperMap custom_wallpaper_thumbnail_cache_; |
+ |
// The last selected user on user pod row. |
std::string last_selected_user_; |
+ base::WeakPtrFactory<WallpaperManager> weak_factory_; |
+ |
+ content::NotificationRegistrar registrar_; |
+ |
base::OneShotTimer<WallpaperManager> timer_; |
DISALLOW_COPY_AND_ASSIGN(WallpaperManager); |