• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package android.view;
2 
3 import static android.os.Build.VERSION_CODES.O_MR1;
4 import static com.google.common.truth.Truth.assertThat;
5 
6 import android.content.res.Configuration;
7 import android.content.res.Resources;
8 import android.os.Build;
9 import android.util.DisplayMetrics;
10 import androidx.test.core.app.ApplicationProvider;
11 import androidx.test.ext.junit.runners.AndroidJUnit4;
12 import java.lang.reflect.Method;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.junit.runner.RunWith;
16 import org.robolectric.annotation.Config;
17 
18 /** Tests that {@link android.view.ViewConfiguration} behavior is consistent with real Android. */
19 @RunWith(AndroidJUnit4.class)
20 public final class ViewConfigurationTest {
21 
22   private float density;
23   private ViewConfiguration viewConfiguration;
24 
25   @Before
setUp()26   public void setUp() {
27     Resources resources = ApplicationProvider.getApplicationContext().getResources();
28     DisplayMetrics metrics = resources.getDisplayMetrics();
29     metrics.density = 1.5f;
30     metrics.densityDpi = 240;
31     metrics.setTo(metrics);
32     Configuration configuration = resources.getConfiguration();
33     configuration.densityDpi = 240;
34     configuration.setTo(configuration);
35     resources.updateConfiguration(configuration, metrics);
36     density =
37         ApplicationProvider.getApplicationContext().getResources().getDisplayMetrics().density;
38     viewConfiguration = ViewConfiguration.get(ApplicationProvider.getApplicationContext());
39   }
40 
41   @Test
scrollbar_configuration()42   public void scrollbar_configuration() {
43     int scrollBarSize = ViewConfiguration.getScrollBarSize();
44     int scaledScrollBarSizeDp = pxToDp(viewConfiguration.getScaledScrollBarSize());
45     if (Build.VERSION.SDK_INT >= O_MR1) {
46       assertThat(scrollBarSize).isEqualTo(4);
47       assertThat(scaledScrollBarSizeDp).isEqualTo(4);
48     } else {
49       assertThat(scrollBarSize).isEqualTo(10);
50       assertThat(scaledScrollBarSizeDp).isEqualTo(10);
51     }
52   }
53 
54   @Test
isFadingMarqueeEnabled_returnsFalse()55   public void isFadingMarqueeEnabled_returnsFalse() throws Exception {
56     // isFadingMarqueeEnabled is a '@hide' method.
57     boolean isFadingMarqueeEnabled =
58         callMethod(viewConfiguration, "isFadingMarqueeEnabled", Boolean.class);
59     assertThat(isFadingMarqueeEnabled).isFalse();
60   }
61 
62   @Config(qualifiers = "hdpi")
63   @Test
overfling_distance()64   public void overfling_distance() {
65     assertThat(density).isEqualTo(1.5f);
66     assertThat(viewConfiguration.getScaledOverflingDistance()).isEqualTo(9);
67   }
68 
pxToDp(int px)69   public int pxToDp(int px) {
70     return Math.round(px / density);
71   }
72 
callMethod(Object obj, String methodName, Class<T> returnType)73   public <T> T callMethod(Object obj, String methodName, Class<T> returnType) throws Exception {
74     Method method = obj.getClass().getMethod(methodName);
75     return returnType.cast(method.invoke(obj));
76   }
77 }
78