/* ** ** Copyright 2006, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ package com.android.development; import com.android.development.R; import android.app.Activity; import android.app.ListActivity; import android.content.Context; import android.content.Intent; import android.content.pm.ConfigurationInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Configuration; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.LayoutInflater; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; /* This activity displays the hardware configuration details * of an application as defined in its manifests */ public class AppHwPref extends Activity { private static final String TAG = "AppHwPref"; PackageManager mPm; private static final int BASE = 0; private static final int TOUCHSCREEN = BASE + 1; private static final int KEYBOARD_TYPE = BASE + 2; private static final int NAVIGATION = BASE + 3; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); Intent intent = getIntent(); String pkgName = intent.getStringExtra("packageName"); if(pkgName == null) { handleError("Null package name", true); return; } mPm = getPackageManager(); PackageInfo pInfo; try { pInfo = mPm.getPackageInfo(pkgName, PackageManager.GET_CONFIGURATIONS); } catch (NameNotFoundException e) { pInfo = null; } if(pInfo == null) { handleError("Failed retrieving packageInfo for pkg:"+pkgName, true); return; } ConfigurationInfo appHwPref[] = pInfo.configPreferences; setContentView(R.layout.application_hw_pref); if(appHwPref != null) { displayTextView(R.id.attr_package, pInfo.applicationInfo.loadLabel(mPm)); displayTextView(R.id.attr_touchscreen, appHwPref, TOUCHSCREEN); displayTextView(R.id.attr_input_method, appHwPref, KEYBOARD_TYPE); displayTextView(R.id.attr_navigation, appHwPref, NAVIGATION); displayFlag(R.id.attr_hard_keyboard, ConfigurationInfo.INPUT_FEATURE_HARD_KEYBOARD, appHwPref); displayFlag(R.id.attr_five_way_nav, ConfigurationInfo.INPUT_FEATURE_FIVE_WAY_NAV, appHwPref); } } void displayFlag(int viewId, int flagMask, ConfigurationInfo[] appHwPref) { if(appHwPref == null) { return; } boolean flag = false; for (int i = 0; i < appHwPref.length; i++) { ConfigurationInfo pref = appHwPref[i]; if((pref.reqInputFeatures & flagMask) != 0) { flag = true; break; } } if(flag) { displayTextView(viewId, "true"); } else { displayTextView(viewId, "false"); } } void handleError(String errMsg, boolean finish) { // TODO display dialog Log.i(TAG, errMsg); if(finish) { finish(); } } void displayTextView(int textViewId, CharSequence displayStr) { TextView tView = (TextView) findViewById(textViewId); if(displayStr != null) { tView.setText(displayStr); } } void displayTextView(int viewId, ConfigurationInfo[] config, int type) { if((config == null) || (config.length < 1)) { return; } HashSet<String> list = new HashSet<String>(); for(int i = 0; i < config.length; i++) { String str = null; switch(type) { case TOUCHSCREEN: str = getTouchScreenStr(config[i]); break; case KEYBOARD_TYPE: str = getKeyboardTypeStr(config[i]); break; case NAVIGATION: str = getNavigationStr(config[i]); break; } if(str != null) { list.add(str); } } String listStr = ""; boolean set = false; for(String str : list) { set = true; listStr += str+","; } if(set) { TextView tView = (TextView)findViewById(viewId); CharSequence txt = listStr.subSequence(0, listStr.length()-1); tView.setText(txt); } } String getTouchScreenStr(ConfigurationInfo appHwPref) { if(appHwPref == null) { handleError("Invalid HardwareConfigurationObject", true); return null; } switch(appHwPref.reqTouchScreen) { case Configuration.TOUCHSCREEN_FINGER: return "finger"; case Configuration.TOUCHSCREEN_NOTOUCH: return "notouch"; case Configuration.TOUCHSCREEN_STYLUS: return "stylus"; case Configuration.TOUCHSCREEN_UNDEFINED: return null; default: return null; } } String getKeyboardTypeStr(ConfigurationInfo appHwPref) { if(appHwPref == null) { handleError("Invalid HardwareConfigurationObject", true); return null; } switch(appHwPref.reqKeyboardType) { case Configuration.KEYBOARD_12KEY: return "12key"; case Configuration.KEYBOARD_NOKEYS: return "nokeys"; case Configuration.KEYBOARD_QWERTY: return "querty"; case Configuration.KEYBOARD_UNDEFINED: return null; default: return null; } } String getNavigationStr(ConfigurationInfo appHwPref) { if(appHwPref == null) { handleError("Invalid HardwareConfigurationObject", true); return null; } switch(appHwPref.reqNavigation) { case Configuration.NAVIGATION_DPAD: return "dpad"; case Configuration.NAVIGATION_TRACKBALL: return "trackball"; case Configuration.NAVIGATION_WHEEL: return "wheel"; case Configuration.NAVIGATION_UNDEFINED: return null; default: return null; } } @Override protected void onResume() { super.onResume(); } @Override protected void onStop() { super.onStop(); } }