Index: chrome/browser/chromeos/login/wallpaper_manager.cc |
diff --git a/chrome/browser/chromeos/login/wallpaper_manager.cc b/chrome/browser/chromeos/login/wallpaper_manager.cc |
index 67fcafcf424dc596897979cb49e7567728834a42..78f7764a30ba9974cdcf1bdaec9d9868177f31c6 100644 |
--- a/chrome/browser/chromeos/login/wallpaper_manager.cc |
+++ b/chrome/browser/chromeos/login/wallpaper_manager.cc |
@@ -8,19 +8,34 @@ |
#include "ash/desktop_background/desktop_background_resources.h" |
#include "ash/shell.h" |
#include "base/logging.h" |
+#include "base/string_number_conversions.h" |
#include "base/time.h" |
#include "base/values.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/chromeos/cros_settings.h" |
-#include "chrome/browser/chromeos/login/user.h" |
#include "chrome/browser/chromeos/login/user_manager.h" |
#include "chrome/browser/chromeos/login/user_manager_impl.h" |
#include "chrome/browser/prefs/pref_service.h" |
+#include "chrome/browser/prefs/scoped_user_pref_update.h" |
#include "chromeos/dbus/dbus_thread_manager.h" |
#include "chromeos/dbus/power_manager_client.h" |
+#include "content/public/browser/browser_thread.h" |
+ |
+using content::BrowserThread; |
namespace { |
+ |
const int kWallpaperUpdateIntervalSec = 24 * 60 * 60; |
+ |
+// A dictionary that maps usernames to wallpaper properties. |
+const char kUsersWallpaperInfos[] = "UsersWallpaperInfos"; |
Nikita (slow)
2012/07/23 22:06:47
s/Infos/Info/
bshe
2012/07/24 16:21:10
Done.
|
+ |
+// Names of nodes with info about wallpaper. |
+const char kWallpaperDateNodeName[] = "date"; |
+const char kWallpaperLayoutNodeName[] = "layout"; |
+const char kWallpaperFileNodeName[] = "file"; |
+const char kWallpaperTypeNodeName[] = "type"; |
+ |
} // namespace |
namespace chromeos { |
@@ -36,6 +51,12 @@ WallpaperManager* WallpaperManager::Get() { |
return g_wallpaper_manager; |
} |
+// static |
+void WallpaperManager::RegisterPrefs(PrefService* local_state) { |
+ local_state->RegisterDictionaryPref(kUsersWallpaperInfos, |
+ PrefService::UNSYNCABLE_PREF); |
+} |
+ |
WallpaperManager::WallpaperManager() : last_selected_user_("") { |
system::TimezoneSettings::GetInstance()->AddObserver(this); |
RestartTimer(); |
@@ -62,18 +83,52 @@ void WallpaperManager::RestartTimer() { |
} |
} |
+void WallpaperManager::SaveUserWallpaperInfos(const std::string& username, |
+ std::string file_name, |
+ ash::WallpaperLayout layout, |
+ User::WallpaperType type) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ // Ephemeral users can not save data to local state. We just cache the index |
+ // in memory for them. |
Nikita (slow)
2012/07/23 22:06:47
Do those users have access to custom wallpaper UI?
bshe
2012/07/24 16:21:10
As far as I can remember, only guest user can't ac
Nikita (slow)
2012/07/24 17:06:54
But any Ephemeral user would exit here.
What would
|
+ if (UserManager::Get()->IsCurrentUserEphemeral()) { |
Nikita (slow)
2012/07/23 22:06:47
nit: could omit { }
bshe
2012/07/24 16:21:10
Done.
|
+ return; |
+ } |
+ |
+ PrefService* local_state = g_browser_process->local_state(); |
+ DictionaryPrefUpdate wallpaper_update(local_state, |
+ kUsersWallpaperInfos); |
+ |
+ base::DictionaryValue* wallpaper_properties = new base::DictionaryValue(); |
+ wallpaper_properties->SetString(kWallpaperDateNodeName, |
+ base::Int64ToString(base::Time::Now().LocalMidnight().ToInternalValue())); |
+ wallpaper_properties->SetString(kWallpaperFileNodeName, |
+ file_name); |
+ wallpaper_properties->Set(kWallpaperLayoutNodeName, |
+ new base::FundamentalValue(layout)); |
+ wallpaper_properties->Set(kWallpaperTypeNodeName, |
+ new base::FundamentalValue(type)); |
+ wallpaper_update->SetWithoutPathExpansion(username, wallpaper_properties); |
+} |
+ |
void WallpaperManager::SetLastSelectedUser( |
const std::string& last_selected_user) { |
last_selected_user_ = last_selected_user; |
} |
-void WallpaperManager::SetWallpaperFromFile(std::string email, |
- const std::string& path, |
- ash::WallpaperLayout layout) { |
+void WallpaperManager::SetWallpaperFromFilePath(const std::string& path, |
+ ash::WallpaperLayout layout) { |
image_loader_->Start( |
path, 0, false, |
- base::Bind(&WallpaperManager::OnCustomWallpaperLoaded, |
- base::Unretained(this), email, layout)); |
+ base::Bind(&WallpaperManager::OnWallpaperLoaded, |
+ base::Unretained(this), layout)); |
+} |
+ |
+void WallpaperManager::SetWallpaperFromImageSkia( |
+ ash::WallpaperLayout layout, |
+ const gfx::ImageSkia& wallpaper) { |
+ ash::Shell::GetInstance()->desktop_background_controller()-> |
+ SetCustomWallpaper(wallpaper, layout); |
} |
void WallpaperManager::UserDeselected() { |
@@ -91,14 +146,6 @@ WallpaperManager::~WallpaperManager() { |
system::TimezoneSettings::GetInstance()->RemoveObserver(this); |
} |
-void WallpaperManager::OnCustomWallpaperLoaded(const std::string& email, |
- ash::WallpaperLayout layout, |
- const UserImage& user_image) { |
- const SkBitmap& wallpaper = user_image.image(); |
- ash::Shell::GetInstance()->desktop_background_controller()-> |
- SetCustomWallpaper(wallpaper, layout); |
-} |
- |
void WallpaperManager::BatchUpdateWallpaper() { |
PrefService* local_state = g_browser_process->local_state(); |
UserManager* user_manager = UserManager::Get(); |
@@ -139,6 +186,12 @@ void WallpaperManager::BatchUpdateWallpaper() { |
RestartTimer(); |
} |
+void WallpaperManager::OnWallpaperLoaded(ash::WallpaperLayout layout, |
+ const UserImage& user_image) { |
+ const SkBitmap& wallpaper = user_image.image(); |
+ SetWallpaperFromImageSkia(layout, wallpaper); |
+} |
+ |
void WallpaperManager::SystemResumed() { |
BatchUpdateWallpaper(); |
} |