ResourceProvider.java revision c8a03efcd8addbebb32b708b67efa869591e8ef7
1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.webview.chromium;
18
19import android.content.Context;
20import android.content.res.Resources;
21import android.os.Build;
22import android.util.TypedValue;
23
24import org.chromium.android_webview.AwResource;
25
26import java.lang.reflect.Field;
27
28public class ResourceProvider {
29    private static boolean sInitialized;
30
31    static void registerResources(Context context) {
32        if (sInitialized) {
33            return;
34        }
35
36        AwResource.setResources(context.getResources());
37
38        Resources.Theme theme = context.getTheme();
39
40        // dimen
41
42        org.chromium.content.R.dimen.link_preview_overlay_radius =
43                com.android.internal.R.dimen.webviewchromium_link_preview_overlay_radius;
44
45        // drawable
46
47        org.chromium.content.R.drawable.ic_menu_share_holo_light =
48                resolveThemeAttr(theme, com.android.internal.R.attr.actionModeShareDrawable);
49        org.chromium.content.R.drawable.ic_menu_search_holo_light =
50                resolveThemeAttr(theme, com.android.internal.R.attr.actionModeWebSearchDrawable);
51        org.chromium.content.R.drawable.ondemand_overlay =
52                com.android.internal.R.drawable.webviewchromium_ondemand_overlay;
53
54        org.chromium.ui.R.drawable.color_picker_advanced_select_handle =
55                com.android.internal.R.drawable.webviewchromium_color_picker_advanced_select_handle;
56
57        // id
58
59//        org.chromium.content.R.id.month = com.android.internal.R.id.webviewchromium_month;
60        org.chromium.content.R.id.year = com.android.internal.R.id.webviewchromium_year;
61        org.chromium.content.R.id.pickers = com.android.internal.R.id.webviewchromium_pickers;
62        org.chromium.content.R.id.date_picker = com.android.internal.R.id.webviewchromium_date_picker;
63        org.chromium.content.R.id.time_picker = com.android.internal.R.id.webviewchromium_time_picker;
64
65        org.chromium.ui.R.id.selected_color_view =
66                com.android.internal.R.id.webviewchromium_color_picker_selected_color_view;
67        org.chromium.ui.R.id.title =
68                com.android.internal.R.id.webviewchromium_color_picker_title;
69        org.chromium.ui.R.id.more_colors_button =
70                com.android.internal.R.id.webviewchromium_color_picker_more_colors_button;
71        org.chromium.ui.R.id.color_picker_advanced =
72                com.android.internal.R.id.webviewchromium_color_picker_advanced;
73        org.chromium.ui.R.id.color_picker_simple =
74                com.android.internal.R.id.webviewchromium_color_picker_simple;
75        org.chromium.ui.R.id.more_colors_button_border =
76                com.android.internal.R.id.webviewchromium_color_picker_more_colors_button_border;
77        org.chromium.ui.R.id.color_picker_simple_border =
78                com.android.internal.R.id.webviewchromium_color_picker_simple_border;
79        org.chromium.ui.R.id.gradient =
80                com.android.internal.R.id.webviewchromium_color_picker_gradient;
81        org.chromium.ui.R.id.text =
82                com.android.internal.R.id.webviewchromium_color_picker_text;
83        org.chromium.ui.R.id.seek_bar =
84                com.android.internal.R.id.webviewchromium_color_picker_seek_bar;
85
86        // layout
87
88        org.chromium.content.R.layout.date_time_picker_dialog =
89                com.android.internal.R.layout.webviewchromium_date_time_picker_dialog;
90 //       org.chromium.content.R.layout.month_picker =
91 //               com.android.internal.R.layout.webviewchromium_month_picker;
92
93        org.chromium.ui.R.layout.color_picker_dialog_title =
94                com.android.internal.R.layout.webviewchromium_color_picker_dialog_title;
95        org.chromium.ui.R.layout.color_picker_dialog_content =
96                com.android.internal.R.layout.webviewchromium_color_picker_dialog_content;
97        org.chromium.ui.R.layout.color_picker_advanced_component =
98                com.android.internal.R.layout.webviewchromium_color_picker_advanced_component;
99
100        // string
101
102        org.chromium.content.R.string.accessibility_content_view =
103                com.android.internal.R.string.webviewchromium_accessibility_content_view;
104        org.chromium.content.R.string.accessibility_date_picker_month =
105                com.android.internal.R.string.webviewchromium_accessibility_date_picker_month;
106        org.chromium.content.R.string.accessibility_date_picker_year =
107                com.android.internal.R.string.webviewchromium_accessibility_date_picker_year;
108        org.chromium.content.R.string.accessibility_datetime_picker_date =
109                com.android.internal.R.string.webviewchromium_accessibility_datetime_picker_date;
110        org.chromium.content.R.string.accessibility_datetime_picker_time =
111                com.android.internal.R.string.webviewchromium_accessibility_datetime_picker_time;
112        org.chromium.content.R.string.actionbar_share =
113                com.android.internal.R.string.share;
114        org.chromium.content.R.string.actionbar_web_search =
115                com.android.internal.R.string.websearch;
116        org.chromium.content.R.string.date_picker_dialog_clear =
117                com.android.internal.R.string.webviewchromium_date_picker_dialog_clear;
118        org.chromium.content.R.string.date_picker_dialog_set =
119                com.android.internal.R.string.webviewchromium_date_picker_dialog_set;
120        org.chromium.content.R.string.date_picker_dialog_title =
121                com.android.internal.R.string.webviewchromium_date_picker_dialog_title;
122        org.chromium.content.R.string.date_time_picker_dialog_title =
123                com.android.internal.R.string.webviewchromium_date_time_picker_dialog_title;
124        org.chromium.content.R.string.media_player_error_button =
125                com.android.internal.R.string.webviewchromium_media_player_error_button;
126        org.chromium.content.R.string.media_player_error_text_invalid_progressive_playback =
127                com.android.internal.R.string.webviewchromium_media_player_error_text_invalid_progressive_playback;
128        org.chromium.content.R.string.media_player_error_text_unknown =
129                com.android.internal.R.string.webviewchromium_media_player_error_text_unknown;
130        org.chromium.content.R.string.media_player_error_title =
131                com.android.internal.R.string.webviewchromium_media_player_error_title;
132        org.chromium.content.R.string.media_player_loading_video =
133                com.android.internal.R.string.webviewchromium_media_player_loading_video;
134        org.chromium.content.R.string.month_picker_dialog_title =
135                com.android.internal.R.string.webviewchromium_month_picker_dialog_title;
136
137        org.chromium.ui.R.string.low_memory_error =
138                com.android.internal.R.string.webviewchromium_low_memory_error;
139        org.chromium.ui.R.string.opening_file_error =
140                com.android.internal.R.string.webviewchromium_opening_file_error;
141        org.chromium.ui.R.string.color_picker_button_more =
142                com.android.internal.R.string.webviewchromium_color_picker_button_more;
143        org.chromium.ui.R.string.color_picker_hue =
144                com.android.internal.R.string.webviewchromium_color_picker_hue;
145        org.chromium.ui.R.string.color_picker_saturation =
146                com.android.internal.R.string.webviewchromium_color_picker_saturation;
147        org.chromium.ui.R.string.color_picker_value =
148                com.android.internal.R.string.webviewchromium_color_picker_value;
149        org.chromium.ui.R.string.color_picker_button_set =
150                com.android.internal.R.string.webviewchromium_color_picker_button_set;
151        org.chromium.ui.R.string.color_picker_button_cancel =
152                com.android.internal.R.string.webviewchromium_color_picker_button_cancel;
153        org.chromium.ui.R.string.color_picker_dialog_title =
154                com.android.internal.R.string.webviewchromium_color_picker_dialog_title;
155
156        if (Build.IS_DEBUGGABLE) {
157            // Ensure that we aren't missing any resource mappings.
158 //           verifyFields(org.chromium.content.R.class);
159 //           verifyFields(org.chromium.ui.R.class);
160        }
161
162        // Resources needed by android_webview/
163
164        AwResource.RAW_LOAD_ERROR = com.android.internal.R.raw.loaderror;
165        AwResource.RAW_NO_DOMAIN = com.android.internal.R.raw.nodomain;
166
167        AwResource.STRING_DEFAULT_TEXT_ENCODING =
168                com.android.internal.R.string.default_text_encoding;
169
170        sInitialized = true;
171    }
172
173    private static int resolveThemeAttr(Resources.Theme theme, int attr) {
174        TypedValue valueHolder = new TypedValue();
175        theme.resolveAttribute(attr, valueHolder, true);
176        return valueHolder.resourceId;
177    }
178
179    // Verify that all the fields of the inner classes of |R| have a valid mapping.
180    // This ensures that if a resource is added upstream, we won't miss providing
181    // a mapping downstream.
182    private static void verifyFields(Class<?> R) {
183        for (Class<?> c : R.getDeclaredClasses()) {
184            verifyFields(c);  // recursively check inner classes.
185        }
186
187        for (Field f : R.getDeclaredFields()) {
188            try {
189                if (f.getInt(null) == 0) {
190                    throw new RuntimeException("Missing resource mapping for " +
191                            R.getName() + "." + f.getName());
192                }
193            } catch (IllegalAccessException e) { }
194        }
195    }
196}
197