Add fallback mechanism for resources resolved via introspection.
In case of resources not resolve from hard-coded 'com.android.browser.R'
package name, fallback on resolving it from dynamically queried
package name.
Change-Id: Ifb9ca330ba8efd200ce3ccb116fa9aa3e52fb885
diff --git a/src/com/android/browser/PageDialogsHandler.java b/src/com/android/browser/PageDialogsHandler.java
index b1e1d44..67078b5 100644
--- a/src/com/android/browser/PageDialogsHandler.java
+++ b/src/com/android/browser/PageDialogsHandler.java
@@ -354,6 +354,7 @@
SslError error) {
View certificateView = inflateCertificateView(certificate, mContext);
Resources res = Resources.getSystem();
+ // load 'android.R.placeholder' via introspection, since it's not a public resource ID
int placeholder_id = res.getIdentifier("placeholder", "id", "android");
final LinearLayout placeholder =
(LinearLayout)certificateView.findViewById(placeholder_id);
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index f948203..ea7a511 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -202,7 +202,7 @@
private boolean mFullScreen = false;
/**
- * See {@link #clearBackStackWhenItemAdded(String)}.
+ * See {@link #clearBackStackWhenItemAdded(java.util.regex.Pattern)}.
*/
private Pattern mClearHistoryUrlPattern;
diff --git a/src/com/android/browser/homepages/RequestHandler.java b/src/com/android/browser/homepages/RequestHandler.java
index 8dbd0ef..df171b4 100644
--- a/src/com/android/browser/homepages/RequestHandler.java
+++ b/src/com/android/browser/homepages/RequestHandler.java
@@ -235,6 +235,10 @@
Resources res = mContext.getResources();
String packageName = R.class.getPackage().getName();
int id = res.getIdentifier(fileName, null, packageName);
+ if (id == 0) {
+ id = res.getIdentifier(fileName, null, mContext.getPackageName());
+ }
+
if (id != 0) {
InputStream in = res.openRawResource(id);
byte[] buf = new byte[4096];
diff --git a/src/com/android/browser/homepages/Template.java b/src/com/android/browser/homepages/Template.java
index cf31bbd..60cfe2f 100644
--- a/src/com/android/browser/homepages/Template.java
+++ b/src/com/android/browser/homepages/Template.java
@@ -236,7 +236,6 @@
private static String replaceConsts(Context context, String template) {
final Pattern pattern = Pattern.compile("<%@\\s*(\\w+/\\w+)\\s*%>");
final Resources res = context.getResources();
- final String packageName = R.class.getPackage().getName();
Matcher m = pattern.matcher(template);
StringBuffer sb = new StringBuffer();
while (m.find()) {
@@ -244,7 +243,11 @@
if (name.startsWith("drawable/")) {
m.appendReplacement(sb, "res/" + name);
} else {
+ final String packageName = R.class.getPackage().getName();
int id = res.getIdentifier(name, null, packageName);
+ if(id == 0) {
+ id = res.getIdentifier(name, null, context.getPackageName());
+ }
if (id != 0) {
TypedValue value = new TypedValue();
res.getValue(id, value, true);
diff --git a/src/com/android/browser/mynavigation/MyNavigationRequestHandler.java b/src/com/android/browser/mynavigation/MyNavigationRequestHandler.java
index 1de89d4..d7b6864 100755
--- a/src/com/android/browser/mynavigation/MyNavigationRequestHandler.java
+++ b/src/com/android/browser/mynavigation/MyNavigationRequestHandler.java
@@ -144,8 +144,11 @@
void writeResource(String fileName) throws IOException {
Resources res = mContext.getResources();
- String packageName = R.class.getPackage().getName();
- int id = res.getIdentifier(fileName, null, packageName);
+ int id = res.getIdentifier(fileName, null, mContext.getPackageName());
+ if (id == 0) {
+ String packageName = R.class.getPackage().getName();
+ id = res.getIdentifier(fileName, null, packageName);
+ }
if (id != 0) {
InputStream in = res.openRawResource(id);
byte[] buf = new byte[4096];
diff --git a/src/com/android/browser/mynavigation/MyNavigationTemplate.java b/src/com/android/browser/mynavigation/MyNavigationTemplate.java
index 85d1baf..efaa3b2 100755
--- a/src/com/android/browser/mynavigation/MyNavigationTemplate.java
+++ b/src/com/android/browser/mynavigation/MyNavigationTemplate.java
@@ -259,7 +259,6 @@
private static String replaceConsts(Context context, String template) {
final Pattern pattern = Pattern.compile("<%@\\s*(\\w+/\\w+)\\s*%>");
final Resources res = context.getResources();
- final String packageName = R.class.getPackage().getName();
Matcher m = pattern.matcher(template);
StringBuffer sb = new StringBuffer();
while (m.find()) {
@@ -267,7 +266,11 @@
if (name.startsWith("drawable/")) {
m.appendReplacement(sb, "res/" + name);
} else {
+ final String packageName = R.class.getPackage().getName();
int id = res.getIdentifier(name, null, packageName);
+ if(id == 0) {
+ id = res.getIdentifier(name, null, context.getPackageName());
+ }
if (id != 0) {
TypedValue value = new TypedValue();
res.getValue(id, value, true);
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index 0535e59..e2e22c9 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -691,9 +691,18 @@
String thumbFileName = preloads[i+1];
int favIconId = res.getIdentifier(faviconFileName, "raw",
- R.class.getPackage().getName());
+ R.class.getPackage().getName());
+ if(favIconId == 0) {
+ favIconId = res.getIdentifier(faviconFileName, "raw",
+ getContext().getPackageName());
+ }
+
int thumbId = res.getIdentifier(thumbFileName, "raw",
- R.class.getPackage().getName());
+ R.class.getPackage().getName());
+ if(thumbId == 0) {
+ thumbId = res.getIdentifier(thumbFileName, "raw",
+ getContext().getPackageName());
+ }
byte[] thumb = null, favicon = null;
diff --git a/src/com/android/browser/search/SearchEngineInfo.java b/src/com/android/browser/search/SearchEngineInfo.java
index ec304f6..f0b478b 100644
--- a/src/com/android/browser/search/SearchEngineInfo.java
+++ b/src/com/android/browser/search/SearchEngineInfo.java
@@ -61,10 +61,13 @@
*/
public SearchEngineInfo(Context context, String name) throws IllegalArgumentException {
mName = name;
- Resources res = context.getResources();
+ final Resources res = context.getResources();
String packageName = R.class.getPackage().getName();
int id_data = res.getIdentifier(name, "array", packageName);
+ if(id_data == 0) {
+ id_data = res.getIdentifier(name, "array", context.getPackageName());
+ }
if (id_data == 0) {
throw new IllegalArgumentException("No resources found for " + name);
}