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