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

Side by Side Diff: ui/gfx/android/view_configuration.cc

Issue 1216933013: [Android] Expose native ViewConfiguration constants as DIPs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix comment and add assert Created 5 years, 5 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
« no previous file with comments | « ui/gfx/android/view_configuration.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "ui/gfx/android/view_configuration.h" 5 #include "ui/gfx/android/view_configuration.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
9 #include "base/threading/non_thread_safe.h" 9 #include "base/threading/non_thread_safe.h"
10 #include "jni/ViewConfigurationHelper_jni.h" 10 #include "jni/ViewConfigurationHelper_jni.h"
11 11
12 using base::android::AttachCurrentThread; 12 using base::android::AttachCurrentThread;
13 using base::android::GetApplicationContext; 13 using base::android::GetApplicationContext;
14 14
15 namespace gfx { 15 namespace gfx {
16 16
17 namespace { 17 namespace {
18 18
19 struct ViewConfigurationData { 19 struct ViewConfigurationData {
20 ViewConfigurationData() 20 ViewConfigurationData()
21 : double_tap_timeout_in_ms_(0), 21 : double_tap_timeout_in_ms_(0),
22 long_press_timeout_in_ms_(0), 22 long_press_timeout_in_ms_(0),
23 tap_timeout_in_ms_(0), 23 tap_timeout_in_ms_(0),
24 scroll_friction_(1.f), 24 scroll_friction_(1.f),
25 max_fling_velocity_in_pixels_s_(0), 25 max_fling_velocity_in_dips_s_(0),
26 min_fling_velocity_in_pixels_s_(0), 26 min_fling_velocity_in_dips_s_(0),
27 touch_slop_in_pixels_(0), 27 touch_slop_in_dips_(0),
28 double_tap_slop_in_pixels_(0), 28 double_tap_slop_in_dips_(0),
29 min_scaling_span_in_pixels_(0), 29 min_scaling_span_in_dips_(0),
30 min_scaling_touch_major_in_pixels_(0) { 30 min_scaling_touch_major_in_dips_(0) {
31 JNIEnv* env = AttachCurrentThread(); 31 JNIEnv* env = AttachCurrentThread();
32 j_view_configuration_helper_.Reset( 32 j_view_configuration_helper_.Reset(
33 Java_ViewConfigurationHelper_createWithListener( 33 Java_ViewConfigurationHelper_createWithListener(
34 env, base::android::GetApplicationContext())); 34 env, base::android::GetApplicationContext()));
35 35
36 double_tap_timeout_in_ms_ = 36 double_tap_timeout_in_ms_ =
37 Java_ViewConfigurationHelper_getDoubleTapTimeout(env); 37 Java_ViewConfigurationHelper_getDoubleTapTimeout(env);
38 long_press_timeout_in_ms_ = 38 long_press_timeout_in_ms_ =
39 Java_ViewConfigurationHelper_getLongPressTimeout(env); 39 Java_ViewConfigurationHelper_getLongPressTimeout(env);
40 tap_timeout_in_ms_ = Java_ViewConfigurationHelper_getTapTimeout(env); 40 tap_timeout_in_ms_ = Java_ViewConfigurationHelper_getTapTimeout(env);
41 scroll_friction_ = Java_ViewConfigurationHelper_getScrollFriction(env); 41 scroll_friction_ = Java_ViewConfigurationHelper_getScrollFriction(env);
42 42
43 jobject obj = j_view_configuration_helper_.obj(); 43 jobject obj = j_view_configuration_helper_.obj();
44 Update( 44 Update(Java_ViewConfigurationHelper_getMaximumFlingVelocity(env, obj),
45 Java_ViewConfigurationHelper_getScaledMaximumFlingVelocity(env, obj), 45 Java_ViewConfigurationHelper_getMinimumFlingVelocity(env, obj),
46 Java_ViewConfigurationHelper_getScaledMinimumFlingVelocity(env, obj), 46 Java_ViewConfigurationHelper_getTouchSlop(env, obj),
47 Java_ViewConfigurationHelper_getScaledTouchSlop(env, obj), 47 Java_ViewConfigurationHelper_getDoubleTapSlop(env, obj),
48 Java_ViewConfigurationHelper_getScaledDoubleTapSlop(env, obj), 48 Java_ViewConfigurationHelper_getMinScalingSpan(env, obj),
49 Java_ViewConfigurationHelper_getScaledMinScalingSpan(env, obj), 49 Java_ViewConfigurationHelper_getMinScalingTouchMajor(env, obj));
50 Java_ViewConfigurationHelper_getScaledMinScalingTouchMajor(env, obj));
51 } 50 }
52 51
53 ~ViewConfigurationData() {} 52 ~ViewConfigurationData() {}
54 53
55 void SynchronizedUpdate(int scaled_maximum_fling_velocity, 54 void SynchronizedUpdate(float maximum_fling_velocity,
56 int scaled_minimum_fling_velocity, 55 float minimum_fling_velocity,
57 int scaled_touch_slop, 56 float touch_slop,
58 int scaled_double_tap_slop, 57 float double_tap_slop,
59 int scaled_min_scaling_span, 58 float min_scaling_span,
60 int scaled_min_scaling_touch_major) { 59 float min_scaling_touch_major) {
61 base::AutoLock autolock(lock_); 60 base::AutoLock autolock(lock_);
62 Update(scaled_maximum_fling_velocity, 61 Update(maximum_fling_velocity, minimum_fling_velocity, touch_slop,
63 scaled_minimum_fling_velocity, 62 double_tap_slop, min_scaling_span, min_scaling_touch_major);
64 scaled_touch_slop,
65 scaled_double_tap_slop,
66 scaled_min_scaling_span,
67 scaled_min_scaling_touch_major);
68 } 63 }
69 64
70 int double_tap_timeout_in_ms() const { return double_tap_timeout_in_ms_; } 65 int double_tap_timeout_in_ms() const { return double_tap_timeout_in_ms_; }
71 int long_press_timeout_in_ms() const { return long_press_timeout_in_ms_; } 66 int long_press_timeout_in_ms() const { return long_press_timeout_in_ms_; }
72 int tap_timeout_in_ms() const { return tap_timeout_in_ms_; } 67 int tap_timeout_in_ms() const { return tap_timeout_in_ms_; }
73 float scroll_friction() const { return scroll_friction_; } 68 float scroll_friction() const { return scroll_friction_; }
74 69
75 int max_fling_velocity_in_pixels_s() { 70 int max_fling_velocity_in_dips_s() {
76 base::AutoLock autolock(lock_); 71 base::AutoLock autolock(lock_);
77 return max_fling_velocity_in_pixels_s_; 72 return max_fling_velocity_in_dips_s_;
78 } 73 }
79 74
80 int min_fling_velocity_in_pixels_s() { 75 int min_fling_velocity_in_dips_s() {
81 base::AutoLock autolock(lock_); 76 base::AutoLock autolock(lock_);
82 return min_fling_velocity_in_pixels_s_; 77 return min_fling_velocity_in_dips_s_;
83 } 78 }
84 79
85 int touch_slop_in_pixels() { 80 int touch_slop_in_dips() {
86 base::AutoLock autolock(lock_); 81 base::AutoLock autolock(lock_);
87 return touch_slop_in_pixels_; 82 return touch_slop_in_dips_;
88 } 83 }
89 84
90 int double_tap_slop_in_pixels() { 85 int double_tap_slop_in_dips() {
91 base::AutoLock autolock(lock_); 86 base::AutoLock autolock(lock_);
92 return double_tap_slop_in_pixels_; 87 return double_tap_slop_in_dips_;
93 } 88 }
94 89
95 int min_scaling_span_in_pixels() { 90 int min_scaling_span_in_dips() {
96 base::AutoLock autolock(lock_); 91 base::AutoLock autolock(lock_);
97 return min_scaling_span_in_pixels_; 92 return min_scaling_span_in_dips_;
98 } 93 }
99 94
100 int min_scaling_touch_major_in_pixels() { 95 int min_scaling_touch_major_in_dips() {
101 base::AutoLock autolock(lock_); 96 base::AutoLock autolock(lock_);
102 return min_scaling_touch_major_in_pixels_; 97 return min_scaling_touch_major_in_dips_;
103 } 98 }
104 99
105 private: 100 private:
106 void Update(int scaled_maximum_fling_velocity, 101 void Update(float maximum_fling_velocity,
107 int scaled_minimum_fling_velocity, 102 float minimum_fling_velocity,
108 int scaled_touch_slop, 103 float touch_slop,
109 int scaled_double_tap_slop, 104 float double_tap_slop,
110 int scaled_min_scaling_span, 105 float min_scaling_span,
111 int scaled_min_scaling_touch_major) { 106 float min_scaling_touch_major) {
112 DCHECK_LE(scaled_minimum_fling_velocity, scaled_maximum_fling_velocity); 107 DCHECK_LE(minimum_fling_velocity, maximum_fling_velocity);
113 max_fling_velocity_in_pixels_s_ = scaled_maximum_fling_velocity; 108 max_fling_velocity_in_dips_s_ = maximum_fling_velocity;
114 min_fling_velocity_in_pixels_s_ = scaled_minimum_fling_velocity; 109 min_fling_velocity_in_dips_s_ = minimum_fling_velocity;
115 touch_slop_in_pixels_ = scaled_touch_slop; 110 touch_slop_in_dips_ = touch_slop;
116 double_tap_slop_in_pixels_ = scaled_double_tap_slop; 111 double_tap_slop_in_dips_ = double_tap_slop;
117 min_scaling_span_in_pixels_ = scaled_min_scaling_span; 112 min_scaling_span_in_dips_ = min_scaling_span;
118 min_scaling_touch_major_in_pixels_ = scaled_min_scaling_touch_major; 113 min_scaling_touch_major_in_dips_ = min_scaling_touch_major;
119 } 114 }
120 115
121 base::Lock lock_; 116 base::Lock lock_;
122 base::android::ScopedJavaGlobalRef<jobject> j_view_configuration_helper_; 117 base::android::ScopedJavaGlobalRef<jobject> j_view_configuration_helper_;
123 118
124 // These values will remain constant throughout the lifetime of the app, so 119 // These values will remain constant throughout the lifetime of the app, so
125 // read-access needn't be synchronized. 120 // read-access needn't be synchronized.
126 int double_tap_timeout_in_ms_; 121 int double_tap_timeout_in_ms_;
127 int long_press_timeout_in_ms_; 122 int long_press_timeout_in_ms_;
128 int tap_timeout_in_ms_; 123 int tap_timeout_in_ms_;
129 float scroll_friction_; 124 float scroll_friction_;
130 125
131 // These values may vary as view-specific parameters (DPI scale) are changed, 126 // These values may vary as view-specific parameters change, so read/write
132 // so read/write access must be synchronized. 127 // access must be synchronized.
133 int max_fling_velocity_in_pixels_s_; 128 int max_fling_velocity_in_dips_s_;
134 int min_fling_velocity_in_pixels_s_; 129 int min_fling_velocity_in_dips_s_;
135 int touch_slop_in_pixels_; 130 int touch_slop_in_dips_;
136 int double_tap_slop_in_pixels_; 131 int double_tap_slop_in_dips_;
137 int min_scaling_span_in_pixels_; 132 int min_scaling_span_in_dips_;
138 int min_scaling_touch_major_in_pixels_; 133 int min_scaling_touch_major_in_dips_;
139 134
140 private: 135 private:
141 DISALLOW_COPY_AND_ASSIGN(ViewConfigurationData); 136 DISALLOW_COPY_AND_ASSIGN(ViewConfigurationData);
142 }; 137 };
143 138
144 // Leaky to allow access from any thread. 139 // Leaky to allow access from any thread.
145 base::LazyInstance<ViewConfigurationData>::Leaky g_view_configuration = 140 base::LazyInstance<ViewConfigurationData>::Leaky g_view_configuration =
146 LAZY_INSTANCE_INITIALIZER; 141 LAZY_INSTANCE_INITIALIZER;
147 142
148 } // namespace 143 } // namespace
149 144
150 static void UpdateSharedViewConfiguration(JNIEnv* env, 145 static void UpdateSharedViewConfiguration(JNIEnv* env,
151 jobject obj, 146 jobject obj,
152 jint scaled_maximum_fling_velocity, 147 jfloat maximum_fling_velocity,
153 jint scaled_minimum_fling_velocity, 148 jfloat minimum_fling_velocity,
154 jint scaled_touch_slop, 149 jfloat touch_slop,
155 jint scaled_double_tap_slop, 150 jfloat double_tap_slop,
156 jint scaled_min_scaling_span, 151 jfloat min_scaling_span,
157 jint scaled_min_scaling_touch_major) { 152 jfloat min_scaling_touch_major) {
158 g_view_configuration.Get().SynchronizedUpdate(scaled_maximum_fling_velocity, 153 g_view_configuration.Get().SynchronizedUpdate(
159 scaled_minimum_fling_velocity, 154 maximum_fling_velocity, minimum_fling_velocity, touch_slop,
160 scaled_touch_slop, 155 double_tap_slop, min_scaling_span, min_scaling_touch_major);
161 scaled_double_tap_slop,
162 scaled_min_scaling_span,
163 scaled_min_scaling_touch_major);
164 } 156 }
165 157
166 int ViewConfiguration::GetDoubleTapTimeoutInMs() { 158 int ViewConfiguration::GetDoubleTapTimeoutInMs() {
167 return g_view_configuration.Get().double_tap_timeout_in_ms(); 159 return g_view_configuration.Get().double_tap_timeout_in_ms();
168 } 160 }
169 161
170 int ViewConfiguration::GetLongPressTimeoutInMs() { 162 int ViewConfiguration::GetLongPressTimeoutInMs() {
171 return g_view_configuration.Get().long_press_timeout_in_ms(); 163 return g_view_configuration.Get().long_press_timeout_in_ms();
172 } 164 }
173 165
174 int ViewConfiguration::GetTapTimeoutInMs() { 166 int ViewConfiguration::GetTapTimeoutInMs() {
175 return g_view_configuration.Get().tap_timeout_in_ms(); 167 return g_view_configuration.Get().tap_timeout_in_ms();
176 } 168 }
177 169
178 float ViewConfiguration::GetScrollFriction() { 170 float ViewConfiguration::GetScrollFriction() {
179 return g_view_configuration.Get().scroll_friction(); 171 return g_view_configuration.Get().scroll_friction();
180 } 172 }
181 173
182 int ViewConfiguration::GetMaximumFlingVelocityInPixelsPerSecond() { 174 int ViewConfiguration::GetMaximumFlingVelocityInDipsPerSecond() {
183 return g_view_configuration.Get().max_fling_velocity_in_pixels_s(); 175 return g_view_configuration.Get().max_fling_velocity_in_dips_s();
184 } 176 }
185 177
186 int ViewConfiguration::GetMinimumFlingVelocityInPixelsPerSecond() { 178 int ViewConfiguration::GetMinimumFlingVelocityInDipsPerSecond() {
187 return g_view_configuration.Get().min_fling_velocity_in_pixels_s(); 179 return g_view_configuration.Get().min_fling_velocity_in_dips_s();
188 } 180 }
189 181
190 int ViewConfiguration::GetTouchSlopInPixels() { 182 int ViewConfiguration::GetTouchSlopInDips() {
191 return g_view_configuration.Get().touch_slop_in_pixels(); 183 return g_view_configuration.Get().touch_slop_in_dips();
192 } 184 }
193 185
194 int ViewConfiguration::GetDoubleTapSlopInPixels() { 186 int ViewConfiguration::GetDoubleTapSlopInDips() {
195 return g_view_configuration.Get().double_tap_slop_in_pixels(); 187 return g_view_configuration.Get().double_tap_slop_in_dips();
196 } 188 }
197 189
198 int ViewConfiguration::GetMinScalingSpanInPixels() { 190 int ViewConfiguration::GetMinScalingSpanInDips() {
199 return g_view_configuration.Get().min_scaling_span_in_pixels(); 191 return g_view_configuration.Get().min_scaling_span_in_dips();
200 } 192 }
201 193
202 int ViewConfiguration::GetMinScalingTouchMajorInPixels() { 194 int ViewConfiguration::GetMinScalingTouchMajorInDips() {
203 return g_view_configuration.Get().min_scaling_touch_major_in_pixels(); 195 return g_view_configuration.Get().min_scaling_touch_major_in_dips();
204 } 196 }
205 197
206 bool ViewConfiguration::RegisterViewConfiguration(JNIEnv* env) { 198 bool ViewConfiguration::RegisterViewConfiguration(JNIEnv* env) {
207 return RegisterNativesImpl(env); 199 return RegisterNativesImpl(env);
208 } 200 }
209 201
210 } // namespace gfx 202 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gfx/android/view_configuration.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698