Chromium Code Reviews| Index: chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc |
| diff --git a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc |
| index 4c2aa1187891da7962ede8d519361e2666858b67..18078cc2b93dcd1bd8e601c64e612a832ea9bab4 100644 |
| --- a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc |
| +++ b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc |
| @@ -12,6 +12,10 @@ |
| #include "chrome/browser/ui/ash/multi_user/multi_user_util.h" |
| #include "chrome/common/pref_names.h" |
| #include "components/prefs/pref_service.h" |
| +#include "ui/app_list/app_list_constants.h" |
| +#include "ui/base/layout.h" |
| +#include "ui/display/display.h" |
| +#include "ui/display/screen.h" |
| #include "ui/message_center/message_center.h" |
| #include "ui/message_center/notification_blocker.h" |
| @@ -134,6 +138,16 @@ void ArcKioskAppService::OnAppWindowLaunched() { |
| delegate_->OnAppWindowLaunched(); |
| } |
| +void ArcKioskAppService::OnIconUpdated(ArcAppIcon* icon) { |
| + DCHECK_EQ(icon, app_icon_.get()); |
| + if (icon->image_skia().isNull()) { |
| + app_icon_.release(); |
| + return; |
| + } |
| + app_manager_->UpdateNameAndIcon(app_info_->package_name, app_info_->name, |
| + app_icon_->image_skia()); |
| +} |
| + |
| ArcKioskAppService::ArcKioskAppService(Profile* profile) : profile_(profile) { |
| ArcAppListPrefs::Get(profile_)->AddObserver(this); |
| app_manager_ = ArcKioskAppManager::Get(); |
| @@ -149,6 +163,17 @@ ArcKioskAppService::~ArcKioskAppService() { |
| maintenance_timeout_timer_.Stop(); |
| } |
| +void ArcKioskAppService::RequestNameAndIconUpdate() { |
| + // Request only once when app_icon_ is not initialized. |
| + if (!app_info_ || !app_info_->ready || app_icon_) |
| + return; |
| + app_icon_.reset( |
|
Luis Héctor Chávez
2017/03/30 16:49:54
nit: base::MakeUnique
Sergey Poromov
2017/03/30 18:22:06
Done.
|
| + new ArcAppIcon(profile_, app_id_, app_list::kGridIconDimension, this)); |
| + app_icon_->LoadForScaleFactor(ui::GetSupportedScaleFactor( |
| + display::Screen::GetScreen()->GetPrimaryDisplay().device_scale_factor())); |
| + // Name and icon are updated when icon is loaded in OnIconUpdated() |
| +} |
| + |
| void ArcKioskAppService::PreconditionsChanged() { |
| app_id_ = GetAppId(); |
| if (app_id_.empty()) |
| @@ -161,17 +186,16 @@ void ArcKioskAppService::PreconditionsChanged() { |
| } else if (task_id_ != -1) { |
| arc::CloseTask(task_id_); |
| } |
| + RequestNameAndIconUpdate(); |
| } |
| std::string ArcKioskAppService::GetAppId() { |
| AccountId account_id = multi_user_util::GetAccountIdFromProfile(profile_); |
| - const ArcKioskAppManager::ArcKioskApp* app = |
| - app_manager_->GetAppByAccountId(account_id); |
| + const ArcKioskAppData* app = app_manager_->GetAppByAccountId(account_id); |
| if (!app) |
| return std::string(); |
| std::unordered_set<std::string> app_ids = |
| - ArcAppListPrefs::Get(profile_)->GetAppsForPackage( |
| - app->app_info().package_name()); |
| + ArcAppListPrefs::Get(profile_)->GetAppsForPackage(app->app_id()); |
| if (app_ids.empty()) |
| return std::string(); |
| // TODO(poromov@): Choose appropriate app id to launch. See |