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);
         }