OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h" | 5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 | 328 |
329 void ChromeLauncherControllerImpl::CloseLauncherItem(ash::ShelfID id) { | 329 void ChromeLauncherControllerImpl::CloseLauncherItem(ash::ShelfID id) { |
330 CHECK(id); | 330 CHECK(id); |
331 if (IsPinned(id)) { | 331 if (IsPinned(id)) { |
332 // Create a new shortcut controller. | 332 // Create a new shortcut controller. |
333 IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id); | 333 IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id); |
334 CHECK(iter != id_to_item_controller_map_.end()); | 334 CHECK(iter != id_to_item_controller_map_.end()); |
335 SetItemStatus(id, ash::STATUS_CLOSED); | 335 SetItemStatus(id, ash::STATUS_CLOSED); |
336 std::string app_id = iter->second->app_id(); | 336 std::string app_id = iter->second->app_id(); |
337 std::string launch_id = iter->second->launch_id(); | 337 std::string launch_id = iter->second->launch_id(); |
338 iter->second = | 338 std::string title = iter->second->title(); |
339 AppShortcutLauncherItemController::Create(app_id, launch_id, this); | 339 iter->second = AppShortcutLauncherItemController::Create(app_id, launch_id, |
| 340 title, this); |
340 iter->second->set_shelf_id(id); | 341 iter->second->set_shelf_id(id); |
341 // Existing controller is destroyed and replaced by registering again. | 342 // Existing controller is destroyed and replaced by registering again. |
342 SetShelfItemDelegate(id, iter->second); | 343 SetShelfItemDelegate(id, iter->second); |
343 } else { | 344 } else { |
344 LauncherItemClosed(id); | 345 LauncherItemClosed(id); |
345 } | 346 } |
346 } | 347 } |
347 | 348 |
348 void ChromeLauncherControllerImpl::Pin(ash::ShelfID id) { | 349 void ChromeLauncherControllerImpl::Pin(ash::ShelfID id) { |
349 DCHECK(HasShelfIDToAppIDMapping(id)); | 350 DCHECK(HasShelfIDToAppIDMapping(id)); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 std::string app_id; | 415 std::string app_id; |
415 return ((type == ash::TYPE_APP_SHORTCUT || type == ash::TYPE_PLATFORM_APP || | 416 return ((type == ash::TYPE_APP_SHORTCUT || type == ash::TYPE_PLATFORM_APP || |
416 type == ash::TYPE_WINDOWED_APP) && | 417 type == ash::TYPE_WINDOWED_APP) && |
417 model_->GetShelfItemDelegate(id)->CanPin()); | 418 model_->GetShelfItemDelegate(id)->CanPin()); |
418 } | 419 } |
419 | 420 |
420 void ChromeLauncherControllerImpl::LockV1AppWithID(const std::string& app_id) { | 421 void ChromeLauncherControllerImpl::LockV1AppWithID(const std::string& app_id) { |
421 ash::ShelfID id = GetShelfIDForAppID(app_id); | 422 ash::ShelfID id = GetShelfIDForAppID(app_id); |
422 if (!IsPinned(id) && !IsWindowedAppInLauncher(app_id)) { | 423 if (!IsPinned(id) && !IsWindowedAppInLauncher(app_id)) { |
423 CreateAppShortcutLauncherItemWithType(ash::launcher::AppLauncherId(app_id), | 424 CreateAppShortcutLauncherItemWithType(ash::launcher::AppLauncherId(app_id), |
424 model_->item_count(), | 425 "", model_->item_count(), |
425 ash::TYPE_WINDOWED_APP); | 426 ash::TYPE_WINDOWED_APP); |
426 id = GetShelfIDForAppID(app_id); | 427 id = GetShelfIDForAppID(app_id); |
427 } | 428 } |
428 CHECK(id); | 429 CHECK(id); |
429 GetLauncherItemController(id)->lock(); | 430 GetLauncherItemController(id)->lock(); |
430 } | 431 } |
431 | 432 |
432 void ChromeLauncherControllerImpl::UnlockV1AppWithID( | 433 void ChromeLauncherControllerImpl::UnlockV1AppWithID( |
433 const std::string& app_id) { | 434 const std::string& app_id) { |
434 ash::ShelfID id = GetShelfIDForAppID(app_id); | 435 ash::ShelfID id = GetShelfIDForAppID(app_id); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 ash::ShelfID id = GetShelfIDForAppID(app_id); | 478 ash::ShelfID id = GetShelfIDForAppID(app_id); |
478 if (id) { | 479 if (id) { |
479 LauncherItemController* controller = GetLauncherItemController(id); | 480 LauncherItemController* controller = GetLauncherItemController(id); |
480 controller->Activate(source); | 481 controller->Activate(source); |
481 return; | 482 return; |
482 } | 483 } |
483 | 484 |
484 // Create a temporary application launcher item and use it to see if there are | 485 // Create a temporary application launcher item and use it to see if there are |
485 // running instances. | 486 // running instances. |
486 std::unique_ptr<AppShortcutLauncherItemController> app_controller( | 487 std::unique_ptr<AppShortcutLauncherItemController> app_controller( |
487 AppShortcutLauncherItemController::Create(app_id, "", this)); | 488 AppShortcutLauncherItemController::Create(app_id, "", "", this)); |
488 if (!app_controller->GetRunningApplications().empty()) | 489 if (!app_controller->GetRunningApplications().empty()) |
489 app_controller->Activate(source); | 490 app_controller->Activate(source); |
490 else | 491 else |
491 LaunchApp(app_id, source, event_flags); | 492 LaunchApp(app_id, source, event_flags); |
492 } | 493 } |
493 | 494 |
494 extensions::LaunchType ChromeLauncherControllerImpl::GetLaunchType( | 495 extensions::LaunchType ChromeLauncherControllerImpl::GetLaunchType( |
495 ash::ShelfID id) { | 496 ash::ShelfID id) { |
496 const Extension* extension = | 497 const Extension* extension = |
497 GetExtensionForAppID(GetAppIDForShelfID(id), profile()); | 498 GetExtensionForAppID(GetAppIDForShelfID(id), profile()); |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
837 ChromeLauncherControllerImpl::GetArcDeferredLauncher() { | 838 ChromeLauncherControllerImpl::GetArcDeferredLauncher() { |
838 return arc_deferred_launcher_.get(); | 839 return arc_deferred_launcher_.get(); |
839 } | 840 } |
840 | 841 |
841 const std::string& ChromeLauncherControllerImpl::GetLaunchIDForShelfID( | 842 const std::string& ChromeLauncherControllerImpl::GetLaunchIDForShelfID( |
842 ash::ShelfID id) { | 843 ash::ShelfID id) { |
843 LauncherItemController* controller = GetLauncherItemController(id); | 844 LauncherItemController* controller = GetLauncherItemController(id); |
844 return controller ? controller->launch_id() : base::EmptyString(); | 845 return controller ? controller->launch_id() : base::EmptyString(); |
845 } | 846 } |
846 | 847 |
| 848 const std::string& ChromeLauncherControllerImpl::GetTitleForShelfID( |
| 849 ash::ShelfID id) { |
| 850 LauncherItemController* controller = GetLauncherItemController(id); |
| 851 return controller ? controller->title() : base::EmptyString(); |
| 852 } |
| 853 |
847 void ChromeLauncherControllerImpl::AttachProfile(Profile* profile_to_attach) { | 854 void ChromeLauncherControllerImpl::AttachProfile(Profile* profile_to_attach) { |
848 // The base class implementation updates the helper and app icon loaders. | 855 // The base class implementation updates the helper and app icon loaders. |
849 ChromeLauncherController::AttachProfile(profile_to_attach); | 856 ChromeLauncherController::AttachProfile(profile_to_attach); |
850 | 857 |
851 pref_change_registrar_.Init(profile()->GetPrefs()); | 858 pref_change_registrar_.Init(profile()->GetPrefs()); |
852 pref_change_registrar_.Add( | 859 pref_change_registrar_.Add( |
853 prefs::kPolicyPinnedLauncherApps, | 860 prefs::kPolicyPinnedLauncherApps, |
854 base::Bind(&ChromeLauncherControllerImpl::UpdateAppLaunchersFromPref, | 861 base::Bind(&ChromeLauncherControllerImpl::UpdateAppLaunchersFromPref, |
855 base::Unretained(this))); | 862 base::Unretained(this))); |
856 // Handling of prefs::kArcEnabled change should be called deferred to avoid | 863 // Handling of prefs::kArcEnabled change should be called deferred to avoid |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1011 if (app_icon_loader) | 1018 if (app_icon_loader) |
1012 app_icon_loader->ClearImage(app_id); | 1019 app_icon_loader->ClearImage(app_id); |
1013 } | 1020 } |
1014 } | 1021 } |
1015 | 1022 |
1016 /////////////////////////////////////////////////////////////////////////////// | 1023 /////////////////////////////////////////////////////////////////////////////// |
1017 // ChromeLauncherControllerImpl protected: | 1024 // ChromeLauncherControllerImpl protected: |
1018 | 1025 |
1019 ash::ShelfID ChromeLauncherControllerImpl::CreateAppShortcutLauncherItem( | 1026 ash::ShelfID ChromeLauncherControllerImpl::CreateAppShortcutLauncherItem( |
1020 const ash::launcher::AppLauncherId& app_launcher_id, | 1027 const ash::launcher::AppLauncherId& app_launcher_id, |
| 1028 const std::string& title, |
1021 int index) { | 1029 int index) { |
1022 return CreateAppShortcutLauncherItemWithType(app_launcher_id, index, | 1030 return CreateAppShortcutLauncherItemWithType(app_launcher_id, title, index, |
1023 ash::TYPE_APP_SHORTCUT); | 1031 ash::TYPE_APP_SHORTCUT); |
1024 } | 1032 } |
1025 | 1033 |
1026 /////////////////////////////////////////////////////////////////////////////// | 1034 /////////////////////////////////////////////////////////////////////////////// |
1027 // ChromeLauncherControllerImpl private: | 1035 // ChromeLauncherControllerImpl private: |
1028 | 1036 |
1029 void ChromeLauncherControllerImpl::RememberUnpinnedRunningApplicationOrder() { | 1037 void ChromeLauncherControllerImpl::RememberUnpinnedRunningApplicationOrder() { |
1030 RunningAppListIds list; | 1038 RunningAppListIds list; |
1031 for (int i = 0; i < model_->item_count(); i++) { | 1039 for (int i = 0; i < model_->item_count(); i++) { |
1032 ash::ShelfItemType type = model_->items()[i].type; | 1040 ash::ShelfItemType type = model_->items()[i].type; |
(...skipping 26 matching lines...) Expand all Loading... |
1059 model_->Move(running_index, app_index); | 1067 model_->Move(running_index, app_index); |
1060 running_index++; | 1068 running_index++; |
1061 } | 1069 } |
1062 } | 1070 } |
1063 } | 1071 } |
1064 } | 1072 } |
1065 | 1073 |
1066 ash::ShelfID | 1074 ash::ShelfID |
1067 ChromeLauncherControllerImpl::CreateAppShortcutLauncherItemWithType( | 1075 ChromeLauncherControllerImpl::CreateAppShortcutLauncherItemWithType( |
1068 const ash::launcher::AppLauncherId& app_launcher_id, | 1076 const ash::launcher::AppLauncherId& app_launcher_id, |
| 1077 const std::string& title, |
1069 int index, | 1078 int index, |
1070 ash::ShelfItemType shelf_item_type) { | 1079 ash::ShelfItemType shelf_item_type) { |
1071 AppShortcutLauncherItemController* controller = | 1080 AppShortcutLauncherItemController* controller = |
1072 AppShortcutLauncherItemController::Create( | 1081 AppShortcutLauncherItemController::Create( |
1073 app_launcher_id.app_id(), app_launcher_id.launch_id(), this); | 1082 app_launcher_id.app_id(), app_launcher_id.launch_id(), title, this); |
1074 ash::ShelfID shelf_id = | 1083 ash::ShelfID shelf_id = |
1075 InsertAppLauncherItem(controller, app_launcher_id.app_id(), | 1084 InsertAppLauncherItem(controller, app_launcher_id.app_id(), |
1076 ash::STATUS_CLOSED, index, shelf_item_type); | 1085 ash::STATUS_CLOSED, index, shelf_item_type); |
1077 return shelf_id; | 1086 return shelf_id; |
1078 } | 1087 } |
1079 | 1088 |
1080 void ChromeLauncherControllerImpl::LauncherItemClosed(ash::ShelfID id) { | 1089 void ChromeLauncherControllerImpl::LauncherItemClosed(ash::ShelfID id) { |
1081 IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id); | 1090 IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id); |
1082 CHECK(iter != id_to_item_controller_map_.end()); | 1091 CHECK(iter != id_to_item_controller_map_.end()); |
1083 CHECK(iter->second); | 1092 CHECK(iter->second); |
(...skipping 14 matching lines...) Expand all Loading... |
1098 if (IsAppPinned(app_id)) | 1107 if (IsAppPinned(app_id)) |
1099 return; | 1108 return; |
1100 | 1109 |
1101 ash::ShelfID shelf_id = GetShelfIDForAppID(app_id); | 1110 ash::ShelfID shelf_id = GetShelfIDForAppID(app_id); |
1102 if (shelf_id) { | 1111 if (shelf_id) { |
1103 // App item exists, pin it | 1112 // App item exists, pin it |
1104 Pin(shelf_id); | 1113 Pin(shelf_id); |
1105 } else { | 1114 } else { |
1106 // Otherwise, create a shortcut item for it. | 1115 // Otherwise, create a shortcut item for it. |
1107 shelf_id = CreateAppShortcutLauncherItem( | 1116 shelf_id = CreateAppShortcutLauncherItem( |
1108 ash::launcher::AppLauncherId(app_id), model_->item_count()); | 1117 ash::launcher::AppLauncherId(app_id), "", model_->item_count()); |
1109 SyncPinPosition(shelf_id); | 1118 SyncPinPosition(shelf_id); |
1110 } | 1119 } |
1111 } | 1120 } |
1112 | 1121 |
1113 void ChromeLauncherControllerImpl::DoUnpinAppWithID(const std::string& app_id, | 1122 void ChromeLauncherControllerImpl::DoUnpinAppWithID(const std::string& app_id, |
1114 bool update_prefs) { | 1123 bool update_prefs) { |
1115 ash::ShelfID shelf_id = GetShelfIDForAppID(app_id); | 1124 ash::ShelfID shelf_id = GetShelfIDForAppID(app_id); |
1116 if (shelf_id && IsPinned(shelf_id)) | 1125 if (shelf_id && IsPinned(shelf_id)) |
1117 UnpinAndUpdatePrefs(shelf_id, update_prefs); | 1126 UnpinAndUpdatePrefs(shelf_id, update_prefs); |
1118 } | 1127 } |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1259 item.type == ash::TYPE_BROWSER_SHORTCUT) { | 1268 item.type == ash::TYPE_BROWSER_SHORTCUT) { |
1260 // Just move to required position or keep it inplace. | 1269 // Just move to required position or keep it inplace. |
1261 model_->Move(app_index, index); | 1270 model_->Move(app_index, index); |
1262 } else { | 1271 } else { |
1263 PinRunningAppInternal(index, item.id); | 1272 PinRunningAppInternal(index, item.id); |
1264 } | 1273 } |
1265 DCHECK_EQ(model_->ItemIndexByID(item.id), index); | 1274 DCHECK_EQ(model_->ItemIndexByID(item.id), index); |
1266 } else { | 1275 } else { |
1267 // This is fresh pin. Create new one. | 1276 // This is fresh pin. Create new one. |
1268 DCHECK_NE(app_id, extension_misc::kChromeAppId); | 1277 DCHECK_NE(app_id, extension_misc::kChromeAppId); |
1269 CreateAppShortcutLauncherItem(pref_app_launcher_id, index); | 1278 CreateAppShortcutLauncherItem(pref_app_launcher_id, "", index); |
1270 } | 1279 } |
1271 ++index; | 1280 ++index; |
1272 } | 1281 } |
1273 | 1282 |
1274 // At second step remove any pin to the right from the current index. | 1283 // At second step remove any pin to the right from the current index. |
1275 while (index < model_->item_count()) { | 1284 while (index < model_->item_count()) { |
1276 const ash::ShelfItem item = model_->items()[index]; | 1285 const ash::ShelfItem item = model_->items()[index]; |
1277 if (item.type != ash::TYPE_APP_SHORTCUT) { | 1286 if (item.type != ash::TYPE_APP_SHORTCUT) { |
1278 ++index; | 1287 ++index; |
1279 continue; | 1288 continue; |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1550 LauncherItemController* controller = GetLauncherItemController(item.id); | 1559 LauncherItemController* controller = GetLauncherItemController(item.id); |
1551 if (!controller || controller->image_set_by_controller()) | 1560 if (!controller || controller->image_set_by_controller()) |
1552 continue; | 1561 continue; |
1553 item.image = image; | 1562 item.image = image; |
1554 if (arc_deferred_launcher_) | 1563 if (arc_deferred_launcher_) |
1555 arc_deferred_launcher_->MaybeApplySpinningEffect(id, &item.image); | 1564 arc_deferred_launcher_->MaybeApplySpinningEffect(id, &item.image); |
1556 model_->Set(index, item); | 1565 model_->Set(index, item); |
1557 // It's possible we're waiting on more than one item, so don't break. | 1566 // It's possible we're waiting on more than one item, so don't break. |
1558 } | 1567 } |
1559 } | 1568 } |
OLD | NEW |