All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.robolectric.android.Bootstrap Maven / Gradle / Ivy

package org.robolectric.android;

import android.content.res.Configuration;
import android.os.Build;
import android.os.Build.VERSION_CODES;
import android.util.DisplayMetrics;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.res.Qualifiers;
import org.robolectric.shadows.ShadowDisplayManager;
import org.robolectric.shadows.ShadowWindowManagerImpl;

public class Bootstrap {

  public static void setUpDisplay(Configuration configuration, DisplayMetrics displayMetrics) {
    if (Build.VERSION.SDK_INT == VERSION_CODES.JELLY_BEAN) {
      ShadowWindowManagerImpl.configureDefaultDisplayForJBOnly(configuration, displayMetrics);
    } else {
      ShadowDisplayManager.configureDefaultDisplay(configuration, displayMetrics);
    }
  }

  public static void applyQualifiers(String qualifiersStrs, int apiLevel,
      Configuration configuration, DisplayMetrics displayMetrics) {

    String[] qualifiersParts = qualifiersStrs.split(" ", 0);
    int i = qualifiersParts.length - 1;
    // find the index of the left-most qualifier string that doesn't start with '+'
    for (; i >= 0 ; i--) {
      String qualifiersStr = qualifiersParts[i];
      if (qualifiersStr.startsWith("+")) {
        qualifiersParts[i] = qualifiersStr.substring(1);
      } else {
        break;
      }
    }

    for (i = (i < 0) ? 0 : i; i < qualifiersParts.length ; i++) {
      String qualifiersStr = qualifiersParts[i];
      int platformVersion = Qualifiers.getPlatformVersion(qualifiersStr);
      if (platformVersion != -1 && platformVersion != apiLevel) {
        throw new IllegalArgumentException(
            "Cannot specify conflicting platform version in qualifiers: \"" + qualifiersStr + "\"");
      }

      Qualifiers qualifiers = Qualifiers.parse(qualifiersStr);

      DeviceConfig.applyToConfiguration(qualifiers, apiLevel, configuration, displayMetrics);
    }

    DeviceConfig.applyRules(configuration, displayMetrics, apiLevel);

    fixJellyBean(configuration, displayMetrics);
  }

  private static void fixJellyBean(Configuration configuration, DisplayMetrics displayMetrics) {
    if (RuntimeEnvironment.getApiLevel() < Build.VERSION_CODES.KITKAT) {
      int widthPx = (int) (configuration.screenWidthDp * displayMetrics.density);
      int heightPx = (int) (configuration.screenHeightDp * displayMetrics.density);
      displayMetrics.widthPixels = displayMetrics.noncompatWidthPixels = widthPx;
      displayMetrics.heightPixels = displayMetrics.noncompatHeightPixels = heightPx;
      displayMetrics.xdpi = displayMetrics.noncompatXdpi = displayMetrics.densityDpi;
      displayMetrics.ydpi = displayMetrics.noncompatYdpi = displayMetrics.densityDpi;
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy