File: app_list_model_updater.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (160 lines) | stat: -rw-r--r-- 6,956 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_ASH_APP_LIST_APP_LIST_MODEL_UPDATER_H_
#define CHROME_BROWSER_ASH_APP_LIST_APP_LIST_MODEL_UPDATER_H_

#include <memory>
#include <string>
#include <vector>

#include "ash/public/cpp/app_list/app_list_types.h"
#include "base/functional/callback_forward.h"
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "chrome/browser/ash/app_list/app_list_model_updater_observer.h"
#include "chrome/browser/ash/app_list/app_list_syncable_service.h"
#include "chrome/browser/ash/app_list/chrome_app_list_item.h"

class ChromeSearchResult;

namespace ui {
class SimpleMenuModel;
}  // namespace ui

// An interface to wrap AppListModel access in browser.
class AppListModelUpdater {
 public:
  class TestApi {
   public:
    explicit TestApi(AppListModelUpdater* model_updater)
        : model_updater_(model_updater) {}
    ~TestApi() = default;

    void SetItemPosition(const std::string& id,
                         const syncer::StringOrdinal& new_position) {
      model_updater_->SetItemPosition(id, new_position);
    }

   private:
    const raw_ptr<AppListModelUpdater, DanglingUntriaged> model_updater_;
  };

  virtual ~AppListModelUpdater();

  int model_id() const { return model_id_; }

  // Returns the first available position in app list.
  syncer::StringOrdinal GetFirstAvailablePosition() const;

  // Set whether this model updater is active.
  // When we have multiple user profiles, only the active one has access to the
  // model. All others profile can only cache model changes in Chrome.
  virtual void SetActive(bool active) {}

  // For AppListModel:
  virtual void AddItem(std::unique_ptr<ChromeAppListItem> item) {}
  virtual void AddAppItemToFolder(std::unique_ptr<ChromeAppListItem> app_item,
                                  const std::string& folder_id,
                                  bool add_from_local) {}
  virtual void RemoveItem(const std::string& id, bool is_uninstall) {}
  virtual void SetStatus(ash::AppListModelStatus status) {}
  virtual void RequestDefaultPositionForModifiedOrder() {}
  virtual bool ModelHasBeenReorderedInThisSession();

  // For SearchModel:
  virtual void SetSearchEngineIsGoogle(bool is_google) {}
  virtual void PublishSearchResults(
      const std::vector<raw_ptr<ChromeSearchResult, VectorExperimental>>&
          results,
      const std::vector<ash::AppListSearchResultCategory>& categories) {}
  virtual void ClearSearchResults() {}
  virtual std::vector<raw_ptr<ChromeSearchResult, VectorExperimental>>
  GetPublishedSearchResultsForTest();

  // Item field setters only used by ChromeAppListItem and its derived classes.
  virtual void SetItemIconVersion(const std::string& id, int icon_version) {}
  virtual void SetItemIconAndColor(const std::string& id,
                                   const gfx::ImageSkia& icon,
                                   const ash::IconColor& icon_color,
                                   bool is_placeholder_icon) {}
  virtual void SetItemBadgeIcon(const std::string& id,
                                const gfx::ImageSkia& badge_icon) {}
  virtual void SetItemName(const std::string& id, const std::string& name) {}
  virtual void SetAppStatus(const std::string& id, ash::AppStatus app_status) {}
  virtual void SetItemPosition(const std::string& id,
                               const syncer::StringOrdinal& new_position) {}
  virtual void SetItemIsSystemFolder(const std::string& id,
                                     bool is_system_folder) {}
  virtual void SetIsNewInstall(const std::string& id, bool is_new_install) {}
  virtual void SetItemFolderId(const std::string& id,
                               const std::string& folder_id) = 0;
  virtual void SetNotificationBadgeColor(const std::string& id,
                                         const SkColor color) {}
  virtual void SetAccessibleName(const std::string& id,
                                 const std::string& name) {}

  virtual void SetSearchResultMetadata(
      const std::string& id,
      std::unique_ptr<ash::SearchResultMetadata> metadata) {}
  virtual void SetSearchResultIcon(const std::string& id,
                                   const gfx::ImageSkia& icon) {}
  virtual void SetSearchResultBadgeIcon(const std::string& id,
                                        const gfx::ImageSkia& badge_icon) {}
  virtual void ActivateChromeItem(const std::string& id, int event_flags) {}
  virtual void LoadAppIcon(const std::string& id) {}
  virtual void UpdateProgress(const std::string& id, float progress) {}

  // For AppListModel:
  virtual ChromeAppListItem* FindItem(const std::string& id) = 0;
  virtual std::vector<const ChromeAppListItem*> GetItems() const = 0;
  virtual std::set<std::string> GetTopLevelItemIds() const = 0;
  virtual size_t ItemCount() = 0;
  virtual std::vector<ChromeAppListItem*> GetTopLevelItems() const = 0;
  virtual ChromeAppListItem* ItemAtForTest(size_t index) = 0;
  virtual ChromeAppListItem* FindFolderItem(const std::string& folder_id) = 0;
  virtual bool FindItemIndexForTest(const std::string& id, size_t* index) = 0;
  // Returns a position which is before the first item in the item list.
  virtual syncer::StringOrdinal GetPositionBeforeFirstItem() const = 0;

  // Methods for AppListSyncableService:
  virtual void UpdateAppItemFromSyncItem(
      app_list::AppListSyncableService::SyncItem* sync_item,
      bool update_name,
      bool update_folder) {}
  virtual void NotifyProcessSyncChangesFinished() {}

  using GetMenuModelCallback =
      base::OnceCallback<void(std::unique_ptr<ui::SimpleMenuModel>)>;
  virtual void GetContextMenuModel(const std::string& id,
                                   ash::AppListItemContext item_context,
                                   GetMenuModelCallback callback) = 0;
  virtual size_t BadgedItemCount() = 0;
  // For SearchModel:
  virtual bool SearchEngineIsGoogle() = 0;
  virtual void RecalculateWouldTriggerLauncherSearchIph() = 0;

  // Notifies when the app list gets hidden.
  virtual void OnAppListHidden() = 0;

  virtual void AddObserver(AppListModelUpdaterObserver* observer) = 0;
  virtual void RemoveObserver(AppListModelUpdaterObserver* observer) = 0;

 protected:
  FRIEND_TEST_ALL_PREFIXES(AppListSyncableServiceTest, FirstAvailablePosition);
  FRIEND_TEST_ALL_PREFIXES(AppListSyncableServiceTest,
                           FirstAvailablePositionNotExist);

  AppListModelUpdater();

  // Returns a position which is before the first item in the app list. If
  // |top_level_items| is empty, creates an initial position instead.
  static syncer::StringOrdinal GetPositionBeforeFirstItemInternal(
      const std::vector<ChromeAppListItem*>& top_level_items);

 private:
  const int model_id_;
};

#endif  // CHROME_BROWSER_ASH_APP_LIST_APP_LIST_MODEL_UPDATER_H_