@Implementation
  public void setTo(Configuration o) {
    // commented out lines are coming in a newer version of Android SDK

    realConfiguration.fontScale = o.fontScale;
    realConfiguration.mcc = o.mcc;
    realConfiguration.mnc = o.mnc;
    if (o.locale != null) {
      realConfiguration.locale = (Locale) o.locale.clone();
      // realConfiguration.textLayoutDirection = o.textLayoutDirection;
    }
    // realConfiguration.userSetLocale = o.userSetLocale;
    realConfiguration.touchscreen = o.touchscreen;
    realConfiguration.keyboard = o.keyboard;
    realConfiguration.keyboardHidden = o.keyboardHidden;
    realConfiguration.hardKeyboardHidden = o.hardKeyboardHidden;
    realConfiguration.navigation = o.navigation;
    realConfiguration.navigationHidden = o.navigationHidden;
    realConfiguration.orientation = o.orientation;
    realConfiguration.screenLayout = o.screenLayout;
    realConfiguration.uiMode = o.uiMode;
    realConfiguration.screenWidthDp = o.screenWidthDp;
    realConfiguration.screenHeightDp = o.screenHeightDp;
    realConfiguration.smallestScreenWidthDp = o.smallestScreenWidthDp;
    // realConfiguration.compatScreenWidthDp = o.compatScreenWidthDp;
    // realConfiguration.compatScreenHeightDp = o.compatScreenHeightDp;
    // realConfiguration.compatSmallestScreenWidthDp = o.compatSmallestScreenWidthDp;
    // realConfiguration.seq = o.seq;
  }
  private Configuration getConfiguration() {
    Configuration config = new Configuration();

    HardwareConfig hardwareConfig = mParams.getHardwareConfig();

    ScreenSize screenSize = hardwareConfig.getScreenSize();
    if (screenSize != null) {
      switch (screenSize) {
        case SMALL:
          config.screenLayout |= Configuration.SCREENLAYOUT_SIZE_SMALL;
          break;
        case NORMAL:
          config.screenLayout |= Configuration.SCREENLAYOUT_SIZE_NORMAL;
          break;
        case LARGE:
          config.screenLayout |= Configuration.SCREENLAYOUT_SIZE_LARGE;
          break;
        case XLARGE:
          config.screenLayout |= Configuration.SCREENLAYOUT_SIZE_XLARGE;
          break;
      }
    }

    Density density = hardwareConfig.getDensity();
    if (density == null) {
      density = Density.MEDIUM;
    }

    config.screenWidthDp = hardwareConfig.getScreenWidth() / density.getDpiValue();
    config.screenHeightDp = hardwareConfig.getScreenHeight() / density.getDpiValue();
    if (config.screenHeightDp < config.screenWidthDp) {
      //noinspection SuspiciousNameCombination
      config.smallestScreenWidthDp = config.screenHeightDp;
    } else {
      config.smallestScreenWidthDp = config.screenWidthDp;
    }
    config.densityDpi = density.getDpiValue();

    // never run in compat mode:
    config.compatScreenWidthDp = config.screenWidthDp;
    config.compatScreenHeightDp = config.screenHeightDp;

    ScreenOrientation orientation = hardwareConfig.getOrientation();
    if (orientation != null) {
      switch (orientation) {
        case PORTRAIT:
          config.orientation = Configuration.ORIENTATION_PORTRAIT;
          break;
        case LANDSCAPE:
          config.orientation = Configuration.ORIENTATION_LANDSCAPE;
          break;
        case SQUARE:
          //noinspection deprecation
          config.orientation = Configuration.ORIENTATION_SQUARE;
          break;
      }
    } else {
      config.orientation = Configuration.ORIENTATION_UNDEFINED;
    }

    // TODO: fill in more config info.

    return config;
  }