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

Side by Side Diff: ash/shelf/shelf_model.cc

Issue 2833173002: mash: Support ShelfModel access in Chrome. (Closed)
Patch Set: Address comments; fix test failures. Created 3 years, 6 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 unified diff | Download patch
OLDNEW
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 "ash/shelf/shelf_model.h" 5 #include "ash/shelf/shelf_model.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/public/cpp/shelf_item_delegate.h" 9 #include "ash/public/cpp/shelf_item_delegate.h"
10 #include "ash/shelf/shelf_model_observer.h" 10 #include "ash/shelf/shelf_model_observer.h"
11 #include "ash/strings/grit/ash_strings.h"
12 #include "ui/base/l10n/l10n_util.h"
11 13
12 namespace ash { 14 namespace ash {
13 15
14 namespace { 16 namespace {
15 17
16 int ShelfItemTypeToWeight(ShelfItemType type) { 18 int ShelfItemTypeToWeight(ShelfItemType type) {
17 switch (type) { 19 switch (type) {
18 case TYPE_APP_LIST: 20 case TYPE_APP_LIST:
19 // TODO(skuhne): If the app list item becomes movable again, this need 21 // TODO(skuhne): If the app list item becomes movable again, this need
20 // to be a fallthrough. 22 // to be a fallthrough.
(...skipping 15 matching lines...) Expand all
36 NOTREACHED() << "Invalid type " << type; 38 NOTREACHED() << "Invalid type " << type;
37 return 1; 39 return 1;
38 } 40 }
39 41
40 bool CompareByWeight(const ShelfItem& a, const ShelfItem& b) { 42 bool CompareByWeight(const ShelfItem& a, const ShelfItem& b) {
41 return ShelfItemTypeToWeight(a.type) < ShelfItemTypeToWeight(b.type); 43 return ShelfItemTypeToWeight(a.type) < ShelfItemTypeToWeight(b.type);
42 } 44 }
43 45
44 } // namespace 46 } // namespace
45 47
46 ShelfModel::ShelfModel() = default; 48 const char kAppListId[] = "jlfapfmkapbjlfbpjedlinehodkccjee";
49
50 ShelfModel::ShelfModel() {
51 // Add the app list item.
52 ShelfItem item;
53 item.type = TYPE_APP_LIST;
54 item.id = ShelfID(kAppListId);
55 item.title = l10n_util::GetStringUTF16(IDS_ASH_SHELF_APP_LIST_LAUNCHER_TITLE);
56 const int index = Add(item);
57 DCHECK_EQ(0, index);
58 }
47 59
48 ShelfModel::~ShelfModel() = default; 60 ShelfModel::~ShelfModel() = default;
49 61
50 void ShelfModel::PinAppWithID(const std::string& app_id) { 62 void ShelfModel::PinAppWithID(const std::string& app_id) {
51 const ShelfID shelf_id(app_id); 63 const ShelfID shelf_id(app_id);
52 64
53 // If the app is already pinned, do nothing and return. 65 // If the app is already pinned, do nothing and return.
54 if (IsAppPinned(shelf_id.app_id)) 66 if (IsAppPinned(shelf_id.app_id))
55 return; 67 return;
56 68
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 // need early cleanup. 111 // need early cleanup.
100 id_to_item_delegate_map_.clear(); 112 id_to_item_delegate_map_.clear();
101 } 113 }
102 114
103 int ShelfModel::Add(const ShelfItem& item) { 115 int ShelfModel::Add(const ShelfItem& item) {
104 return AddAt(items_.size(), item); 116 return AddAt(items_.size(), item);
105 } 117 }
106 118
107 int ShelfModel::AddAt(int index, const ShelfItem& item) { 119 int ShelfModel::AddAt(int index, const ShelfItem& item) {
108 // Items should have unique non-empty ids to avoid undefined model behavior. 120 // Items should have unique non-empty ids to avoid undefined model behavior.
109 DCHECK(!item.id.IsNull()); 121 DCHECK(!item.id.IsNull()) << " The id is null.";
110 DCHECK_EQ(ItemIndexByID(item.id), -1); 122 DCHECK_EQ(ItemIndexByID(item.id), -1) << " The id is not unique: " << item.id;
111 index = ValidateInsertionIndex(item.type, index); 123 index = ValidateInsertionIndex(item.type, index);
112 items_.insert(items_.begin() + index, item); 124 items_.insert(items_.begin() + index, item);
113 for (auto& observer : observers_) 125 for (auto& observer : observers_)
114 observer.ShelfItemAdded(index); 126 observer.ShelfItemAdded(index);
115 return index; 127 return index;
116 } 128 }
117 129
118 void ShelfModel::RemoveItemAt(int index) { 130 void ShelfModel::RemoveItemAt(int index) {
119 DCHECK(index >= 0 && index < item_count()); 131 DCHECK(index >= 0 && index < item_count());
120 ShelfItem old_item(items_[index]); 132 ShelfItem old_item(items_[index]);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 items_.begin(); 215 items_.begin();
204 } 216 }
205 217
206 void ShelfModel::SetShelfItemDelegate( 218 void ShelfModel::SetShelfItemDelegate(
207 const ShelfID& shelf_id, 219 const ShelfID& shelf_id,
208 std::unique_ptr<ShelfItemDelegate> item_delegate) { 220 std::unique_ptr<ShelfItemDelegate> item_delegate) {
209 if (item_delegate) 221 if (item_delegate)
210 item_delegate->set_shelf_id(shelf_id); 222 item_delegate->set_shelf_id(shelf_id);
211 // This assignment replaces any ShelfItemDelegate already registered for |id|. 223 // This assignment replaces any ShelfItemDelegate already registered for |id|.
212 id_to_item_delegate_map_[shelf_id] = std::move(item_delegate); 224 id_to_item_delegate_map_[shelf_id] = std::move(item_delegate);
225 for (auto& observer : observers_) {
226 observer.ShelfItemDelegateChanged(shelf_id,
227 id_to_item_delegate_map_[shelf_id].get());
228 }
213 } 229 }
214 230
215 ShelfItemDelegate* ShelfModel::GetShelfItemDelegate(const ShelfID& shelf_id) { 231 ShelfItemDelegate* ShelfModel::GetShelfItemDelegate(const ShelfID& shelf_id) {
216 auto it = id_to_item_delegate_map_.find(shelf_id); 232 auto it = id_to_item_delegate_map_.find(shelf_id);
217 if (it != id_to_item_delegate_map_.end()) 233 if (it != id_to_item_delegate_map_.end())
218 return it->second.get(); 234 return it->second.get();
219 return nullptr; 235 return nullptr;
220 } 236 }
221 237
222 void ShelfModel::AddObserver(ShelfModelObserver* observer) { 238 void ShelfModel::AddObserver(ShelfModelObserver* observer) {
(...skipping 16 matching lines...) Expand all
239 static_cast<ShelfItems::difference_type>(index)); 255 static_cast<ShelfItems::difference_type>(index));
240 index = std::min(std::upper_bound(items_.begin(), items_.end(), weight_dummy, 256 index = std::min(std::upper_bound(items_.begin(), items_.end(), weight_dummy,
241 CompareByWeight) - 257 CompareByWeight) -
242 items_.begin(), 258 items_.begin(),
243 static_cast<ShelfItems::difference_type>(index)); 259 static_cast<ShelfItems::difference_type>(index));
244 260
245 return index; 261 return index;
246 } 262 }
247 263
248 } // namespace ash 264 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698