1 // Copyright (c) 2014 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 package org.xwalk.core.internal;
7 import android.content.Context;
8 import android.util.Log;
10 import java.lang.reflect.Field;
11 import java.lang.reflect.Modifier;
13 class XWalkInternalResources {
14 private static final String TAG = "XWalkInternalResources";
16 private static boolean loaded = false;
17 private final static String INTERNAL_RESOURCE_CLASSES[] = {
18 "org.chromium.content.R",
20 "org.xwalk.core.internal.R"
22 private final static String GENERATED_RESOURCE_CLASS = "org.xwalk.core.R";
24 // Doing org.chromium.content.R.<class>.<name> = org.xwalk.core.R.<class>.<name>
25 // Use reflection to iterate over the target class is to avoid hardcode.
26 private static void doResetIds(Context context) {
27 ClassLoader classLoader = context.getClassLoader();
28 for (String resourceClass : INTERNAL_RESOURCE_CLASSES) {
30 Class<?> internalResource = classLoader.loadClass(resourceClass);
31 Class<?>[] innerClazzs = internalResource.getClasses();
32 for (Class<?> innerClazz : innerClazzs) {
33 Class<?> generatedInnerClazz;
34 String generatedInnerClassName = innerClazz.getName().replace(
35 resourceClass, GENERATED_RESOURCE_CLASS);
37 generatedInnerClazz = classLoader.loadClass(generatedInnerClassName);
38 } catch (ClassNotFoundException e) {
39 Log.w(TAG, generatedInnerClassName + "is not found.");
42 Field[] fields = innerClazz.getFields();
43 for (Field field : fields) {
44 // It's final means we are probably not used as library project.
45 if (Modifier.isFinal(field.getModifiers())) continue;
47 int value = generatedInnerClazz.getField(field.getName()).getInt(null);
48 field.setInt(null, value);
49 } catch (IllegalAccessException e) {
50 Log.w(TAG, generatedInnerClazz.getName() + "." +
51 field.getName() + " is not accessable.");
52 } catch (IllegalArgumentException e) {
53 Log.w(TAG, generatedInnerClazz.getName() + "." +
54 field.getName() + " is not int.");
55 } catch (NoSuchFieldException e) {
56 Log.w(TAG, generatedInnerClazz.getName() + "." +
57 field.getName() + " is not found.");
61 } catch (ClassNotFoundException e) {
62 Log.w(TAG, resourceClass + "is not found.");
67 static void resetIds(Context context) {