Index: ui/app_list/views/search_result_list_view.cc |
diff --git a/ui/app_list/views/search_result_list_view.cc b/ui/app_list/views/search_result_list_view.cc |
index 28fe33579a63cbc17e28611783d857911b668fce..b293928f91a6b90579fb429794b127b1a319ebda 100644 |
--- a/ui/app_list/views/search_result_list_view.cc |
+++ b/ui/app_list/views/search_result_list_view.cc |
@@ -10,6 +10,7 @@ |
#include "base/message_loop/message_loop.h" |
#include "base/time/time.h" |
#include "third_party/skia/include/core/SkColor.h" |
+#include "ui/app_list/app_list_view_delegate.h" |
#include "ui/app_list/views/search_result_list_view_delegate.h" |
#include "ui/app_list/views/search_result_view.h" |
#include "ui/events/event.h" |
@@ -29,8 +30,10 @@ const SkColor kTimeoutIndicatorColor = SkColorSetRGB(30, 144, 255); |
namespace app_list { |
SearchResultListView::SearchResultListView( |
- SearchResultListViewDelegate* delegate) |
+ SearchResultListViewDelegate* delegate, |
+ AppListViewDelegate* view_delegate) |
: delegate_(delegate), |
+ view_delegate_(view_delegate), |
results_(NULL), |
results_container_(new views::View), |
auto_launch_indicator_(new views::View), |
@@ -86,6 +89,8 @@ void SearchResultListView::SetSelectedIndex(int selected_index) { |
selected_view->NotifyAccessibilityEvent(ui::AccessibilityTypes::EVENT_FOCUS, |
true); |
} |
+ if (auto_launch_animation_) |
+ CancelAutoLaunchTimeout(); |
} |
bool SearchResultListView::IsResultViewSelected( |
@@ -97,21 +102,8 @@ bool SearchResultListView::IsResultViewSelected( |
results_container_->child_at(selected_index_)) == result_view; |
} |
-void SearchResultListView::SetAutoLaunchTimeout( |
- const base::TimeDelta& timeout) { |
- if (timeout > base::TimeDelta()) { |
- auto_launch_indicator_->SetVisible(true); |
- auto_launch_indicator_->SetBounds(0, 0, 0, kTimeoutIndicatorHeight); |
- auto_launch_animation_.reset(new gfx::LinearAnimation( |
- timeout.InMilliseconds(), kTimeoutFramerate, this)); |
- } else { |
- auto_launch_indicator_->SetVisible(false); |
- auto_launch_animation_.reset(); |
- } |
-} |
- |
-void SearchResultListView::CancelAutoLaunchTimeout() { |
- SetAutoLaunchTimeout(base::TimeDelta()); |
+void SearchResultListView::UpdateAutoLaunchState() { |
+ SetAutoLaunchTimeout(view_delegate_->GetAutoLaunchTimeout()); |
} |
bool SearchResultListView::OnKeyPressed(const ui::KeyEvent& event) { |
@@ -140,6 +132,25 @@ bool SearchResultListView::OnKeyPressed(const ui::KeyEvent& event) { |
return false; |
} |
+void SearchResultListView::SetAutoLaunchTimeout( |
+ const base::TimeDelta& timeout) { |
+ if (timeout > base::TimeDelta()) { |
+ auto_launch_indicator_->SetVisible(true); |
+ auto_launch_indicator_->SetBounds(0, 0, 0, kTimeoutIndicatorHeight); |
+ auto_launch_animation_.reset(new gfx::LinearAnimation( |
+ timeout.InMilliseconds(), kTimeoutFramerate, this)); |
+ auto_launch_animation_->Start(); |
+ } else { |
+ auto_launch_indicator_->SetVisible(false); |
+ auto_launch_animation_.reset(); |
+ } |
+} |
+ |
+void SearchResultListView::CancelAutoLaunchTimeout() { |
+ SetAutoLaunchTimeout(base::TimeDelta()); |
+ view_delegate_->AutoLaunchCanceled(); |
+} |
+ |
SearchResultView* SearchResultListView::GetResultViewAt(int index) { |
DCHECK(index >= 0 && index < results_container_->child_count()); |
return static_cast<SearchResultView*>(results_container_->child_at(index)); |
@@ -164,8 +175,7 @@ void SearchResultListView::Update() { |
Layout(); |
update_factory_.InvalidateWeakPtrs(); |
- if (auto_launch_animation_) |
- auto_launch_animation_->Start(); |
+ UpdateAutoLaunchState(); |
} |
void SearchResultListView::ScheduleUpdate() { |
@@ -179,6 +189,11 @@ void SearchResultListView::ScheduleUpdate() { |
} |
} |
+void SearchResultListView::ForceAutoLaunchForTest() { |
+ if (auto_launch_animation_) |
+ AnimationEnded(auto_launch_animation_.get()); |
+} |
+ |
void SearchResultListView::Layout() { |
results_container_->SetBoundsRect(GetLocalBounds()); |
} |
@@ -193,15 +208,16 @@ int SearchResultListView::GetHeightForWidth(int w) { |
void SearchResultListView::VisibilityChanged(views::View* starting_from, |
bool is_visible) { |
- if (!is_visible) { |
- auto_launch_indicator_->SetVisible(false); |
- auto_launch_animation_.reset(); |
- } |
+ if (is_visible) |
+ UpdateAutoLaunchState(); |
+ else |
+ CancelAutoLaunchTimeout(); |
} |
void SearchResultListView::AnimationEnded(const gfx::Animation* animation) { |
DCHECK_EQ(auto_launch_animation_.get(), animation); |
delegate_->OpenResult(results_->GetItemAt(0), ui::EF_NONE); |
+ auto_launch_animation_.reset(); |
} |
void SearchResultListView::AnimationProgressed( |