123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- // Copyright 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef ASH_APP_LIST_VIEWS_SEARCH_RESULT_BASE_VIEW_H_
- #define ASH_APP_LIST_VIEWS_SEARCH_RESULT_BASE_VIEW_H_
- #include "ash/app_list/model/search/search_result_observer.h"
- #include "ash/ash_export.h"
- #include "base/time/time.h"
- #include "third_party/abseil-cpp/absl/types/optional.h"
- #include "ui/views/controls/button/button.h"
- namespace ash {
- class SearchResult;
- class SearchResultActionsView;
- // Base class for views that observe and display a search result
- class ASH_EXPORT SearchResultBaseView : public views::Button,
- public SearchResultObserver {
- public:
- SearchResultBaseView();
- SearchResultBaseView(const SearchResultBaseView&) = delete;
- SearchResultBaseView& operator=(const SearchResultBaseView&) = delete;
- // Set whether the result is selected. It updates the background highlight,
- // and selects the result action associated with the result if
- // SearchBoxSelection feature is enabled.
- //
- // |reverse_tab_order| - Indicates whether the selection was set as part of
- // reverse tab traversal. Should be set when selection was changed while
- // handling TAB keyboard key. Ignored if |selected| is false.
- void SetSelected(bool selected, absl::optional<bool> reverse_tab_order);
- // Selects the initial action that should be associated with the result view,
- // notifying a11y hierarchy of the selection. If the result view does not
- // support result actions (i.e. does not have actions_view_), this will just
- // announce the current result view selection.
- // |reverse_tab_order| - whether the action was selected in reverse tab order.
- virtual void SelectInitialResultAction(bool reverse_tab_order);
- // Selects the next result action for the view, if the result supports
- // non-default actions (see actions_view_).
- // |reverse_tab_order| - whether the action was selected while handling TAB
- // key in reverse tab order.
- //
- // Returns whether the selected result action was changed.
- virtual bool SelectNextResultAction(bool reverse_tab_order);
- // Returns the view that is currently selected - for example, if the result
- // supports action views and an action view is currently selected, this
- // should return the action view, otherwise it should return `this`.
- virtual views::View* GetSelectedView();
- SearchResult* result() const { return result_; }
- void SetResult(SearchResult* result);
- // Invoked before changing |result_| to |new_result|.
- virtual void OnResultChanging(SearchResult* new_result) {}
- // Invoked after |result_| is updated.
- virtual void OnResultChanged() {}
- // Overridden from SearchResultObserver:
- void OnResultDestroying() override;
- // Computes the button's spoken feedback name.
- std::u16string ComputeAccessibleName() const;
- // Clears the result without calling |OnResultChanged| or |OnResultChanging|
- void ClearResult();
- bool selected() const { return selected_; }
- int index_in_container() const { return index_in_container_.value(); }
- void set_index_in_container(size_t index) { index_in_container_ = index; }
- void set_result_display_start_time(base::TimeTicks start_time) {
- result_display_start_time_ = start_time;
- }
- base::TimeTicks result_display_start_time() const {
- return result_display_start_time_;
- }
- void set_is_default_result(bool is_default) {
- is_default_result_ = is_default;
- }
- bool is_default_result() const { return is_default_result_; }
- // views::Button:
- bool SkipDefaultKeyEventProcessing(const ui::KeyEvent& event) override;
- // views::View:
- const char* GetClassName() const override;
- SearchResultActionsView* actions_view() { return actions_view_; }
- protected:
- ~SearchResultBaseView() override;
- void UpdateAccessibleName();
- void set_actions_view(SearchResultActionsView* actions_view) {
- actions_view_ = actions_view;
- }
- private:
- // If non-default result action was selected, clears the actions_view_'s
- // selection state.
- void ClearSelectedResultAction();
- // Whether the result is currently selected.
- bool selected_ = false;
- // Expected to be set by result view implementations that supports
- // extra result actions. It points to the view containing result actions
- // buttons. Owned by the views hierarchy.
- SearchResultActionsView* actions_view_ = nullptr;
- // The index of this view within a |SearchResultContainerView| that holds it.
- absl::optional<int> index_in_container_;
- // The starting time when |result_| is being displayed.
- base::TimeTicks result_display_start_time_;
- // True if |result_| is selected as the default result which can be
- // activated by user by pressing ENTER key.
- bool is_default_result_ = false;
- SearchResult* result_ = nullptr; // Owned by SearchModel::SearchResults.
- };
- } // namespace ash
- #endif // ASH_APP_LIST_VIEWS_SEARCH_RESULT_BASE_VIEW_H_
|