Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(477)

Unified Diff: chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc

Issue 2778053002: Fetch ARC Kiosk app name and icon from Android side. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..ed56783e504166b85e19e700fe3b48f7b401c143 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,15 +12,25 @@
#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/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"
namespace chromeos {
+namespace {
+
// Timeout maintenance session after 30 minutes.
constexpr base::TimeDelta kArcKioskMaintenanceSessionTimeout =
base::TimeDelta::FromMinutes(30);
+// ARC icon is available only for 48x48 dips.
+constexpr int kArcAppIconSizeInDp = 48;
khmel 2017/03/27 22:56:32 nit: Probably it is better to use kGridIconDimensi
Sergey Poromov 2017/03/28 15:25:55 Done.
+
+} // namespace
+
// Blocks all notifications for ARC Kiosk
class ArcKioskNotificationBlocker : public message_center::NotificationBlocker {
public:
@@ -134,6 +144,17 @@ void ArcKioskAppService::OnAppWindowLaunched() {
delegate_->OnAppWindowLaunched();
}
+void ArcKioskAppService::OnIconUpdated(ArcAppIcon* icon) {
+ if (icon == app_icon_.get()) {
khmel 2017/03/27 22:56:32 nit: Do you expect OnIconUpdated is called for not
Sergey Poromov 2017/03/28 15:25:55 Yes, now it's requested mostly once at any time. I
+ 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 +170,16 @@ 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(new ArcAppIcon(profile_, app_id_, kArcAppIconSizeInDp, 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 +192,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

Powered by Google App Engine
This is Rietveld 408576698