Index: ash/desktop_background/desktop_background_controller.cc |
diff --git a/ash/desktop_background/desktop_background_controller.cc b/ash/desktop_background/desktop_background_controller.cc |
index 7673f29aa6a48d9439e9397c4663105e09f001b3..8d10b47743b9c94d3d8b87a3feee8928feff96b2 100644 |
--- a/ash/desktop_background/desktop_background_controller.cc |
+++ b/ash/desktop_background/desktop_background_controller.cc |
@@ -14,6 +14,7 @@ |
#include "ash/display/display_manager.h" |
#include "ash/root_window_controller.h" |
#include "ash/shell.h" |
+#include "ash/shell_delegate.h" |
#include "ash/shell_factory.h" |
#include "ash/shell_window_ids.h" |
#include "ash/wm/root_window_layout_manager.h" |
@@ -154,14 +155,29 @@ class DesktopBackgroundController::WallpaperLoader |
DISALLOW_COPY_AND_ASSIGN(WallpaperLoader); |
}; |
+void DesktopBackgroundController::SetDefaultWallpaperPathFromCommandLine( |
+ base::CommandLine* command_line) { |
+ default_small_wallpaper_file_ = |
+ command_line->GetSwitchValuePath(switches::kAshDefaultWallpaperSmall); |
+ default_large_wallpaper_file_ = |
+ command_line->GetSwitchValuePath(switches::kAshDefaultWallpaperLarge); |
+ guest_default_small_wallpaper_file_ = |
+ command_line->GetSwitchValuePath(switches::kAshGuestWallpaperSmall); |
+ guest_default_large_wallpaper_file_ = |
+ command_line->GetSwitchValuePath(switches::kAshGuestWallpaperLarge); |
+} |
+ |
DesktopBackgroundController::DesktopBackgroundController() |
: command_line_for_testing_(NULL), |
locked_(false), |
desktop_background_mode_(BACKGROUND_NONE), |
current_default_wallpaper_resource_id_(-1), |
weak_ptr_factory_(this), |
- wallpaper_reload_delay_(kWallpaperReloadDelayMs) { |
+ wallpaper_reload_delay_(kWallpaperReloadDelayMs), |
+ customization_applied_(false) { |
Shell::GetInstance()->display_controller()->AddObserver(this); |
+ SetDefaultWallpaperPathFromCommandLine( |
+ base::CommandLine::ForCurrentProcess()); |
} |
DesktopBackgroundController::~DesktopBackgroundController() { |
@@ -175,6 +191,12 @@ gfx::ImageSkia DesktopBackgroundController::GetWallpaper() const { |
return gfx::ImageSkia(); |
} |
+void DesktopBackgroundController::set_command_line_for_testing( |
+ base::CommandLine* command_line) { |
+ command_line_for_testing_ = command_line; |
+ SetDefaultWallpaperPathFromCommandLine(command_line); |
+} |
+ |
void DesktopBackgroundController::AddObserver( |
DesktopBackgroundControllerObserver* observer) { |
observers_.AddObserver(observer); |
@@ -208,29 +230,49 @@ void DesktopBackgroundController::OnRootWindowAdded(aura::Window* root_window) { |
InstallDesktopController(root_window); |
} |
+void DesktopBackgroundController::CheckForCustomization() { |
+ if (customization_applied_) |
+ return; |
+ customization_applied_ = true; |
+ |
+ ShellDelegate* delegate = ash::Shell::GetInstance()->delegate(); |
+ if (delegate->ShouldUseCustomizedDefaultWallpaper()) { |
+ default_small_wallpaper_file_ = |
+ delegate->GetCustomizedWallpaperDefaultRescaledSmallFileName(); |
+ default_large_wallpaper_file_ = |
+ delegate->GetCustomizedWallpaperDefaultRescaledLargeFileName(); |
+ VLOG(1) << "Start with customized wallpapers: small_file_name = '" |
+ << default_small_wallpaper_file_.value() << "', large_file_name = '" |
+ << default_large_wallpaper_file_.value() << "'"; |
+ } |
+} |
+ |
bool DesktopBackgroundController::SetDefaultWallpaper(bool is_guest) { |
bshe
2014/03/24 21:30:49
SetDefaultWallpaper is only called in wallpaper_ma
Alexander Alekseev
2014/03/25 14:38:29
Done.
|
VLOG(1) << "SetDefaultWallpaper: is_guest=" << is_guest; |
const bool use_large = |
GetAppropriateResolution() == WALLPAPER_RESOLUTION_LARGE; |
- base::FilePath file_path; |
- WallpaperLayout file_layout = use_large ? WALLPAPER_LAYOUT_CENTER_CROPPED : |
- WALLPAPER_LAYOUT_CENTER; |
- int resource_id = use_large ? IDR_AURA_WALLPAPER_DEFAULT_LARGE : |
- IDR_AURA_WALLPAPER_DEFAULT_SMALL; |
- WallpaperLayout resource_layout = WALLPAPER_LAYOUT_TILE; |
+ CheckForCustomization(); |
- CommandLine* command_line = command_line_for_testing_ ? |
- command_line_for_testing_ : CommandLine::ForCurrentProcess(); |
- const char* switch_name = NULL; |
+ base::FilePath file_path; |
if (is_guest) { |
- switch_name = use_large ? switches::kAshGuestWallpaperLarge : |
- switches::kAshGuestWallpaperSmall; |
+ file_path = use_large ? guest_default_large_wallpaper_file_ |
+ : guest_default_small_wallpaper_file_; |
} else { |
- switch_name = use_large ? switches::kAshDefaultWallpaperLarge : |
- switches::kAshDefaultWallpaperSmall; |
+ file_path = use_large ? default_large_wallpaper_file_ |
+ : default_small_wallpaper_file_; |
} |
- file_path = command_line->GetSwitchValuePath(switch_name); |
+ return DoSetDefaultWallpaper(file_path, use_large); |
+} |
+ |
+bool DesktopBackgroundController::DoSetDefaultWallpaper( |
+ const base::FilePath& file_path, |
+ const bool use_large) { |
+ WallpaperLayout file_layout = |
+ use_large ? WALLPAPER_LAYOUT_CENTER_CROPPED : WALLPAPER_LAYOUT_CENTER; |
+ int resource_id = use_large ? IDR_AURA_WALLPAPER_DEFAULT_LARGE |
+ : IDR_AURA_WALLPAPER_DEFAULT_SMALL; |
+ WallpaperLayout resource_layout = WALLPAPER_LAYOUT_TILE; |
if (DefaultWallpaperIsAlreadyLoadingOrLoaded(file_path, resource_id)) { |
VLOG(1) << "Default wallpaper is already loading or loaded"; |
@@ -313,6 +355,25 @@ bool DesktopBackgroundController::MoveDesktopToUnlockedContainer() { |
GetBackgroundContainerId(false)); |
} |
+void DesktopBackgroundController::SetDefaultWallpaperPath( |
+ const base::FilePath& default_small_wallpaper_file, |
+ const base::FilePath& default_large_wallpaper_file) { |
+ customization_applied_ = true; |
+ const bool need_reset = DefaultWallpaperFileIsAlreadyLoadingOrLoaded( |
+ default_small_wallpaper_file_) || |
+ DefaultWallpaperFileIsAlreadyLoadingOrLoaded( |
+ default_large_wallpaper_file_); |
+ default_small_wallpaper_file_ = default_small_wallpaper_file; |
+ default_large_wallpaper_file_ = default_large_wallpaper_file; |
+ if (need_reset) { |
+ const bool use_large = |
+ GetAppropriateResolution() == WALLPAPER_RESOLUTION_LARGE; |
+ DoSetDefaultWallpaper((use_large ? default_large_wallpaper_file_ |
+ : default_small_wallpaper_file_), |
+ use_large); |
+ } |
+} |
+ |
void DesktopBackgroundController::OnDisplayConfigurationChanged() { |
gfx::Size max_display_size = GetMaxDisplaySizeInNative(); |
if (current_max_display_size_ != max_display_size) { |
@@ -340,6 +401,15 @@ bool DesktopBackgroundController::DefaultWallpaperIsAlreadyLoadingOrLoaded( |
current_default_wallpaper_resource_id_ == image_resource_id); |
} |
+bool DesktopBackgroundController::DefaultWallpaperFileIsAlreadyLoadingOrLoaded( |
+ const base::FilePath& image_file) const { |
+ return (default_wallpaper_loader_.get() && |
+ !default_wallpaper_loader_->IsCanceled() && |
+ default_wallpaper_loader_->file_path() == image_file) || |
+ (current_wallpaper_.get() && |
+ current_default_wallpaper_path_ == image_file); |
+} |
+ |
bool DesktopBackgroundController::CustomWallpaperIsAlreadyLoaded( |
const gfx::ImageSkia& image) const { |
return current_wallpaper_.get() && |