1package com.google.android.apps.common.testing.ui.testapp; 2 3import android.app.ListActivity; 4import android.content.Intent; 5import android.content.pm.ActivityInfo; 6import android.content.pm.PackageInfo; 7import android.content.pm.PackageManager; 8import android.content.pm.PackageManager.NameNotFoundException; 9import android.os.Bundle; 10import android.util.Log; 11import android.view.View; 12import android.widget.ListView; 13import android.widget.SimpleAdapter; 14 15import java.text.Collator; 16import java.util.ArrayList; 17import java.util.Collections; 18import java.util.Comparator; 19import java.util.HashMap; 20import java.util.List; 21import java.util.Map; 22 23/** 24 * Displays a list with all available activities. 25 */ 26public class MainActivity extends ListActivity { 27 private static final String TAG = MainActivity.class.getSimpleName(); 28 29 private static final Comparator<Map<String, Object>> sDisplayNameComparator = 30 new Comparator<Map<String, Object>>() { 31 private final Collator collator = Collator.getInstance(); 32 33 @Override 34 public int compare(Map<String, Object> map1, Map<String, Object> map2) { 35 return collator.compare(map1.get("title"), map2.get("title")); 36 } 37 }; 38 39 @Override 40 public void onCreate(Bundle savedInstanceState) { 41 super.onCreate(savedInstanceState); 42 43 setListAdapter(new SimpleAdapter( 44 this, getData(), android.R.layout.simple_list_item_1, new String[] {"title"}, 45 new int[] {android.R.id.text1})); 46 getListView().setTextFilterEnabled(true); 47 } 48 49 private List<Map<String, Object>> getData() { 50 List<Map<String, Object>> data = new ArrayList<Map<String, Object>>(); 51 52 PackageInfo info = null; 53 try { 54 info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_ACTIVITIES); 55 } catch (NameNotFoundException e) { 56 Log.e(TAG, "Packageinfo not found in: " + getPackageName()); 57 } 58 59 if (null == info) { 60 return data; 61 } else { 62 for (ActivityInfo activityInfo : info.activities) { 63 64 if (!activityInfo.name.equals(getComponentName().getClassName())) { 65 String[] label = activityInfo.name.split(getPackageName() + "."); 66 addItem(data, label[1], 67 createActivityIntent(activityInfo.applicationInfo.packageName, activityInfo.name)); 68 } 69 } 70 } 71 72 Collections.sort(data, sDisplayNameComparator); 73 return data; 74 } 75 76 private Intent createActivityIntent(String pkg, String componentName) { 77 Intent result = new Intent(); 78 result.setClassName(pkg, componentName); 79 return result; 80 } 81 82 private void addItem(List<Map<String, Object>> data, String name, Intent intent) { 83 Map<String, Object> temp = new HashMap<String, Object>(); 84 temp.put("title", name); 85 temp.put("intent", intent); 86 data.add(temp); 87 } 88 89 @Override 90 protected void onListItemClick(ListView listView, View view, int position, long id) { 91 Map<?, ?> map = (Map<?, ?>) listView.getItemAtPosition(position); 92 93 Intent intent = (Intent) map.get("intent"); 94 startActivity(intent); 95 } 96} 97