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