package org.robolectric.shadows;

import android.content.res.Configuration;
import java.util.Locale;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.RealObject;

import static org.robolectric.shadow.api.Shadow.directlyOn;

/**
 * Shadow for {@link android.content.res.Configuration}.
 */
@Implements(Configuration.class)
public class ShadowConfiguration {


}

package org.robolectric.shadows;

import android.content.res.Configuration;
import java.util.Locale;

import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.RealObject;

import static org.robolectric.shadow.api.Shadow.directlyOn;

/**
 * Shadow for {@link android.content.res.Configuration}.
 * @deprecated This will be removed in Robolectric 3.4 - {@link Configuration} is pure Java so there is no need for a
 * shadow to exist. The methods have been preserved but marked deprecated to prevent build breakages but in this
 * version implementation has been modified to simply call through to the Framework code which may in some cases cause
 * test failures due to the way the shadow diverged in behaviour from the Framework code. Some notes have been added
 * to help you migrate in these cases.
 *
 * Some notes to help you migrate:-
 *
 * <ol>
 * <li>{@link #setLocale} only exists in API 17+ so calling this on earlier APIs will fail with {@link NoSuchMethodException}
 * <li>{@link #setToDefaults()} overrides the frameworks natural defaults to set the flags for
 *     {@link Configuration#screenLayout} to include {@link Configuration#SCREENLAYOUT_LONG_NO} and
 *     {@link Configuration#SCREENLAYOUT_SIZE_NORMAL}
 * <li>{@link #overrideQualifiers} and {@link #getQualifiers()} have no effect and can be removed.
 * </ol>
 */
@Deprecated
@Implements(Configuration.class)
public class ShadowConfiguration {

  @RealObject
  private Configuration realConfiguration;

  @Deprecated
  @Implementation
  public void setTo(Configuration o) {
    directlyOn(realConfiguration, Configuration.class).setTo(o);
  }

  @Deprecated
  @Implementation
  public void setToDefaults() {
    directlyOn(realConfiguration, Configuration.class).setToDefaults();
  }

  @Deprecated
  @Implementation
  public void setLocale( Locale l ) {
    directlyOn(realConfiguration, Configuration.class).setLocale(l);
  }

  @Deprecated
  public void overrideQualifiers(String qualifiers) {
    // Never worked.
  }

  /**
   * @deprecated  Use {@link RuntimeEnvironment#getQualifiers()} although there should be no reason to obtain this
   * since it is typically set in tests through {@link Config#qualifiers()} so you should use a constant in these cases.
   */
  @Deprecated
  public String getQualifiers() {
    return RuntimeEnvironment.getQualifiers();
  }
}

Mark the common methods @Deprecated.
Mark the common methods @Deprecated.

This avoids build breakages and allows users to upgrade Robolectric
without breakges as they migrate. Implementation has been changed to
call through by default. In some cases this will result in test failures
but this is highly unlikely. In such cases Javadoc has been added to
illustrate how the deprecated ShadowConfiguration had diverged from the
framework code.
