1 package org.coolreader.crengine; 2 3 import android.util.Log; 4 5 import org.coolreader.R; 6 7 import java.util.Locale; 8 9 public interface Settings { 10 public static final String PROP_PAGE_BACKGROUND_IMAGE ="background.image"; 11 public static final String PROP_PAGE_BACKGROUND_IMAGE_DAY ="background.image.day"; 12 public static final String PROP_PAGE_BACKGROUND_IMAGE_NIGHT ="background.image.night"; 13 public static final String PROP_NIGHT_MODE ="crengine.night.mode"; 14 public static final String PROP_FONT_COLOR_DAY ="font.color.day"; 15 public static final String PROP_BACKGROUND_COLOR_DAY ="background.color.day"; 16 public static final String PROP_FONT_COLOR_NIGHT ="font.color.night"; 17 public static final String PROP_BACKGROUND_COLOR_NIGHT ="background.color.night"; 18 public static final String PROP_FONT_COLOR ="font.color.default"; 19 public static final String PROP_BACKGROUND_COLOR ="background.color.default"; 20 public static final String PROP_FONT_ANTIALIASING ="font.antialiasing.mode"; 21 public static final String PROP_FONT_FACE ="font.face.default"; 22 public static final String PROP_FONT_HINTING ="font.hinting.mode"; 23 public static final String PROP_FONT_GAMMA ="font.gamma"; 24 public static final String PROP_FONT_GAMMA_DAY ="font.gamma.day"; 25 public static final String PROP_FONT_GAMMA_NIGHT ="font.gamma.night"; 26 public static final String PROP_FONT_WEIGHT_EMBOLDEN ="font.face.weight.embolden"; 27 public static final String PROP_TXT_OPTION_PREFORMATTED ="crengine.file.txt.preformatted"; 28 public static final String PROP_LOG_FILENAME ="crengine.log.filename"; 29 public static final String PROP_LOG_LEVEL ="crengine.log.level"; 30 public static final String PROP_LOG_AUTOFLUSH ="crengine.log.autoflush"; 31 public static final String PROP_FONT_SIZE ="crengine.font.size"; 32 public static final String PROP_FALLBACK_FONT_FACES ="crengine.font.fallback.faces"; 33 public static final String PROP_STATUS_FONT_COLOR ="crengine.page.header.font.color"; 34 public static final String PROP_STATUS_FONT_COLOR_DAY ="crengine.page.header.font.color.day"; 35 public static final String PROP_STATUS_FONT_COLOR_NIGHT ="crengine.page.header.font.color.night"; 36 public static final String PROP_STATUS_FONT_FACE ="crengine.page.header.font.face"; 37 public static final String PROP_STATUS_FONT_SIZE ="crengine.page.header.font.size"; 38 public static final String PROP_STATUS_CHAPTER_MARKS ="crengine.page.header.chapter.marks"; 39 public static final String PROP_PAGE_MARGIN_TOP ="crengine.page.margin.top"; 40 public static final String PROP_PAGE_MARGIN_BOTTOM ="crengine.page.margin.bottom"; 41 public static final String PROP_PAGE_MARGIN_LEFT ="crengine.page.margin.left"; 42 public static final String PROP_PAGE_MARGIN_RIGHT ="crengine.page.margin.right"; 43 public static final String PROP_ROUNDED_CORNERS_MARGIN ="crengine.rounded.corners.margin"; 44 public static final String PROP_PAGE_VIEW_MODE ="crengine.page.view.mode"; // pages/scroll 45 public static final String PROP_PAGE_ANIMATION ="crengine.page.animation"; 46 public static final String PROP_INTERLINE_SPACE ="crengine.interline.space"; 47 public static final String PROP_ROTATE_ANGLE ="window.rotate.angle"; 48 public static final String PROP_EMBEDDED_STYLES ="crengine.doc.embedded.styles.enabled"; 49 public static final String PROP_EMBEDDED_FONTS ="crengine.doc.embedded.fonts.enabled"; 50 public static final String PROP_DISPLAY_INVERSE ="crengine.display.inverse"; 51 // public static final String PROP_DISPLAY_FULL_UPDATE_INTERVAL ="crengine.display.full.update.interval"; 52 // public static final String PROP_DISPLAY_TURBO_UPDATE_MODE ="crengine.display.turbo.update"; 53 54 public static final String PROP_STATUS_LOCATION ="viewer.status.location"; 55 public static final String PROP_TOOLBAR_LOCATION ="viewer.toolbar.location2"; 56 public static final String PROP_TOOLBAR_HIDE_IN_FULLSCREEN="viewer.toolbar.fullscreen.hide"; 57 public static final String PROP_TOOLBAR_APPEARANCE="viewer.toolbar.appearance"; 58 59 public static final String PROP_STATUS_LINE ="window.status.line"; 60 public static final String PROP_BOOKMARK_ICONS ="crengine.bookmarks.icons"; 61 public static final String PROP_FOOTNOTES ="crengine.footnotes"; 62 public static final String PROP_SHOW_TIME ="window.status.clock"; 63 public static final String PROP_SHOW_TITLE ="window.status.title"; 64 public static final String PROP_SHOW_BATTERY ="window.status.battery"; 65 public static final String PROP_SHOW_BATTERY_PERCENT ="window.status.battery.percent"; 66 public static final String PROP_SHOW_POS_PERCENT ="window.status.pos.percent"; 67 public static final String PROP_SHOW_PAGE_COUNT ="window.status.pos.page.count"; 68 public static final String PROP_SHOW_PAGE_NUMBER ="window.status.pos.page.number"; 69 public static final String PROP_FONT_SHAPING ="font.shaping.mode"; 70 public static final String PROP_FONT_KERNING_ENABLED ="font.kerning.enabled"; 71 public static final String PROP_FLOATING_PUNCTUATION ="crengine.style.floating.punctuation.enabled"; 72 public static final String PROP_LANDSCAPE_PAGES ="window.landscape.pages"; 73 //public static final String PROP_HYPHENATION_DICT ="crengine.hyphenation.dictionary.code"; // non-crengine (old) 74 public static final String PROP_HYPHENATION_DICT = "crengine.hyphenation.directory"; 75 public static final String PROP_AUTOSAVE_BOOKMARKS ="crengine.autosave.bookmarks"; 76 // New textlang typography settings: 77 public static final String PROP_TEXTLANG_MAIN_LANG = "crengine.textlang.main.lang"; 78 public static final String PROP_TEXTLANG_EMBEDDED_LANGS_ENABLED = "crengine.textlang.embedded.langs.enabled"; 79 public static final String PROP_TEXTLANG_HYPHENATION_ENABLED = "crengine.textlang.hyphenation.enabled"; 80 public static final String PROP_TEXTLANG_HYPH_SOFT_HYPHENS_ONLY = "crengine.textlang.hyphenation.soft.hyphens.only"; 81 public static final String PROP_TEXTLANG_HYPH_FORCE_ALGORITHMIC = "crengine.textlang.hyphenation.force.algorithmic"; 82 83 public static final String PROP_PROFILE_NUMBER ="crengine.profile.number"; // current settings profile number 84 public static final String PROP_APP_SETTINGS_SHOW_ICONS ="app.settings.show.icons"; 85 public static final String PROP_APP_KEY_BACKLIGHT_OFF ="app.key.backlight.disabled"; 86 87 // image scaling settings 88 // mode: 0=disabled, 1=integer scaling factors, 2=free scaling 89 // scale: 0=auto based on font size, 1=no zoom, 2=scale up to *2, 3=scale up to *3 90 public static final String PROP_IMG_SCALING_ZOOMIN_INLINE_MODE = "crengine.image.scaling.zoomin.inline.mode"; 91 public static final String PROP_IMG_SCALING_ZOOMIN_INLINE_SCALE = "crengine.image.scaling.zoomin.inline.scale"; 92 public static final String PROP_IMG_SCALING_ZOOMOUT_INLINE_MODE = "crengine.image.scaling.zoomout.inline.mode"; 93 public static final String PROP_IMG_SCALING_ZOOMOUT_INLINE_SCALE = "crengine.image.scaling.zoomout.inline.scale"; 94 public static final String PROP_IMG_SCALING_ZOOMIN_BLOCK_MODE = "crengine.image.scaling.zoomin.block.mode"; 95 public static final String PROP_IMG_SCALING_ZOOMIN_BLOCK_SCALE = "crengine.image.scaling.zoomin.block.scale"; 96 public static final String PROP_IMG_SCALING_ZOOMOUT_BLOCK_MODE = "crengine.image.scaling.zoomout.block.mode"; 97 public static final String PROP_IMG_SCALING_ZOOMOUT_BLOCK_SCALE = "crengine.image.scaling.zoomout.block.scale"; 98 99 public static final String PROP_FORMAT_SPACE_WIDTH_SCALE_PERCENT = "crengine.style.space.width.scale.percent"; 100 public static final String PROP_FORMAT_MIN_SPACE_CONDENSING_PERCENT = "crengine.style.space.condensing.percent"; 101 public static final String PROP_FORMAT_UNUSED_SPACE_THRESHOLD_PERCENT = "crengine.style.unused.space.threshold.percent"; 102 public static final String PROP_FORMAT_MAX_ADDED_LETTER_SPACING_PERCENT = "crengine.style.max.added.letter.spacing.percent"; 103 104 // default is 96 (1 css px = 1 screen px) 105 // use 0 for old crengine behaviour (no support for absolute units and 1css px = 1 screen px) 106 public static final String PROP_RENDER_DPI = "crengine.render.dpi"; 107 //public static final String PROP_RENDER_SCALE_FONT_WITH_DPI = "crengine.render.scale.font.with.dpi"; 108 public static final String PROP_RENDER_BLOCK_RENDERING_FLAGS = "crengine.render.block.rendering.flags"; 109 public static final String PROP_REQUESTED_DOM_VERSION = "crengine.render.requested_dom_version"; 110 111 public static final String PROP_MIN_FILE_SIZE_TO_CACHE ="crengine.cache.filesize.min"; 112 public static final String PROP_FORCED_MIN_FILE_SIZE_TO_CACHE ="crengine.cache.forced.filesize.min"; 113 public static final String PROP_PROGRESS_SHOW_FIRST_PAGE="crengine.progress.show.first.page"; 114 115 public static final String PROP_CONTROLS_ENABLE_VOLUME_KEYS ="app.controls.volume.keys.enabled"; 116 117 public static final String PROP_APP_FULLSCREEN ="app.fullscreen"; 118 public static final String PROP_APP_BOOK_PROPERTY_SCAN_ENABLED ="app.browser.fileprops.scan.enabled"; 119 public static final String PROP_APP_SHOW_COVERPAGES ="app.browser.coverpages"; 120 public static final String PROP_APP_COVERPAGE_SIZE ="app.browser.coverpage.size"; // 0==small, 2==BIG 121 public static final String PROP_APP_SCREEN_ORIENTATION ="app.screen.orientation"; 122 public static final String PROP_APP_SCREEN_BACKLIGHT ="app.screen.backlight"; 123 public static final String PROP_APP_SCREEN_WARM_BACKLIGHT ="app.screen.warm.backlight"; 124 public static final String PROP_APP_MOTION_TIMEOUT ="app.motion.timeout"; 125 public static final String PROP_APP_SCREEN_BACKLIGHT_DAY ="app.screen.backlight.day"; 126 public static final String PROP_APP_SCREEN_BACKLIGHT_NIGHT ="app.screen.backlight.night"; 127 public static final String PROP_APP_DOUBLE_TAP_SELECTION ="app.controls.doubletap.selection"; 128 public static final String PROP_APP_TAP_ZONE_ACTIONS_TAP ="app.tapzone.action.tap"; 129 public static final String PROP_APP_KEY_ACTIONS_PRESS ="app.key.action.press"; 130 public static final String PROP_APP_TRACKBALL_DISABLED ="app.trackball.disabled"; 131 public static final String PROP_APP_SCREEN_BACKLIGHT_LOCK ="app.screen.backlight.lock.enabled"; 132 public static final String PROP_APP_TAP_ZONE_HILIGHT ="app.tapzone.hilight"; 133 public static final String PROP_APP_FLICK_BACKLIGHT_CONTROL = "app.screen.backlight.control.flick"; 134 public static final String PROP_APP_FLICK_WARMLIGHT_CONTROL = "app.screen.warmlight.control.flick"; 135 public static final String PROP_APP_BOOK_SORT_ORDER = "app.browser.sort.order"; 136 public static final String PROP_APP_DICTIONARY = "app.dictionary.current"; 137 public static final String PROP_APP_DICTIONARY_2 = "app.dictionary2.current"; 138 public static final String PROP_APP_SELECTION_ACTION = "app.selection.action"; 139 public static final String PROP_APP_MULTI_SELECTION_ACTION = "app.multiselection.action"; 140 public static final String PROP_APP_SELECTION_PERSIST = "app.selection.persist"; 141 142 public static final String PROP_APP_HIGHLIGHT_BOOKMARKS = "crengine.highlight.bookmarks"; 143 public static final String PROP_HIGHLIGHT_SELECTION_COLOR = "crengine.highlight.selection.color"; 144 public static final String PROP_HIGHLIGHT_BOOKMARK_COLOR_COMMENT = "crengine.highlight.bookmarks.color.comment"; 145 public static final String PROP_HIGHLIGHT_BOOKMARK_COLOR_CORRECTION = "crengine.highlight.bookmarks.color.correction"; 146 public static final String PROP_APP_HIGHLIGHT_BOOKMARKS_DAY = "crengine.highlight.bookmarks.day"; 147 public static final String PROP_HIGHLIGHT_SELECTION_COLOR_DAY = "crengine.highlight.selection.color.day"; 148 public static final String PROP_HIGHLIGHT_BOOKMARK_COLOR_COMMENT_DAY = "crengine.highlight.bookmarks.color.comment.day"; 149 public static final String PROP_HIGHLIGHT_BOOKMARK_COLOR_CORRECTION_DAY = "crengine.highlight.bookmarks.color.correction.day"; 150 public static final String PROP_APP_HIGHLIGHT_BOOKMARKS_NIGHT = "crengine.highlight.bookmarks.night"; 151 public static final String PROP_HIGHLIGHT_SELECTION_COLOR_NIGHT = "crengine.highlight.selection.color.night"; 152 public static final String PROP_HIGHLIGHT_BOOKMARK_COLOR_COMMENT_NIGHT = "crengine.highlight.bookmarks.color.comment.night"; 153 public static final String PROP_HIGHLIGHT_BOOKMARK_COLOR_CORRECTION_NIGHT = "crengine.highlight.bookmarks.color.correction.night"; 154 155 public static final String PROP_APP_FILE_BROWSER_HIDE_EMPTY_FOLDERS = "app.browser.hide.empty.folders"; 156 public static final String PROP_APP_FILE_BROWSER_HIDE_EMPTY_GENRES = "app.browser.hide.empty.genres"; 157 public static final String PROP_APP_FILE_BROWSER_SIMPLE_MODE = "app.browser.simple.mode"; 158 159 public static final String PROP_APP_SCREEN_UPDATE_MODE = "app.screen.update.mode"; 160 public static final String PROP_APP_SCREEN_UPDATE_INTERVAL = "app.screen.update.interval"; 161 public static final String PROP_APP_SECONDARY_TAP_ACTION_TYPE = "app.touch.secondary.action.type"; 162 public static final String PROP_APP_GESTURE_PAGE_FLIPPING = "app.touch.gesture.page.flipping"; 163 164 public static final String PROP_APP_VIEW_AUTOSCROLL_SPEED ="app.view.autoscroll.speed"; 165 public static final String PROP_APP_VIEW_AUTOSCROLL_TYPE ="app.view.autoscroll.type"; 166 167 public static final String PROP_APP_THEME = "app.ui.theme"; 168 public static final String PROP_APP_THEME_DAY = "app.ui.theme.day"; 169 public static final String PROP_APP_THEME_NIGHT = "app.ui.theme.night"; 170 171 public static final String PROP_APP_LOCALE = "app.locale.name"; 172 173 public static final String PROP_APP_STARTUP_ACTION = "app.startup.action"; 174 175 public static final String PROP_APP_PLUGIN_ENABLED = "app.plugin.enabled.litres"; 176 177 String PROP_APP_CLOUDSYNC_GOOGLEDRIVE_ENABLED = "app.cloudsync.googledrive.enabled"; 178 String PROP_APP_CLOUDSYNC_GOOGLEDRIVE_SETTINGS = "app.cloudsync.googledrive.settings"; 179 String PROP_APP_CLOUDSYNC_GOOGLEDRIVE_BOOKMARKS = "app.cloudsync.googledrive.bookmarks"; 180 String PROP_APP_CLOUDSYNC_GOOGLEDRIVE_CURRENTBOOK_INFO = "app.cloudsync.googledrive.currentbook"; 181 String PROP_APP_CLOUDSYNC_GOOGLEDRIVE_CURRENTBOOK_BODY = "app.cloudsync.googledrive.currentbook.body"; 182 String PROP_APP_CLOUDSYNC_GOOGLEDRIVE_AUTOSAVEPERIOD = "app.cloudsync.googledrive.autosaveperiod"; 183 String PROP_APP_CLOUDSYNC_CONFIRMATIONS = "app.cloudsync.confirmations"; 184 String PROP_APP_CLOUDSYNC_DATA_KEEPALIVE = "app.cloudsync.bookmarks.keepalive"; // days 185 186 String PROP_APP_TTS_SPEED = "app.tts.speed"; 187 String PROP_APP_TTS_ENGINE = "app.tts.engine"; 188 String PROP_APP_TTS_USE_DOC_LANG = "app.tts.use.doc.lang"; // The TTS language is set according to the language of the book. 189 String PROP_APP_TTS_FORCE_LANGUAGE = "app.tts.force.lang"; // Force use specified language 190 String PROP_APP_TTS_VOICE = "app.tts.voice"; 191 192 // available options for PROP_APP_SELECTION_ACTION setting 193 public static final int SELECTION_ACTION_TOOLBAR = 0; 194 public static final int SELECTION_ACTION_COPY = 1; 195 public static final int SELECTION_ACTION_DICTIONARY = 2; 196 public static final int SELECTION_ACTION_BOOKMARK = 3; 197 public static final int SELECTION_ACTION_FIND = 4; 198 199 // available options for PROP_APP_SECONDARY_TAP_ACTION_TYPE setting 200 public static final int TAP_ACTION_TYPE_LONGPRESS = 0; 201 public static final int TAP_ACTION_TYPE_DOUBLE = 1; 202 public static final int TAP_ACTION_TYPE_SHORT = 2; 203 204 // available options for PROP_APP_FLICK_BACKLIGHT_CONTROL setting 205 public static final int BACKLIGHT_CONTROL_FLICK_NONE = 0; 206 public static final int BACKLIGHT_CONTROL_FLICK_LEFT = 1; 207 public static final int BACKLIGHT_CONTROL_FLICK_RIGHT = 2; 208 209 public static final int APP_STARTUP_ACTION_LAST_BOOK = 0; 210 public static final int APP_STARTUP_ACTION_ROOT = 1; 211 public static final int APP_STARTUP_ACTION_RECENT_BOOKS = 2; 212 public static final int APP_STARTUP_ACTION_LAST_BOOK_FOLDER = 3; 213 214 public static final int VIEWER_STATUS_NONE = 0; 215 public static final int VIEWER_STATUS_TOP = 1; 216 public static final int VIEWER_STATUS_BOTTOM = 2; 217 public static final int VIEWER_STATUS_PAGE_HEADER = 3; 218 public static final int VIEWER_STATUS_PAGE_FOOTER = 4; 219 220 public static final int VIEWER_TOOLBAR_NONE = 0; 221 public static final int VIEWER_TOOLBAR_TOP = 1; 222 public static final int VIEWER_TOOLBAR_BOTTOM = 2; 223 public static final int VIEWER_TOOLBAR_LEFT = 3; 224 public static final int VIEWER_TOOLBAR_RIGHT = 4; 225 public static final int VIEWER_TOOLBAR_SHORT_SIDE = 5; 226 public static final int VIEWER_TOOLBAR_LONG_SIDE = 6; 227 228 public static final int VIEWER_TOOLBAR_100 = 0; 229 public static final int VIEWER_TOOLBAR_100_gray = 1; 230 public static final int VIEWER_TOOLBAR_75 = 2; 231 public static final int VIEWER_TOOLBAR_75_gray = 3; 232 public static final int VIEWER_TOOLBAR_50 = 4; 233 public static final int VIEWER_TOOLBAR_50_gray = 5; 234 235 236 public enum Lang { 237 DEFAULT("system", R.string.options_app_locale_system, R.raw.help_template_en), 238 EN("en", R.string.options_app_locale_en, R.raw.help_template_en), 239 DE("de", R.string.options_app_locale_de, 0), 240 ES("es", R.string.options_app_locale_es, 0), 241 FR("fr", R.string.options_app_locale_fr, 0), 242 JA("ja", R.string.options_app_locale_ja, 0), 243 RU("ru", R.string.options_app_locale_ru, R.raw.help_template_ru), 244 UK("uk", R.string.options_app_locale_uk, R.raw.help_template_ru), 245 BG("bg", R.string.options_app_locale_bg, 0), 246 BY("by", R.string.options_app_locale_by, 0), 247 SK("sk", R.string.options_app_locale_sk, 0), 248 TR("tr", R.string.options_app_locale_tr, 0), 249 LT("lt", R.string.options_app_locale_lt, 0), 250 IT("it", R.string.options_app_locale_it, 0), 251 HU("hu", R.string.options_app_locale_hu, R.raw.help_template_hu), 252 NL("nl", R.string.options_app_locale_nl, 0), 253 PL("pl", R.string.options_app_locale_pl, 0), 254 PT("pt", R.string.options_app_locale_pt, 0), 255 PT_BR("pt_BR", R.string.options_app_locale_pt_rbr, 0), 256 CS("cs", R.string.options_app_locale_cs, 0), 257 ZH_CN("zh_CN", R.string.options_app_locale_zh_cn, R.raw.help_template_zh_cn), 258 ; 259 getLocale()260 public Locale getLocale() { 261 return getLocale(code); 262 } 263 getLocale(String code)264 static public Locale getLocale(String code) { 265 if (code.length() == 2) 266 return new Locale(code); 267 if (code.length() == 5) 268 return new Locale(code.substring(0, 2), code.substring(3, 5)); 269 return null; 270 } 271 getCode(Locale locale)272 static public String getCode(Locale locale) { 273 String country = locale.getCountry(); 274 if (country == null || country.length()==0) 275 return locale.getLanguage(); 276 return locale.getLanguage() + "_" + country; 277 } 278 byCode(String code)279 static public Lang byCode(String code) { 280 for (Lang lang : values()) 281 if (lang.code.equals(code)) 282 return lang; 283 if (code.length() > 2) { 284 code = code.substring(0, 2); 285 for (Lang lang : values()) 286 if (lang.code.equals(code)) 287 return lang; 288 } 289 Log.w("cr3", "language not found by code " + code); 290 return DEFAULT; 291 } 292 Lang(String code, int nameResId, int helpFileResId)293 private Lang(String code, int nameResId, int helpFileResId) { 294 this.code = code; 295 this.nameId = nameResId; 296 this.helpFileResId = helpFileResId; 297 } 298 public final String code; 299 public final int nameId; 300 public final int helpFileResId; 301 }; 302 303 304 public final static int MAX_PROFILES = 6; 305 306 // settings which depend on profile 307 public final static String[] PROFILE_SETTINGS = { 308 "background.*", 309 PROP_NIGHT_MODE, 310 "font.*", 311 "crengine.page.*", 312 PROP_FONT_SIZE, 313 PROP_FALLBACK_FONT_FACES, 314 PROP_INTERLINE_SPACE, 315 PROP_STATUS_LINE, 316 PROP_FOOTNOTES, 317 "window.status.*", 318 PROP_FLOATING_PUNCTUATION, 319 PROP_LANDSCAPE_PAGES, 320 PROP_HYPHENATION_DICT, 321 "crengine.image.*", 322 PROP_FORMAT_MIN_SPACE_CONDENSING_PERCENT, 323 PROP_APP_FULLSCREEN, 324 "app.screen.*", 325 PROP_APP_DICTIONARY, 326 PROP_APP_SELECTION_ACTION, 327 PROP_APP_SELECTION_PERSIST, 328 PROP_APP_HIGHLIGHT_BOOKMARKS + "*", 329 PROP_HIGHLIGHT_SELECTION_COLOR + "*", 330 PROP_HIGHLIGHT_BOOKMARK_COLOR_COMMENT + "*", 331 PROP_HIGHLIGHT_BOOKMARK_COLOR_CORRECTION + "*", 332 333 "viewer.*", 334 PROP_APP_VIEW_AUTOSCROLL_SPEED, 335 PROP_APP_VIEW_AUTOSCROLL_TYPE, 336 337 "app.key.*", 338 "app.tapzone.*", 339 PROP_APP_DOUBLE_TAP_SELECTION, 340 "app.touch.*", 341 342 "app.ui.theme*", 343 }; 344 345 346 } 347