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

Side by Side Diff: chrome/browser/ui/gesture_prefs_observer_factory_aura.cc

Issue 12212040: Make the workspace cycler animation parameters editable via chrome://gesture (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/gesture_prefs_observer_factory_aura.h" 5 #include "chrome/browser/ui/gesture_prefs_observer_factory_aura.h"
6 6
7 #include <vector>
8
7 #include "base/bind.h" 9 #include "base/bind.h"
8 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
9 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
10 #include "base/prefs/public/pref_change_registrar.h" 12 #include "base/prefs/public/pref_change_registrar.h"
11 #include "chrome/browser/prefs/pref_service.h" 13 #include "chrome/browser/prefs/pref_service.h"
12 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/profiles/profile_dependency_manager.h" 15 #include "chrome/browser/profiles/profile_dependency_manager.h"
14 #include "chrome/common/chrome_notification_types.h" 16 #include "chrome/common/chrome_notification_types.h"
15 #include "chrome/common/pref_names.h" 17 #include "chrome/common/pref_names.h"
16 #include "content/public/browser/notification_observer.h" 18 #include "content/public/browser/notification_observer.h"
17 #include "content/public/browser/overscroll_configuration.h" 19 #include "content/public/browser/overscroll_configuration.h"
18 #include "ui/base/gestures/gesture_configuration.h" 20 #include "ui/base/gestures/gesture_configuration.h"
19 21
22 #if defined(USE_ASH)
23 #include "ash/wm/workspace/workspace_cycler_configuration.h"
24 #endif // USE_ASH
25
26 using ash::WorkspaceCyclerConfiguration;
20 using ui::GestureConfiguration; 27 using ui::GestureConfiguration;
21 28
22 namespace { 29 namespace {
23 30
24 struct OverscrollPref { 31 struct OverscrollPref {
25 const char* pref_name; 32 const char* pref_name;
26 content::OverscrollConfig config; 33 content::OverscrollConfig config;
27 }; 34 };
28 35
29 // This class manages gesture configuration preferences. 36 const std::vector<OverscrollPref>& GetOverscrollPrefs() {
30 class GesturePrefsObserver : public ProfileKeyedService { 37 CR_DEFINE_STATIC_LOCAL(std::vector<OverscrollPref>, overscroll_prefs, ());
sadrul 2013/02/11 16:41:19 Whats the reason for this change?
pkotwicz 2013/02/12 00:00:26 The reason for this change is consistency with how
sadrul 2013/02/12 15:59:58 Why would you need ::NONE?
31 public: 38 if (overscroll_prefs.empty()) {
32 explicit GesturePrefsObserver(PrefService* prefs);
33 virtual ~GesturePrefsObserver();
34
35 static const OverscrollPref* GetOverscrollPrefs() {
36 using namespace content; 39 using namespace content;
37 static OverscrollPref overscroll_prefs[] = { 40 const OverscrollPref kOverscrollPrefs[] = {
38 { prefs::kOverscrollHorizontalThresholdComplete, 41 { prefs::kOverscrollHorizontalThresholdComplete,
39 OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE }, 42 OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE },
40 { prefs::kOverscrollVerticalThresholdComplete, 43 { prefs::kOverscrollVerticalThresholdComplete,
41 OVERSCROLL_CONFIG_VERT_THRESHOLD_COMPLETE }, 44 OVERSCROLL_CONFIG_VERT_THRESHOLD_COMPLETE },
42 { prefs::kOverscrollMinimumThresholdStart, 45 { prefs::kOverscrollMinimumThresholdStart,
43 OVERSCROLL_CONFIG_MIN_THRESHOLD_START }, 46 OVERSCROLL_CONFIG_MIN_THRESHOLD_START },
44 { prefs::kOverscrollHorizontalResistThreshold, 47 { prefs::kOverscrollHorizontalResistThreshold,
45 OVERSCROLL_CONFIG_HORIZ_RESIST_AFTER }, 48 OVERSCROLL_CONFIG_HORIZ_RESIST_AFTER },
46 { prefs::kOverscrollVerticalResistThreshold, 49 { prefs::kOverscrollVerticalResistThreshold,
47 OVERSCROLL_CONFIG_VERT_RESIST_AFTER }, 50 OVERSCROLL_CONFIG_VERT_RESIST_AFTER },
48 { NULL,
49 OVERSCROLL_CONFIG_NONE },
50 }; 51 };
52 overscroll_prefs.assign(kOverscrollPrefs,
53 kOverscrollPrefs + arraysize(kOverscrollPrefs));
54 }
55 return overscroll_prefs;
56 }
51 57
52 return overscroll_prefs; 58 #if defined(USE_ASH)
59 struct WorkspaceCyclerPref {
60 const char* pref_name;
61 WorkspaceCyclerConfiguration::Property property;
62 };
63
64 const std::vector<WorkspaceCyclerPref>& GetWorkspaceCyclerPrefs() {
65 CR_DEFINE_STATIC_LOCAL(std::vector<WorkspaceCyclerPref>, cycler_prefs, ());
66 if (cycler_prefs.empty() && WorkspaceCyclerConfiguration::IsCyclerEnabled()) {
67 const WorkspaceCyclerPref kCyclerPrefs[] = {
68 { prefs::kWorkspaceCyclerShallowerThanSelectedYOffsets,
69 WorkspaceCyclerConfiguration::SHALLOWER_THAN_SELECTED_Y_OFFSETS },
70 { prefs::kWorkspaceCyclerDeeperThanSelectedYOffsets,
71 WorkspaceCyclerConfiguration::DEEPER_THAN_SELECTED_Y_OFFSETS },
72 { prefs::kWorkspaceCyclerSelectedYOffset,
73 WorkspaceCyclerConfiguration::SELECTED_Y_OFFSET },
74 { prefs::kWorkspaceCyclerSelectedScale,
75 WorkspaceCyclerConfiguration::SELECTED_SCALE },
76 { prefs::kWorkspaceCyclerMinScale,
77 WorkspaceCyclerConfiguration::MIN_SCALE },
78 { prefs::kWorkspaceCyclerMaxScale,
79 WorkspaceCyclerConfiguration::MAX_SCALE },
80 { prefs::kWorkspaceCyclerMinBrightness,
81 WorkspaceCyclerConfiguration::MIN_BRIGHTNESS },
82 { prefs::kWorkspaceCyclerBackgroundOpacity,
83 WorkspaceCyclerConfiguration::BACKGROUND_OPACITY },
84 { prefs::kWorkspaceCyclerDistanceToInitiateCycling,
85 WorkspaceCyclerConfiguration::DISTANCE_TO_INITIATE_CYCLING },
86 { prefs::kWorkspaceCyclerScrollDistanceToCycleToNextWorkspace,
87 WorkspaceCyclerConfiguration::
88 SCROLL_DISTANCE_TO_CYCLE_TO_NEXT_WORKSPACE },
89 { prefs::kWorkspaceCyclerCyclerStepAnimationDurationRatio,
90 WorkspaceCyclerConfiguration::CYCLER_STEP_ANIMATION_DURATION_RATIO },
91 { prefs::kWorkspaceCyclerStartCyclerAnimationDuration,
92 WorkspaceCyclerConfiguration::START_CYCLER_ANIMATION_DURATION },
93 { prefs::kWorkspaceCyclerStopCyclerAnimationDuration,
94 WorkspaceCyclerConfiguration::STOP_CYCLER_ANIMATION_DURATION },
95 };
96 cycler_prefs.assign(kCyclerPrefs, kCyclerPrefs + arraysize(kCyclerPrefs));
53 } 97 }
98 return cycler_prefs;
99 }
100 #endif // USE_ASH
101
102 // This class manages gesture configuration preferences.
103 class GesturePrefsObserver : public ProfileKeyedService {
104 public:
105 explicit GesturePrefsObserver(PrefService* prefs);
106 virtual ~GesturePrefsObserver();
54 107
55 // ProfileKeyedService implementation. 108 // ProfileKeyedService implementation.
56 virtual void Shutdown() OVERRIDE; 109 virtual void Shutdown() OVERRIDE;
57 110
58 private: 111 private:
59 void Update(); 112 void Update();
60 113
61 void UpdateOverscrollPrefs(); 114 void UpdateOverscrollPrefs();
115 void UpdateWorkspaceCyclerPrefs();
62 116
63 PrefChangeRegistrar registrar_; 117 PrefChangeRegistrar registrar_;
64 PrefService* prefs_; 118 PrefService* prefs_;
65 119
66 DISALLOW_COPY_AND_ASSIGN(GesturePrefsObserver); 120 DISALLOW_COPY_AND_ASSIGN(GesturePrefsObserver);
67 }; 121 };
68 122
69 // The list of prefs we want to observe. 123 // The list of prefs we want to observe.
70 // Note that this collection of settings should correspond to the settings used 124 // Note that this collection of settings should correspond to the settings used
71 // in ui/base/gestures/gesture_configuration.h 125 // in ui/base/gestures/gesture_configuration.h
(...skipping 18 matching lines...) Expand all
90 prefs::kMinRailBreakVelocity, 144 prefs::kMinRailBreakVelocity,
91 prefs::kMinScrollDeltaSquared, 145 prefs::kMinScrollDeltaSquared,
92 prefs::kMinSwipeSpeed, 146 prefs::kMinSwipeSpeed,
93 prefs::kMinTouchDownDurationInSecondsForClick, 147 prefs::kMinTouchDownDurationInSecondsForClick,
94 prefs::kPointsBufferedForVelocity, 148 prefs::kPointsBufferedForVelocity,
95 prefs::kRailBreakProportion, 149 prefs::kRailBreakProportion,
96 prefs::kRailStartProportion, 150 prefs::kRailStartProportion,
97 prefs::kSemiLongPressTimeInSeconds, 151 prefs::kSemiLongPressTimeInSeconds,
98 }; 152 };
99 153
100 const char* kOverscrollPrefs[] = {
101 prefs::kOverscrollHorizontalThresholdComplete,
102 prefs::kOverscrollVerticalThresholdComplete,
103 prefs::kOverscrollMinimumThresholdStart,
104 prefs::kOverscrollHorizontalResistThreshold,
105 prefs::kOverscrollVerticalResistThreshold,
106 };
107
108 GesturePrefsObserver::GesturePrefsObserver(PrefService* prefs) 154 GesturePrefsObserver::GesturePrefsObserver(PrefService* prefs)
109 : prefs_(prefs) { 155 : prefs_(prefs) {
110 registrar_.Init(prefs); 156 registrar_.Init(prefs);
111 registrar_.RemoveAll(); 157 registrar_.RemoveAll();
112 base::Closure callback = base::Bind(&GesturePrefsObserver::Update, 158 base::Closure callback = base::Bind(&GesturePrefsObserver::Update,
113 base::Unretained(this)); 159 base::Unretained(this));
114 for (size_t i = 0; i < arraysize(kPrefsToObserve); ++i) 160 for (size_t i = 0; i < arraysize(kPrefsToObserve); ++i)
115 registrar_.Add(kPrefsToObserve[i], callback); 161 registrar_.Add(kPrefsToObserve[i], callback);
116 for (size_t i = 0; i < arraysize(kOverscrollPrefs); ++i) 162
117 registrar_.Add(kOverscrollPrefs[i], callback); 163 const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs();
164 for (size_t i = 0; i < overscroll_prefs.size(); ++i)
165 registrar_.Add(overscroll_prefs[i].pref_name, callback);
166
167 #if defined(USE_ASH)
168 const std::vector<WorkspaceCyclerPref>& cycler_prefs =
169 GetWorkspaceCyclerPrefs();
170 for (size_t i = 0; i < cycler_prefs.size(); ++i)
171 registrar_.Add(cycler_prefs[i].pref_name, callback);
172 #endif // USE_ASH
118 } 173 }
119 174
120 GesturePrefsObserver::~GesturePrefsObserver() {} 175 GesturePrefsObserver::~GesturePrefsObserver() {}
121 176
122 void GesturePrefsObserver::Shutdown() { 177 void GesturePrefsObserver::Shutdown() {
123 registrar_.RemoveAll(); 178 registrar_.RemoveAll();
124 } 179 }
125 180
126 void GesturePrefsObserver::Update() { 181 void GesturePrefsObserver::Update() {
127 GestureConfiguration::set_fling_acceleration_curve_coefficients(0, 182 GestureConfiguration::set_fling_acceleration_curve_coefficients(0,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 prefs_->GetInteger( 245 prefs_->GetInteger(
191 prefs::kPointsBufferedForVelocity)); 246 prefs::kPointsBufferedForVelocity));
192 GestureConfiguration::set_rail_break_proportion( 247 GestureConfiguration::set_rail_break_proportion(
193 prefs_->GetDouble( 248 prefs_->GetDouble(
194 prefs::kRailBreakProportion)); 249 prefs::kRailBreakProportion));
195 GestureConfiguration::set_rail_start_proportion( 250 GestureConfiguration::set_rail_start_proportion(
196 prefs_->GetDouble( 251 prefs_->GetDouble(
197 prefs::kRailStartProportion)); 252 prefs::kRailStartProportion));
198 253
199 UpdateOverscrollPrefs(); 254 UpdateOverscrollPrefs();
255 UpdateWorkspaceCyclerPrefs();
200 } 256 }
201 257
202 void GesturePrefsObserver::UpdateOverscrollPrefs() { 258 void GesturePrefsObserver::UpdateOverscrollPrefs() {
203 const OverscrollPref* overscroll_prefs = 259 const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs();
204 GesturePrefsObserver::GetOverscrollPrefs(); 260 for (size_t i = 0; i < overscroll_prefs.size(); ++i) {
205 for (int i = 0; overscroll_prefs[i].pref_name; ++i) {
206 content::SetOverscrollConfig(overscroll_prefs[i].config, 261 content::SetOverscrollConfig(overscroll_prefs[i].config,
207 static_cast<float>(prefs_->GetDouble(overscroll_prefs[i].pref_name))); 262 static_cast<float>(prefs_->GetDouble(overscroll_prefs[i].pref_name)));
208 } 263 }
209 } 264 }
210 265
266 void GesturePrefsObserver::UpdateWorkspaceCyclerPrefs() {
267 #if defined(USE_ASH)
268 const std::vector<WorkspaceCyclerPref>& cycler_prefs =
269 GetWorkspaceCyclerPrefs();
270 for (size_t i = 0; i < cycler_prefs.size(); ++i) {
271 WorkspaceCyclerConfiguration::Property property =
272 cycler_prefs[i].property;
273 if (WorkspaceCyclerConfiguration::IsListProperty(property)) {
274 WorkspaceCyclerConfiguration::SetListValue(property,
275 prefs_->GetList(cycler_prefs[i].pref_name));
276 } else {
277 WorkspaceCyclerConfiguration::SetDouble(property,
278 prefs_->GetDouble(cycler_prefs[i].pref_name));
279 }
280 }
281 #endif // USE_ASH
282 }
283
211 } // namespace 284 } // namespace
212 285
213 // static 286 // static
214 GesturePrefsObserverFactoryAura* 287 GesturePrefsObserverFactoryAura*
215 GesturePrefsObserverFactoryAura::GetInstance() { 288 GesturePrefsObserverFactoryAura::GetInstance() {
216 return Singleton<GesturePrefsObserverFactoryAura>::get(); 289 return Singleton<GesturePrefsObserverFactoryAura>::get();
217 } 290 }
218 291
219 GesturePrefsObserverFactoryAura::GesturePrefsObserverFactoryAura() 292 GesturePrefsObserverFactoryAura::GesturePrefsObserverFactoryAura()
220 : ProfileKeyedServiceFactory("GesturePrefsObserverAura", 293 : ProfileKeyedServiceFactory("GesturePrefsObserverAura",
221 ProfileDependencyManager::GetInstance()) {} 294 ProfileDependencyManager::GetInstance()) {}
222 295
223 GesturePrefsObserverFactoryAura::~GesturePrefsObserverFactoryAura() {} 296 GesturePrefsObserverFactoryAura::~GesturePrefsObserverFactoryAura() {}
224 297
225 ProfileKeyedService* GesturePrefsObserverFactoryAura::BuildServiceInstanceFor( 298 ProfileKeyedService* GesturePrefsObserverFactoryAura::BuildServiceInstanceFor(
226 Profile* profile) const { 299 Profile* profile) const {
227 return new GesturePrefsObserver(profile->GetPrefs()); 300 return new GesturePrefsObserver(profile->GetPrefs());
228 } 301 }
229 302
230 void GesturePrefsObserverFactoryAura::RegisterOverscrollPrefs( 303 void GesturePrefsObserverFactoryAura::RegisterOverscrollPrefs(
231 PrefServiceSyncable* prefs) { 304 PrefServiceSyncable* prefs) {
232 const OverscrollPref* overscroll_prefs = 305 const std::vector<OverscrollPref>& overscroll_prefs = GetOverscrollPrefs();
233 GesturePrefsObserver::GetOverscrollPrefs();
234 306
235 for (int i = 0; overscroll_prefs[i].pref_name; ++i) { 307 for (size_t i = 0; i < overscroll_prefs.size(); ++i) {
236 prefs->RegisterDoublePref( 308 prefs->RegisterDoublePref(
237 overscroll_prefs[i].pref_name, 309 overscroll_prefs[i].pref_name,
238 content::GetOverscrollConfig(overscroll_prefs[i].config), 310 content::GetOverscrollConfig(overscroll_prefs[i].config),
239 PrefServiceSyncable::UNSYNCABLE_PREF); 311 PrefServiceSyncable::UNSYNCABLE_PREF);
240 } 312 }
241 } 313 }
242 314
315 void GesturePrefsObserverFactoryAura::RegisterWorkspaceCyclerPrefs(
316 PrefServiceSyncable* prefs) {
317 #if defined(USE_ASH)
318 const std::vector<WorkspaceCyclerPref>& cycler_prefs =
319 GetWorkspaceCyclerPrefs();
320 for (size_t i = 0; i < cycler_prefs.size(); ++i) {
321 WorkspaceCyclerConfiguration::Property property =
322 cycler_prefs[i].property;
323 if (WorkspaceCyclerConfiguration::IsListProperty(property)) {
324 prefs->RegisterListPref(
325 cycler_prefs[i].pref_name,
326 WorkspaceCyclerConfiguration::GetListValue(property)->DeepCopy(),
327 PrefServiceSyncable::UNSYNCABLE_PREF);
328 } else {
329 prefs->RegisterDoublePref(
330 cycler_prefs[i].pref_name,
331 WorkspaceCyclerConfiguration::GetDouble(property),
332 PrefServiceSyncable::UNSYNCABLE_PREF);
333 }
334 }
335 #endif // USE_ASH
336 }
337
243 void GesturePrefsObserverFactoryAura::RegisterUserPrefs( 338 void GesturePrefsObserverFactoryAura::RegisterUserPrefs(
244 PrefServiceSyncable* prefs) { 339 PrefServiceSyncable* prefs) {
245 prefs->RegisterDoublePref( 340 prefs->RegisterDoublePref(
246 prefs::kFlingAccelerationCurveCoefficient0, 341 prefs::kFlingAccelerationCurveCoefficient0,
247 GestureConfiguration::fling_acceleration_curve_coefficients(0), 342 GestureConfiguration::fling_acceleration_curve_coefficients(0),
248 PrefServiceSyncable::UNSYNCABLE_PREF); 343 PrefServiceSyncable::UNSYNCABLE_PREF);
249 prefs->RegisterDoublePref( 344 prefs->RegisterDoublePref(
250 prefs::kFlingAccelerationCurveCoefficient1, 345 prefs::kFlingAccelerationCurveCoefficient1,
251 GestureConfiguration::fling_acceleration_curve_coefficients(1), 346 GestureConfiguration::fling_acceleration_curve_coefficients(1),
252 PrefServiceSyncable::UNSYNCABLE_PREF); 347 PrefServiceSyncable::UNSYNCABLE_PREF);
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 444
350 // TODO(rjkroege): Remove this in M29. http://crbug.com/160243. 445 // TODO(rjkroege): Remove this in M29. http://crbug.com/160243.
351 const char kTouchScreenFlingAccelerationAdjustment[] = 446 const char kTouchScreenFlingAccelerationAdjustment[] =
352 "gesture.touchscreen_fling_acceleration_adjustment"; 447 "gesture.touchscreen_fling_acceleration_adjustment";
353 prefs->RegisterDoublePref(kTouchScreenFlingAccelerationAdjustment, 448 prefs->RegisterDoublePref(kTouchScreenFlingAccelerationAdjustment,
354 0.0, 449 0.0,
355 PrefServiceSyncable::UNSYNCABLE_PREF); 450 PrefServiceSyncable::UNSYNCABLE_PREF);
356 prefs->ClearPref(kTouchScreenFlingAccelerationAdjustment); 451 prefs->ClearPref(kTouchScreenFlingAccelerationAdjustment);
357 452
358 RegisterOverscrollPrefs(prefs); 453 RegisterOverscrollPrefs(prefs);
454 RegisterWorkspaceCyclerPrefs(prefs);
359 } 455 }
360 456
361 bool GesturePrefsObserverFactoryAura::ServiceIsCreatedWithProfile() const { 457 bool GesturePrefsObserverFactoryAura::ServiceIsCreatedWithProfile() const {
362 // Create the observer as soon as the profile is created. 458 // Create the observer as soon as the profile is created.
363 return true; 459 return true;
364 } 460 }
365 461
366 bool GesturePrefsObserverFactoryAura::ServiceRedirectedInIncognito() const { 462 bool GesturePrefsObserverFactoryAura::ServiceRedirectedInIncognito() const {
367 // Use same gesture preferences on incognito windows. 463 // Use same gesture preferences on incognito windows.
368 return true; 464 return true;
369 } 465 }
370 466
371 bool GesturePrefsObserverFactoryAura::ServiceIsNULLWhileTesting() const { 467 bool GesturePrefsObserverFactoryAura::ServiceIsNULLWhileTesting() const {
372 // Some tests replace the PrefService of the TestingProfile after the 468 // Some tests replace the PrefService of the TestingProfile after the
373 // GesturePrefsObserver has been created, which makes Shutdown() 469 // GesturePrefsObserver has been created, which makes Shutdown()
374 // remove the registrar from a non-existent PrefService. 470 // remove the registrar from a non-existent PrefService.
375 return true; 471 return true;
376 } 472 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698