• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.android;
2 
3 import android.content.res.AssetManager;
4 import android.content.res.Configuration;
5 import android.content.res.Resources;
6 import android.util.DisplayMetrics;
7 import org.robolectric.res.Qualifiers;
8 import org.robolectric.shadows.ShadowDateUtils;
9 import org.robolectric.shadows.ShadowDisplayManager;
10 
11 public class Bootstrap {
12 
13   private static Configuration configuration = new Configuration();
14   private static DisplayMetrics displayMetrics = new DisplayMetrics();
15   private static Resources displayResources;
16   /** internal only */
17   public static boolean displaySet = false;
18 
getConfiguration()19   public static Configuration getConfiguration() {
20     if (displayResources != null) {
21       return displayResources.getConfiguration();
22     }
23     return Bootstrap.configuration;
24   }
25 
getDisplayMetrics()26   public static DisplayMetrics getDisplayMetrics() {
27     if (displayResources != null) {
28       return displayResources.getDisplayMetrics();
29     }
30     return Bootstrap.displayMetrics;
31   }
32 
33   /** internal only */
setDisplayConfiguration( Configuration configuration, DisplayMetrics displayMetrics)34   public static void setDisplayConfiguration(
35       Configuration configuration, DisplayMetrics displayMetrics) {
36     Bootstrap.configuration = configuration;
37     Bootstrap.displayMetrics = displayMetrics;
38   }
39 
40   /** internal only */
resetDisplayConfiguration()41   public static void resetDisplayConfiguration() {
42     configuration = new Configuration();
43     displayMetrics = new DisplayMetrics();
44     displayResources = null;
45     displaySet = false;
46   }
47 
48   /** internal only */
updateDisplayResources( Configuration configuration, DisplayMetrics displayMetrics)49   public static void updateDisplayResources(
50       Configuration configuration, DisplayMetrics displayMetrics) {
51     if (displayResources == null) {
52       displayResources =
53           new Resources(
54               AssetManager.getSystem(), Bootstrap.displayMetrics, Bootstrap.configuration);
55     }
56     displayResources.updateConfiguration(configuration, displayMetrics);
57   }
58 
59   /** internal only */
setUpDisplay()60   public static void setUpDisplay() {
61     if (!displaySet) {
62       displaySet = true;
63       ShadowDisplayManager.configureDefaultDisplay(configuration, displayMetrics);
64     }
65   }
66 
applyQualifiers( String qualifiersStrs, int apiLevel, Configuration configuration, DisplayMetrics displayMetrics)67   public static void applyQualifiers(
68       String qualifiersStrs,
69       int apiLevel,
70       Configuration configuration,
71       DisplayMetrics displayMetrics) {
72 
73     String[] qualifiersParts = qualifiersStrs.split(" ", 0);
74     int i = qualifiersParts.length - 1;
75     // find the index of the left-most qualifier string that doesn't start with '+'
76     for (; i >= 0; i--) {
77       String qualifiersStr = qualifiersParts[i];
78       if (qualifiersStr.startsWith("+")) {
79         qualifiersParts[i] = qualifiersStr.substring(1);
80       } else {
81         break;
82       }
83     }
84 
85     for (i = (i < 0) ? 0 : i; i < qualifiersParts.length; i++) {
86       String qualifiersStr = qualifiersParts[i];
87       int platformVersion = Qualifiers.getPlatformVersion(qualifiersStr);
88       if (platformVersion != -1 && platformVersion != apiLevel) {
89         throw new IllegalArgumentException(
90             "Cannot specify conflicting platform version in qualifiers: \"" + qualifiersStr + "\"");
91       }
92 
93       Qualifiers qualifiers = Qualifiers.parse(qualifiersStr);
94 
95       DeviceConfig.applyToConfiguration(qualifiers, apiLevel, configuration, displayMetrics);
96     }
97 
98     DeviceConfig.applyRules(configuration, displayMetrics, apiLevel);
99 
100     // DateUtils has a static cache of the last Configuration, so it may need to be reset.
101     ShadowDateUtils.resetLastConfig();
102   }
103 }
104