Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_WALLPAPER_MANAGER_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_WALLPAPER_MANAGER_H_ |
| 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_WALLPAPER_MANAGER_H_ | 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_WALLPAPER_MANAGER_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "ash/desktop_background/desktop_background_resources.h" | |
| 11 #include "base/memory/weak_ptr.h" | |
| 12 #include "base/time.h" | |
| 10 #include "base/timer.h" | 13 #include "base/timer.h" |
| 14 #include "chrome/browser/chromeos/login/user.h" | |
| 15 #include "chrome/browser/chromeos/login/wallpaper_loader.h" | |
| 11 #include "chrome/browser/chromeos/power/resume_observer.h" | 16 #include "chrome/browser/chromeos/power/resume_observer.h" |
| 12 #include "chrome/browser/chromeos/system/timezone_settings.h" | 17 #include "chrome/browser/chromeos/system/timezone_settings.h" |
| 18 #include "chrome/browser/ui/webui/options2/chromeos/set_wallpaper_options_handle r.h" | |
| 19 #include "content/public/browser/notification_observer.h" | |
| 20 #include "content/public/browser/notification_registrar.h" | |
| 13 #include "unicode/timezone.h" | 21 #include "unicode/timezone.h" |
| 14 | 22 |
| 15 namespace chromeos { | 23 namespace chromeos { |
| 16 | 24 |
| 25 class UserImage; | |
| 26 | |
| 17 // This class maintains wallpapers for users who have logged into this Chrome | 27 // This class maintains wallpapers for users who have logged into this Chrome |
| 18 // OS device. | 28 // OS device. |
| 19 class WallpaperManager: public system::TimezoneSettings::Observer, | 29 class WallpaperManager: public system::TimezoneSettings::Observer, |
| 20 public chromeos::ResumeObserver { | 30 public chromeos::ResumeObserver, |
| 31 public content::NotificationObserver { | |
| 21 public: | 32 public: |
| 22 static WallpaperManager* Get(); | 33 static WallpaperManager* Get(); |
| 23 | 34 |
| 24 WallpaperManager(); | 35 WallpaperManager(); |
| 25 | 36 |
| 26 // Adds PowerManagerClient observer. It needs to be added after | 37 // Adds PowerManagerClient observer. It needs to be added after |
| 27 // PowerManagerClient initialized. | 38 // PowerManagerClient initialized. |
| 28 void AddPowerManagerClientObserver(); | 39 void AddPowerManagerClientObserver(); |
| 29 | 40 |
| 41 // Caches |email|'s wallpaper to memory if it is custom wallpaper. | |
| 42 void CacheIfCustomWallpaper(const std::string& email); | |
| 43 | |
| 44 // Loads wallpaper asynchronously if the current wallpaper is not the | |
| 45 // wallpaper of logged in user. | |
| 46 void EnsureLoggedInUserWallpaperLoaded(); | |
| 47 | |
| 48 // Fetches |email|'s wallpaper from local disk. | |
| 49 void FetchCustomWallpaper(const std::string& email); | |
| 50 | |
| 51 // Gets encoded custom wallpaper from cache. Returns true if success. | |
| 52 bool GetCustomWallpaperFromCache(const std::string& email, | |
| 53 SkBitmap* wallpaper); | |
| 54 | |
| 55 // Gets the thumbnail of custom wallpaper from cache. | |
| 56 SkBitmap GetCustomWallpaperThumbnail(const std::string& email); | |
| 57 | |
| 58 // Sets |type| and |index| to the value saved in local state for logged in | |
| 59 // user. | |
| 60 void GetLoggedInUserWallpaperProperties(User::WallpaperType* type, | |
| 61 int* index, | |
| 62 base::Time* last_modification_date); | |
| 63 | |
| 64 // Initializes wallpaper. If logged in, loads user's wallpaper. If not logged | |
| 65 // in, uses a solid color wallpaper. If logged in as a stub user, uses an | |
| 66 // empty wallpaper. | |
| 67 void InitializeWallpaper(); | |
| 68 | |
| 69 // NotificationObserver overrides: | |
| 70 virtual void Observe(int type, | |
| 71 const content::NotificationSource& source, | |
| 72 const content::NotificationDetails& details) OVERRIDE; | |
| 73 | |
| 30 // Starts a one shot timer which calls BatchUpdateWallpaper at next midnight. | 74 // Starts a one shot timer which calls BatchUpdateWallpaper at next midnight. |
| 31 // Cancel any previous timer if any. | 75 // Cancel any previous timer if any. |
| 32 void RestartTimer(); | 76 void RestartTimer(); |
| 33 | 77 |
| 78 // Tries to load user image from disk; if successful, sets it for the user, | |
| 79 // and updates Local State. | |
| 80 void SetUserWallpaperFromFile(const std::string& username, | |
| 81 const FilePath& path, | |
| 82 ash::WallpaperLayout layout, | |
| 83 base::WeakPtr<WallpaperDelegate> delegate); | |
| 84 | |
| 85 // Set |email|'s wallpaper |type|, |index| and local date to local state. | |
| 86 void SaveUserWallpaperProperties(const std::string& email, | |
| 87 User::WallpaperType type, | |
| 88 int index); | |
| 89 | |
| 90 // Sets one of the default wallpapers for the specified user and saves this | |
| 91 // settings in local state. | |
| 92 void SetInitialUserWallpaper(const std::string& username); | |
| 93 | |
| 34 // Sets last selected user on user pod row. | 94 // Sets last selected user on user pod row. |
| 35 void SetLastSelectedUser(const std::string& last_selected_user); | 95 void SetLastSelectedUser(const std::string& last_selected_user); |
| 36 | 96 |
| 37 // User was deselected at login screen, reset wallpaper if needed. | 97 // User was deselected at login screen, reset wallpaper if needed. |
| 38 void UserDeselected(); | 98 void UserDeselected(); |
| 39 | 99 |
| 100 // User |email| was selected at login screen, load wallpaper. | |
| 101 void UserSelected(const std::string& email); | |
| 102 | |
| 40 private: | 103 private: |
| 41 virtual ~WallpaperManager(); | 104 virtual ~WallpaperManager(); |
| 42 | 105 |
| 43 // Change the wallpapers for users who choose DAILY wallpaper type. Updates | 106 // Change the wallpapers for users who choose DAILY wallpaper type. Updates |
| 44 // current wallpaper if it changed. This function should be called at exactly | 107 // current wallpaper if it changed. This function should be called at exactly |
| 45 // at 0am if chromeos device is on. | 108 // at 0am if chromeos device is on. |
| 46 void BatchUpdateWallpaper(); | 109 void BatchUpdateWallpaper(); |
| 47 | 110 |
| 111 // Caches the decoded wallpaper to memory. | |
| 112 void CacheCallback(const std::string& email, const SkBitmap& wallpaper); | |
|
Ivan Korotkov
2012/07/27 23:02:02
Please remove 'Callback' sufffix from names. Somet
bshe
2012/07/31 14:27:54
Done.
| |
| 113 | |
| 114 // Generates a 128x80 thumbnail and caches it. | |
| 115 void CacheThumbnail(const std::string& email, const SkBitmap& wallpaper); | |
| 116 | |
| 117 // Sets wallpaper to the decoded wallpaper. | |
| 118 void FetchCallback(const std::string& email, | |
| 119 ash::WallpaperLayout layout, | |
| 120 const SkBitmap& wallpaper); | |
| 121 | |
| 122 // Generates a 128x80 thumbnail and notifies delegate when ready. | |
| 123 void GenerateUserWallpaperThumbnail(const std::string& email, | |
| 124 User::WallpaperType type, | |
| 125 base::WeakPtr<WallpaperDelegate> delegate, | |
| 126 const SkBitmap& wallpaper); | |
| 127 | |
| 128 // Get wallpaper |type|, |index| and |last_modification_date| of |email| | |
| 129 // from local state. | |
| 130 void GetUserWallpaperProperties(const std::string& email, | |
| 131 User::WallpaperType* type, | |
| 132 int* index, | |
| 133 base::Time* last_modification_date); | |
| 134 | |
| 135 // Loads the custom wallpaper of user |email|. | |
| 136 void LoadCustomWallpaperFromFile(const std::string& email, | |
| 137 const LoadedCallback& loaded_cb); | |
| 138 | |
| 139 // Updates the custom wallpaper thumbnail in wallpaper picker UI. | |
| 140 void OnThumbnailUpdated(base::WeakPtr<WallpaperDelegate> delegate); | |
| 141 | |
| 142 // Saves wallpaper to file, post task to generate thumbnail and updates local | |
| 143 // state preferences. | |
| 144 void SetCallback(const std::string& username, | |
| 145 ash::WallpaperLayout layout, | |
| 146 User::WallpaperType type, | |
| 147 base::WeakPtr<WallpaperDelegate> delegate, | |
| 148 const SkBitmap& wallpaper); | |
| 149 | |
| 48 // Overridden from chromeos::ResumeObserver | 150 // Overridden from chromeos::ResumeObserver |
| 49 virtual void SystemResumed() OVERRIDE; | 151 virtual void SystemResumed() OVERRIDE; |
| 50 | 152 |
| 51 // Overridden from system::TimezoneSettings::Observer. | 153 // Overridden from system::TimezoneSettings::Observer. |
| 52 virtual void TimezoneChanged(const icu::TimeZone& timezone) OVERRIDE; | 154 virtual void TimezoneChanged(const icu::TimeZone& timezone) OVERRIDE; |
| 53 | 155 |
| 156 // Loads user wallpaper from its file. | |
| 157 scoped_refptr<WallpaperLoader> wallpaper_loader_; | |
| 158 | |
| 159 // Stores logged in user wallpaper type. | |
| 160 User::WallpaperType current_user_wallpaper_type_; | |
| 161 | |
| 162 // Stores logged in user wallpaper index. | |
|
Ivan Korotkov
2012/07/27 23:02:02
Please remove word 'stores' from field description
bshe
2012/07/31 14:27:54
On 2012/07/27 23:02:02, Ivan Korotkov wrote:
> Ple
| |
| 163 int current_user_wallpaper_index_; | |
| 164 | |
| 165 typedef std::map<std::string, SkBitmap> CustomWallpaperMap; | |
|
Ivan Korotkov
2012/07/27 23:02:02
typedefs go before methods and fields.
bshe
2012/07/31 14:27:54
Done.
| |
| 166 | |
| 167 // Caches custom wallpapers of users. Accessed only on UI thread. | |
| 168 CustomWallpaperMap custom_wallpaper_cache_; | |
| 169 | |
| 170 CustomWallpaperMap custom_wallpaper_thumbnail_cache_; | |
| 171 | |
| 54 // The last selected user on user pod row. | 172 // The last selected user on user pod row. |
| 55 std::string last_selected_user_; | 173 std::string last_selected_user_; |
| 56 | 174 |
| 175 base::WeakPtrFactory<WallpaperManager> weak_factory_; | |
| 176 | |
| 177 content::NotificationRegistrar registrar_; | |
| 178 | |
| 57 base::OneShotTimer<WallpaperManager> timer_; | 179 base::OneShotTimer<WallpaperManager> timer_; |
| 58 | 180 |
| 59 DISALLOW_COPY_AND_ASSIGN(WallpaperManager); | 181 DISALLOW_COPY_AND_ASSIGN(WallpaperManager); |
| 60 }; | 182 }; |
| 61 | 183 |
| 62 } // namespace chromeos | 184 } // namespace chromeos |
| 63 | 185 |
| 64 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_WALLPAPER_MANAGER_H_ | 186 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_WALLPAPER_MANAGER_H_ |
| OLD | NEW |