aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Boekenoogen <jboekeno@google.com>2013-06-25 15:41:03 -0700
committerJon Boekenoogen <jboekeno@google.com>2013-06-26 13:19:42 -0700
commit03e9d1058a5f759d0e356563d7e8499ff71b5165 (patch)
tree411b3a854468ce4ccc29844dec37ae6861647889
parent6c4c3319fa919150b321c8b89987c86fbeeea2c0 (diff)
downloadrobolectric-03e9d1058a5f759d0e356563d7e8499ff71b5165.tar.gz
Fix resource loading in robolectric for API 18+.
Look at resource folders in the SDK starting at 18 and continue backwards for 5 sdk versions. Bug: 9573511 Change-Id: Ib1f92a247e572be41c4a74ba0556988ae306a0ea
-rw-r--r--src/main/java/com/xtremelabs/robolectric/res/ResourceLoader.java87
1 files changed, 47 insertions, 40 deletions
diff --git a/src/main/java/com/xtremelabs/robolectric/res/ResourceLoader.java b/src/main/java/com/xtremelabs/robolectric/res/ResourceLoader.java
index 90b788882..aa067f0ca 100644
--- a/src/main/java/com/xtremelabs/robolectric/res/ResourceLoader.java
+++ b/src/main/java/com/xtremelabs/robolectric/res/ResourceLoader.java
@@ -1,5 +1,12 @@
package com.xtremelabs.robolectric.res;
+import static com.xtremelabs.robolectric.Robolectric.shadowOf;
+
+import com.xtremelabs.robolectric.Robolectric;
+import com.xtremelabs.robolectric.shadows.ShadowContextWrapper;
+import com.xtremelabs.robolectric.util.I18nException;
+import com.xtremelabs.robolectric.util.PropertiesHelper;
+
import android.R;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
@@ -10,16 +17,18 @@ import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
-import com.xtremelabs.robolectric.Robolectric;
-import com.xtremelabs.robolectric.shadows.ShadowContextWrapper;
-import com.xtremelabs.robolectric.util.I18nException;
-import com.xtremelabs.robolectric.util.PropertiesHelper;
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.lang.reflect.Field;
-import java.util.*;
-
-import static com.xtremelabs.robolectric.Robolectric.shadowOf;
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Set;
public class ResourceLoader {
private static final FileFilter MENU_DIR_FILE_FILTER = new FileFilter() {
@@ -262,18 +271,32 @@ public class ResourceLoader {
}
private String getPathToAndroidResources() {
- String resourcePath;
- if ( ( resourcePath = getAndroidResourcePathFromLocalProperties() ) != null ) {
- return resourcePath;
- } else if ( ( resourcePath = getAndroidResourcePathFromSystemEnvironment() ) != null ) {
- return resourcePath;
- } else if ( ( resourcePath = getAndroidResourcePathFromSystemProperty() ) != null ) {
- return resourcePath;
- } else if ( ( resourcePath = getAndroidResourcePathByExecingWhichAndroid() ) != null ) {
- return resourcePath;
+ String resFolder = getAndroidResourcePathFromLocalProperties
+ if (resFolder == null) {
+ resFolder = getAndroidResourcePathFromSystemEnvironment();
+ if (resFolder == null) {
+ resFolder = getAndroidResourcePathFromSystemProperty();
+ if (resFolder == null) {
+ resFolder = getAndroidResourcePathByExecingWhichAndroid();
+ }
+ }
+ }
+
+ // Go through last 5 sdk versions looking for resource folders.
+ if (resFolder != null) {
+ for (int i = sdkVersion; i >= sdkVersion - 5 && i >= 4; i--) {
+ File resourcePath = new File(resFolder, getAndroidResourceSubPath(i));
+ if (resourcePath.exists()) {
+ return resourcePath.getAbsolutePath();
+ } else {
+ System.out.println("WARNING: Unable to find Android resources at: " +
+ resourcePath.toString() + " continuing.");
+ }
+ }
+ } else {
+ System.out.println("WARNING: Unable to find path to Android SDK");
}
- System.out.println( "WARNING: Unable to find path to Android SDK" );
return null;
}
@@ -291,10 +314,7 @@ public class ResourceLoader {
try {
localProperties.load( new FileInputStream( localPropertiesFile ) );
PropertiesHelper.doSubstitutions( localProperties );
- String sdkPath = localProperties.getProperty( "sdk.dir" );
- if ( sdkPath != null ) {
- return getResourcePathFromSdkPath( sdkPath );
- }
+ return localProperties.getProperty( "sdk.dir" );
} catch ( IOException e ) {
// fine, we'll try something else
}
@@ -304,20 +324,12 @@ public class ResourceLoader {
private String getAndroidResourcePathFromSystemEnvironment() {
// Hand tested
- String resourcePath = System.getenv().get( "ANDROID_HOME" );
- if ( resourcePath != null ) {
- return new File( resourcePath, getAndroidResourceSubPath() ).toString();
- }
- return null;
+ return System.getenv().get( "ANDROID_HOME" );
}
private String getAndroidResourcePathFromSystemProperty() {
// this is used by the android-maven-plugin
- String resourcePath = System.getProperty( "android.sdk.path" );
- if ( resourcePath != null ) {
- return new File( resourcePath, getAndroidResourceSubPath() ).toString();
- }
- return null;
+ return System.getProperty( "android.sdk.path" );
}
private String getAndroidResourcePathByExecingWhichAndroid() {
@@ -328,7 +340,7 @@ public class ResourceLoader {
Process process = Runtime.getRuntime().exec( new String[] { "which", "android" } );
String sdkPath = new BufferedReader( new InputStreamReader( process.getInputStream() ) ).readLine();
if ( sdkPath != null && sdkPath.endsWith( "tools/android" ) ) {
- return getResourcePathFromSdkPath( sdkPath.substring( 0, sdkPath.indexOf( "tools/android" ) ) );
+ return sdkPath.substring(0, sdkPath.indexOf( "tools/android"));
}
} catch ( IOException e ) {
// fine we'll try something else
@@ -336,13 +348,8 @@ public class ResourceLoader {
return null;
}
- private String getResourcePathFromSdkPath( String sdkPath ) {
- File androidResourcePath = new File( sdkPath, getAndroidResourceSubPath() );
- return androidResourcePath.exists() ? androidResourcePath.toString() : null;
- }
-
- private String getAndroidResourceSubPath() {
- return "platforms/android-" + sdkVersion + "/data/res";
+ private static String getAndroidResourceSubPath(int version) {
+ return "platforms/android-" + version + "/data/res";
}
static boolean isLayoutDirectory( String path ) {