HwTests.java revision 29ce8c98ff1cd2fdf6ccc5127aab466d52367b61
129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy/* 229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * Copyright (C) 2012 The Android Open Source Project 329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * 429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * you may not use this file except in compliance with the License. 629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * You may obtain a copy of the License at 729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * 829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * 1029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * Unless required by applicable law or agreed to in writing, software 1129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 1229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * See the License for the specific language governing permissions and 1429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy * limitations under the License. 1529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy */ 1629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 1729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guypackage com.android.test.hwui; 1829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 1929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport android.app.*; 2029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport android.content.Intent; 2129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport android.content.pm.PackageManager; 2229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport android.content.pm.ResolveInfo; 2329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport android.os.Bundle; 2429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport android.view.View; 2529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport android.widget.ListView; 2629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport android.widget.SimpleAdapter; 2729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 2829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport java.text.Collator; 2929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport java.util.ArrayList; 3029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport java.util.Collections; 3129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport java.util.Comparator; 3229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport java.util.HashMap; 3329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport java.util.List; 3429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guyimport java.util.Map; 3529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 3629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy@SuppressWarnings("UnusedDeclaration") 3729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guypublic class HwTests extends android.app.ListActivity { 3829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy private static final String EXTRA_PATH = "com.android.test.hwui.Path"; 3929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy private static final String CATEGORY_HWUI_TEST = "com.android.test.hwui.TEST"; 4029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 4129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy @Override 4229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy public void onCreate(Bundle savedInstanceState) { 4329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy super.onCreate(savedInstanceState); 4429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 4529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy Intent intent = getIntent(); 4629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy String path = intent.getStringExtra("com.android.test.hwui.Path"); 4729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 4829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy if (path == null) { 4929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy path = ""; 5029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 5129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 5229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy setListAdapter(new SimpleAdapter(this, getData(path), 5329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy android.R.layout.simple_list_item_1, new String[] { "title" }, 5429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy new int[] { android.R.id.text1 })); 5529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy getListView().setTextFilterEnabled(true); 5629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 5729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 5829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy protected List<Map<String, Object>> getData(String prefix) { 5929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy List<Map<String, Object>> myData = new ArrayList<Map<String, Object>>(); 6029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 6129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 6229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy mainIntent.addCategory(CATEGORY_HWUI_TEST); 6329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 6429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy PackageManager pm = getPackageManager(); 6529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0); 6629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 6729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy if (null == list) 6829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy return myData; 6929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 7029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy String[] prefixPath; 7129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy String prefixWithSlash = prefix; 7229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 7329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy if (prefix.equals("")) { 7429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy prefixPath = null; 7529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } else { 7629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy prefixPath = prefix.split("/"); 7729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy prefixWithSlash = prefix + "/"; 7829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 7929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 8029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy int len = list.size(); 8129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 8229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy Map<String, Boolean> entries = new HashMap<String, Boolean>(); 8329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 8429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy for (int i = 0; i < len; i++) { 8529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy ResolveInfo info = list.get(i); 8629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy CharSequence labelSeq = info.loadLabel(pm); 8729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy String label = labelSeq != null 8829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy ? labelSeq.toString() 8929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy : info.activityInfo.name; 9029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 9129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy if (prefixWithSlash.length() == 0 || label.startsWith(prefixWithSlash)) { 9229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 9329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy String[] labelPath = label.split("/"); 9429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 9529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy String nextLabel = prefixPath == null ? labelPath[0] : labelPath[prefixPath.length]; 9629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 9729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy if ((prefixPath != null ? prefixPath.length : 0) == labelPath.length - 1) { 9829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy addItem(myData, nextLabel, activityIntent( 9929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy info.activityInfo.applicationInfo.packageName, 10029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy info.activityInfo.name)); 10129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } else { 10229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy if (entries.get(nextLabel) == null) { 10329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy addItem(myData, nextLabel, browseIntent(prefix.equals("") ? 10429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy nextLabel : prefix + "/" + nextLabel)); 10529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy entries.put(nextLabel, true); 10629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 10729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 10829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 10929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 11029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 11129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy Collections.sort(myData, sDisplayNameComparator); 11229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 11329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy return myData; 11429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 11529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 11629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy private final static Comparator<Map<String, Object>> sDisplayNameComparator = 11729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy new Comparator<Map<String, Object>>() { 11829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy private final Collator collator = Collator.getInstance(); 11929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 12029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy public int compare(Map<String, Object> map1, Map<String, Object> map2) { 12129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy return collator.compare(map1.get("title"), map2.get("title")); 12229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 12329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy }; 12429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 12529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy protected Intent activityIntent(String pkg, String componentName) { 12629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy Intent result = new Intent(); 12729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy result.setClassName(pkg, componentName); 12829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy return result; 12929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 13029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 13129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy protected Intent browseIntent(String path) { 13229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy Intent result = new Intent(); 13329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy result.setClass(this, HwTests.class); 13429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy result.putExtra(EXTRA_PATH, path); 13529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy return result; 13629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 13729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 13829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy protected void addItem(List<Map<String, Object>> data, String name, Intent intent) { 13929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy Map<String, Object> temp = new HashMap<String, Object>(); 14029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy temp.put("title", name); 14129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy temp.put("intent", intent); 14229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy data.add(temp); 14329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 14429ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 14529ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy @Override 14629ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy @SuppressWarnings({ "unchecked", "UnusedParameters" }) 14729ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy protected void onListItemClick(ListView l, View v, int position, long id) { 14829ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy Map<String, Object> map = (Map<String, Object>)l.getItemAtPosition(position); 14929ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy 15029ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy Intent intent = (Intent) map.get("intent"); 15129ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy startActivity(intent); 15229ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy } 15329ce8c98ff1cd2fdf6ccc5127aab466d52367b61Romain Guy} 154