Commit 8735169c authored by bshe@chromium.org's avatar bshe@chromium.org

This Cl saves user selected wallpaper information to local state. (For new wallpaper manager only).


BUG=118684
TEST=

Review URL: https://chromiumcodereview.appspot.com/10815047

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149259 0039d316-1c4b-4281-b951-d872f2087c98
parent e92ecf84
......@@ -99,10 +99,10 @@ class WallpaperSetWallpaperFunction::WallpaperDecoder
WallpaperSetWallpaperFunction::WallpaperDecoder*
WallpaperSetWallpaperFunction::wallpaper_decoder_;
WallpaperSetWallpaperFunction::WallpaperSetWallpaperFunction(){
WallpaperSetWallpaperFunction::WallpaperSetWallpaperFunction() {
}
WallpaperSetWallpaperFunction::~WallpaperSetWallpaperFunction(){
WallpaperSetWallpaperFunction::~WallpaperSetWallpaperFunction() {
}
bool WallpaperSetWallpaperFunction::RunImpl() {
......@@ -176,8 +176,11 @@ void WallpaperSetWallpaperFunction::SaveToFile() {
}
void WallpaperSetWallpaperFunction::SetDecodedWallpaper() {
ash::Shell::GetInstance()->desktop_background_controller()->
SetCustomWallpaper(wallpaper_, layout_);
chromeos::WallpaperManager* wallpaper_manager =
chromeos::WallpaperManager::Get();
wallpaper_manager->SetWallpaperFromImageSkia(wallpaper_, layout_);
wallpaper_manager->SaveUserWallpaperInfo(email_, file_name_, layout_,
chromeos::User::DEFAULT);
wallpaper_decoder_ = NULL;
SendResponse(true);
}
......@@ -8,19 +8,32 @@
#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 "chrome/common/pref_names.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;
// 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 +49,12 @@ WallpaperManager* WallpaperManager::Get() {
return g_wallpaper_manager;
}
// static
void WallpaperManager::RegisterPrefs(PrefService* local_state) {
local_state->RegisterDictionaryPref(prefs::kUsersWallpaperInfo,
PrefService::UNSYNCABLE_PREF);
}
WallpaperManager::WallpaperManager() : last_selected_user_("") {
system::TimezoneSettings::GetInstance()->AddObserver(this);
RestartTimer();
......@@ -62,18 +81,48 @@ void WallpaperManager::RestartTimer() {
}
}
void WallpaperManager::SaveUserWallpaperInfo(const std::string& username,
const 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.
if (UserManager::Get()->IsCurrentUserEphemeral())
return;
PrefService* local_state = g_browser_process->local_state();
DictionaryPrefUpdate wallpaper_update(local_state,
prefs::kUsersWallpaperInfo);
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->SetInteger(kWallpaperLayoutNodeName, layout);
wallpaper_properties->SetInteger(kWallpaperTypeNodeName, 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(
const gfx::ImageSkia& wallpaper,
ash::WallpaperLayout layout) {
ash::Shell::GetInstance()->desktop_background_controller()->
SetCustomWallpaper(wallpaper, layout);
}
void WallpaperManager::UserDeselected() {
......@@ -139,6 +188,12 @@ void WallpaperManager::BatchUpdateWallpaper() {
RestartTimer();
}
void WallpaperManager::OnWallpaperLoaded(ash::WallpaperLayout layout,
const UserImage& user_image) {
const SkBitmap& wallpaper = user_image.image();
SetWallpaperFromImageSkia(wallpaper, layout);
}
void WallpaperManager::SystemResumed() {
BatchUpdateWallpaper();
}
......
......@@ -10,12 +10,15 @@
#include "ash/desktop_background/desktop_background_resources.h"
#include "base/memory/scoped_ptr.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 "unicode/timezone.h"
class PrefService;
namespace chromeos {
// This class maintains wallpapers for users who have logged into this Chrome
......@@ -27,6 +30,9 @@ class WallpaperManager: public system::TimezoneSettings::Observer,
WallpaperManager();
// Registers wallpaper manager preferences.
static void RegisterPrefs(PrefService* local_state);
// Adds PowerManagerClient observer. It needs to be added after
// PowerManagerClient initialized.
void AddPowerManagerClientObserver();
......@@ -35,13 +41,22 @@ class WallpaperManager: public system::TimezoneSettings::Observer,
// Cancel any previous timer if any.
void RestartTimer();
// Saves |username| selected wallpaper information to local state.
void SaveUserWallpaperInfo(const std::string& username,
const std::string& file_name,
ash::WallpaperLayout layout,
User::WallpaperType type);
// 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 SetWallpaperFromFile(std::string email,
const std::string& path,
ash::WallpaperLayout layout);
void SetWallpaperFromFilePath(const std::string& path,
ash::WallpaperLayout layout);
// 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();
......@@ -58,6 +73,10 @@ class WallpaperManager: public system::TimezoneSettings::Observer,
// at 0am if chromeos device is on.
void BatchUpdateWallpaper();
// 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_;
......
......@@ -94,6 +94,7 @@
#include "chrome/browser/chromeos/customization_document.h"
#include "chrome/browser/chromeos/login/signed_settings_cache.h"
#include "chrome/browser/chromeos/login/user_manager.h"
#include "chrome/browser/chromeos/login/wallpaper_manager.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/chromeos/preferences.h"
#include "chrome/browser/chromeos/proxy_config_service_impl.h"
......@@ -180,6 +181,7 @@ void RegisterLocalState(PrefService* local_state) {
chromeos::UserManager::RegisterPrefs(local_state);
chromeos::ServicesCustomizationDocument::RegisterPrefs(local_state);
chromeos::signed_settings_cache::RegisterPrefs(local_state);
chromeos::WallpaperManager::RegisterPrefs(local_state);
chromeos::WizardController::RegisterPrefs(local_state);
policy::AutoEnrollmentClient::RegisterPrefs(local_state);
policy::DeviceStatusCollector::RegisterPrefs(local_state);
......
......@@ -1800,6 +1800,9 @@ const char kSyncSpareBootstrapToken[] = "sync.spare_bootstrap_token";
// A pref holding the value of the policy used to disable mounting of external
// storage for the user.
const char kExternalStorageDisabled[] = "hardware.external_storage_disabled";
// A dictionary that maps usernames to wallpaper properties.
const char kUsersWallpaperInfo[] = "user_wallpaper_info";
#endif
// Whether there is a Flash version installed that supports clearing LSO data.
......
......@@ -679,6 +679,7 @@ extern const char kDeviceActivityTimes[];
extern const char kDeviceLocation[];
extern const char kSyncSpareBootstrapToken[];
extern const char kExternalStorageDisabled[];
extern const char kUsersWallpaperInfo[];
#endif
extern const char kClearPluginLSODataEnabled[];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment