186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta/* 286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * Copyright (C) 2014 The Android Open Source Project 386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * 486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * Licensed under the Apache License, Version 2.0 (the "License"); 586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * you may not use this file except in compliance with the License. 686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * You may obtain a copy of the License at 786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * 886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * http://www.apache.org/licenses/LICENSE-2.0 986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * 1086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * Unless required by applicable law or agreed to in writing, software 1186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * distributed under the License is distributed on an "AS IS" BASIS, 1286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * See the License for the specific language governing permissions and 1486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * limitations under the License. 1586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta */ 1686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 1786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptapackage com.android.layoutlib.bridge.intensive.setup; 1886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 1986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.rendering.api.HardwareConfig; 2086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.CountryCodeQualifier; 2186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.DensityQualifier; 2286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.FolderConfiguration; 2386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.KeyboardStateQualifier; 2486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.LayoutDirectionQualifier; 25a035dfbf8ddfc8d301dd96088eb50e8c2e63e487Deepanshu Guptaimport com.android.ide.common.resources.configuration.LocaleQualifier; 2686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.NavigationMethodQualifier; 2786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.NetworkCodeQualifier; 2886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.NightModeQualifier; 2986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.ScreenDimensionQualifier; 3086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.ScreenOrientationQualifier; 3186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.ScreenRatioQualifier; 3286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.ScreenSizeQualifier; 3386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.TextInputMethodQualifier; 3486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.TouchScreenQualifier; 3586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.UiModeQualifier; 3686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.ide.common.resources.configuration.VersionQualifier; 3786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.resources.Density; 3886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.resources.Keyboard; 3986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.resources.KeyboardState; 4086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.resources.Navigation; 4186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.resources.NightMode; 4286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.resources.ScreenOrientation; 4386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.resources.ScreenRatio; 4486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.resources.ScreenSize; 4586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.resources.TouchScreen; 4686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.android.resources.UiMode; 4786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 4886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport org.xmlpull.v1.XmlPullParser; 4986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport org.xmlpull.v1.XmlPullParserException; 5086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport org.xmlpull.v1.XmlPullParserFactory; 5186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 5286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport java.io.File; 5386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport java.io.FileInputStream; 5486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport java.io.IOException; 5586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport java.util.Map; 5686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport java.util.Properties; 5786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 5886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptaimport com.google.android.collect.Maps; 5986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 6086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta/** 6186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * Provides {@link FolderConfiguration} and {@link HardwareConfig} for various devices. Also 6286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta * provides utility methods to parse build.prop and attrs.xml to generate the appropriate maps. 6386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta */ 6486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta@SuppressWarnings("UnusedDeclaration") // For the pre-configured nexus generators. 6586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Guptapublic class ConfigGenerator { 6686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 6786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public static final ConfigGenerator NEXUS_4 = new ConfigGenerator(); 6886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 6986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public static final ConfigGenerator NEXUS_5 = new ConfigGenerator() 7086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setScreenHeight(1920) 7186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setScreenWidth(1080) 7286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setXdpi(445) 7386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setYdpi(445) 7486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setOrientation(ScreenOrientation.PORTRAIT) 7586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setDensity(Density.XXHIGH) 7686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setRatio(ScreenRatio.NOTLONG) 7786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setSize(ScreenSize.NORMAL) 7886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setKeyboard(Keyboard.NOKEY) 7986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setTouchScreen(TouchScreen.FINGER) 8086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setKeyboardState(KeyboardState.SOFT) 8186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setSoftButtons(true) 8286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setNavigation(Navigation.NONAV); 8386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 8486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public static final ConfigGenerator NEXUS_7 = new ConfigGenerator() 8586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setScreenHeight(1920) 8686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setScreenWidth(1200) 8786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setXdpi(323) 8886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setYdpi(323) 8986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setOrientation(ScreenOrientation.PORTRAIT) 9086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setDensity(Density.XHIGH) 9186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setRatio(ScreenRatio.NOTLONG) 9286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setSize(ScreenSize.LARGE) 9386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setKeyboard(Keyboard.NOKEY) 9486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setTouchScreen(TouchScreen.FINGER) 9586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setKeyboardState(KeyboardState.SOFT) 9686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setSoftButtons(true) 9786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setNavigation(Navigation.NONAV); 9886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 9986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public static final ConfigGenerator NEXUS_10 = new ConfigGenerator() 10086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setScreenHeight(1600) 10186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setScreenWidth(2560) 10286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setXdpi(300) 10386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setYdpi(300) 10486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setOrientation(ScreenOrientation.LANDSCAPE) 10586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setDensity(Density.XHIGH) 10686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setRatio(ScreenRatio.NOTLONG) 10786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setSize(ScreenSize.XLARGE) 10886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setKeyboard(Keyboard.NOKEY) 10986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setTouchScreen(TouchScreen.FINGER) 110139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setKeyboardState(KeyboardState.SOFT) 111139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setSoftButtons(true) 112139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setNavigation(Navigation.NONAV); 113139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta 114139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta public static final ConfigGenerator NEXUS_5_LAND = new ConfigGenerator() 115139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setScreenHeight(1080) 116139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setScreenWidth(1920) 117139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setXdpi(445) 118139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setYdpi(445) 119139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setOrientation(ScreenOrientation.LANDSCAPE) 120139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setDensity(Density.XXHIGH) 121139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setRatio(ScreenRatio.NOTLONG) 122139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setSize(ScreenSize.NORMAL) 123139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setKeyboard(Keyboard.NOKEY) 124139d6ff12d395a888624113fdd2521861b47d761Deepanshu Gupta .setTouchScreen(TouchScreen.FINGER) 12586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setKeyboardState(KeyboardState.SOFT) 12686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setSoftButtons(true) 12786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta .setNavigation(Navigation.NONAV); 12886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 12986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private static final String TAG_ATTR = "attr"; 13086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private static final String TAG_ENUM = "enum"; 13186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private static final String TAG_FLAG = "flag"; 13286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private static final String ATTR_NAME = "name"; 13386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private static final String ATTR_VALUE = "value"; 13486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 13586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta // Device Configuration. Defaults are for a Nexus 4 device. 13686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private int mScreenHeight = 1280; 13786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private int mScreenWidth = 768; 13886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private int mXdpi = 320; 13986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private int mYdpi = 320; 14086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private ScreenOrientation mOrientation = ScreenOrientation.PORTRAIT; 14186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private Density mDensity = Density.XHIGH; 14286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private ScreenRatio mRatio = ScreenRatio.NOTLONG; 14386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private ScreenSize mSize = ScreenSize.NORMAL; 14486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private Keyboard mKeyboard = Keyboard.NOKEY; 14586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private TouchScreen mTouchScreen = TouchScreen.FINGER; 14686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private KeyboardState mKeyboardState = KeyboardState.SOFT; 14786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private boolean mSoftButtons = true; 14886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta private Navigation mNavigation = Navigation.NONAV; 14986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 15086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public FolderConfiguration getFolderConfig() { 15186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta FolderConfiguration config = new FolderConfiguration(); 15286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.createDefault(); 15386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setDensityQualifier(new DensityQualifier(mDensity)); 15486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setNavigationMethodQualifier(new NavigationMethodQualifier(mNavigation)); 15586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta if (mScreenWidth > mScreenHeight) { 15686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setScreenDimensionQualifier(new ScreenDimensionQualifier(mScreenWidth, 15786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mScreenHeight)); 15886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } else { 15986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setScreenDimensionQualifier(new ScreenDimensionQualifier(mScreenHeight, 16086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mScreenWidth)); 16186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 16286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setScreenRatioQualifier(new ScreenRatioQualifier(mRatio)); 16386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setScreenSizeQualifier(new ScreenSizeQualifier(mSize)); 16486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setTextInputMethodQualifier(new TextInputMethodQualifier(mKeyboard)); 16586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setTouchTypeQualifier(new TouchScreenQualifier(mTouchScreen)); 16686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setKeyboardStateQualifier(new KeyboardStateQualifier(mKeyboardState)); 16786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setScreenOrientationQualifier(new ScreenOrientationQualifier(mOrientation)); 16886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 16986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.updateScreenWidthAndHeight(); 17086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 17186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta // some default qualifiers. 17286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setUiModeQualifier(new UiModeQualifier(UiMode.NORMAL)); 17386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setNightModeQualifier(new NightModeQualifier(NightMode.NOTNIGHT)); 17486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setCountryCodeQualifier(new CountryCodeQualifier()); 17586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setLayoutDirectionQualifier(new LayoutDirectionQualifier()); 17686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setNetworkCodeQualifier(new NetworkCodeQualifier()); 177a035dfbf8ddfc8d301dd96088eb50e8c2e63e487Deepanshu Gupta config.setLocaleQualifier(new LocaleQualifier()); 17886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta config.setVersionQualifier(new VersionQualifier()); 17986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return config; 18086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 18186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 18286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public HardwareConfig getHardwareConfig() { 18386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return new HardwareConfig(mScreenWidth, mScreenHeight, mDensity, mXdpi, mYdpi, mSize, 184d7b846c1814de34f2cea8507907f70618ec7cae0Deepanshu Gupta mOrientation, null, mSoftButtons); 18586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 18686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 18786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public static Map<String, String> loadProperties(File path) { 18886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta Properties p = new Properties(); 18986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta Map<String, String> map = Maps.newHashMap(); 19086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta try { 19186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta p.load(new FileInputStream(path)); 19286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta for (String key : p.stringPropertyNames()) { 19386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta map.put(key, p.getProperty(key)); 19486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 19586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } catch (IOException e) { 19686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta e.printStackTrace(); 19786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 19886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return map; 19986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 20086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 20186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public static Map<String, Map<String, Integer>> getEnumMap(File path) { 20286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta Map<String, Map<String, Integer>> map = Maps.newHashMap(); 20386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta try { 20486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta XmlPullParser xmlPullParser = XmlPullParserFactory.newInstance().newPullParser(); 20586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta xmlPullParser.setInput(new FileInputStream(path), null); 20686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta int eventType = xmlPullParser.getEventType(); 20786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta String attr = null; 20886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta while (eventType != XmlPullParser.END_DOCUMENT) { 20986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta if (eventType == XmlPullParser.START_TAG) { 21086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta if (TAG_ATTR.equals(xmlPullParser.getName())) { 21186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta attr = xmlPullParser.getAttributeValue(null, ATTR_NAME); 21286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } else if (TAG_ENUM.equals(xmlPullParser.getName()) 21386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta || TAG_FLAG.equals(xmlPullParser.getName())) { 21486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta String name = xmlPullParser.getAttributeValue(null, ATTR_NAME); 21586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta String value = xmlPullParser.getAttributeValue(null, ATTR_VALUE); 21686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta // Integer.decode cannot handle "ffffffff", see JDK issue 6624867 21786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta int i = (int) (long) Long.decode(value); 21886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta assert attr != null; 21986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta Map<String, Integer> attributeMap = map.get(attr); 22086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta if (attributeMap == null) { 22186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta attributeMap = Maps.newHashMap(); 22286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta map.put(attr, attributeMap); 22386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 22486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta attributeMap.put(name, i); 22586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 22686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } else if (eventType == XmlPullParser.END_TAG) { 22786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta if (TAG_ATTR.equals(xmlPullParser.getName())) { 22886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta attr = null; 22986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 23086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 23186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta eventType = xmlPullParser.next(); 23286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 23386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } catch (XmlPullParserException e) { 23486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta e.printStackTrace(); 23586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } catch (IOException e) { 23686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta e.printStackTrace(); 23786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 23886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return map; 23986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 24086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 24186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta // Methods to set the configuration values. 24286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 24386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setScreenHeight(int height) { 24486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mScreenHeight = height; 24586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 24686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 24786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 24886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setScreenWidth(int width) { 24986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mScreenWidth = width; 25086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 25186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 25286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 25386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setXdpi(int xdpi) { 25486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mXdpi = xdpi; 25586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 25686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 25786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 25886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setYdpi(int ydpi) { 25986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mYdpi = ydpi; 26086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 26186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 26286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 26386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setOrientation(ScreenOrientation orientation) { 26486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mOrientation = orientation; 26586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 26686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 26786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 26886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setDensity(Density density) { 26986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mDensity = density; 27086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 27186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 27286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 27386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setRatio(ScreenRatio ratio) { 27486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mRatio = ratio; 27586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 27686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 27786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 27886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setSize(ScreenSize size) { 27986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mSize = size; 28086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 28186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 28286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 28386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setKeyboard(Keyboard keyboard) { 28486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mKeyboard = keyboard; 28586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 28686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 28786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 28886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setTouchScreen(TouchScreen touchScreen) { 28986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mTouchScreen = touchScreen; 29086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 29186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 29286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 29386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setKeyboardState(KeyboardState state) { 29486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mKeyboardState = state; 29586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 29686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 29786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 29886eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setSoftButtons(boolean softButtons) { 29986eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mSoftButtons = softButtons; 30086eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 30186eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 30286eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta 30386eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta public ConfigGenerator setNavigation(Navigation navigation) { 30486eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta mNavigation = navigation; 30586eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta return this; 30686eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta } 30786eb8b4e29b1ad889fc814bae723d4d6e491f53fDeepanshu Gupta} 308