1 /* 2 ** 3 ** Copyright 2006, The Android Open Source Project 4 ** 5 ** Licensed under the Apache License, Version 2.0 (the "License"); 6 ** you may not use this file except in compliance with the License. 7 ** You may obtain a copy of the License at 8 ** 9 ** http://www.apache.org/licenses/LICENSE-2.0 10 ** 11 ** Unless required by applicable law or agreed to in writing, software 12 ** distributed under the License is distributed on an "AS IS" BASIS, 13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 ** See the License for the specific language governing permissions and 15 ** limitations under the License. 16 */ 17 18 package com.android.development; 19 20 import android.app.ActivityManager; 21 import android.app.ListActivity; 22 import android.content.Context; 23 import android.content.Intent; 24 import android.content.pm.PackageManager; 25 import android.os.Bundle; 26 import android.view.View; 27 import android.view.ViewGroup; 28 import android.view.LayoutInflater; 29 import android.widget.BaseAdapter; 30 import android.widget.ListView; 31 import android.widget.TextView; 32 import java.text.Collator; 33 import java.util.ArrayList; 34 import java.util.Collections; 35 import java.util.Comparator; 36 import java.util.List; 37 38 public class RunningProcesses extends ListActivity { 39 PackageManager mPm; 40 41 @Override onCreate(Bundle icicle)42 protected void onCreate(Bundle icicle) { 43 super.onCreate(icicle); 44 45 mPm = getPackageManager(); 46 mAdapter = new AppListAdapter(this); 47 if (mAdapter.getCount() <= 0) { 48 finish(); 49 } else { 50 setListAdapter(mAdapter); 51 } 52 } 53 54 @Override onResume()55 protected void onResume() { 56 super.onResume(); 57 } 58 59 @Override onStop()60 protected void onStop() { 61 super.onStop(); 62 } 63 64 @Override onListItemClick(ListView l, View v, int position, long id)65 protected void onListItemClick(ListView l, View v, int position, long id) { 66 ListItem app = mAdapter.appForPosition(position); 67 // Create intent to start new activity 68 Intent intent = new Intent(Intent.ACTION_VIEW); 69 intent.setClass(this, ProcessInfo.class); 70 intent.putExtra("processName", app.procInfo.processName); 71 intent.putExtra("packageList", app.procInfo.pkgList); 72 // start new activity to display extended information 73 startActivity(intent); 74 } 75 76 private final class AppListAdapter extends BaseAdapter { AppListAdapter(Context context)77 public AppListAdapter(Context context) { 78 mContext = context; 79 mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 80 81 ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 82 List<ActivityManager.RunningAppProcessInfo> appList = am.getRunningAppProcesses(); 83 for (ActivityManager.RunningAppProcessInfo app : appList) { 84 if(mList == null) { 85 mList = new ArrayList<ListItem>(); 86 } 87 mList.add(new ListItem(app)); 88 } 89 if (mList != null) { 90 Collections.sort(mList, sDisplayNameComparator); 91 } 92 } 93 appForPosition(int position)94 public ListItem appForPosition(int position) { 95 if (mList == null) { 96 return null; 97 } 98 return mList.get(position); 99 } 100 getCount()101 public int getCount() { 102 return mList != null ? mList.size() : 0; 103 } 104 getItem(int position)105 public Object getItem(int position) { 106 return position; 107 } 108 getItemId(int position)109 public long getItemId(int position) { 110 return position; 111 } 112 getView(int position, View convertView, ViewGroup parent)113 public View getView(int position, View convertView, ViewGroup parent) { 114 View view; 115 if (convertView == null) { 116 view = mInflater.inflate( 117 android.R.layout.simple_list_item_1, parent, false); 118 } else { 119 view = convertView; 120 } 121 bindView(view, mList.get(position)); 122 return view; 123 } 124 bindView(View view, ListItem info)125 private final void bindView(View view, ListItem info) { 126 TextView text = (TextView)view.findViewById(android.R.id.text1); 127 text.setText(info != null ? info.procInfo.processName : "(none)"); 128 } 129 130 protected final Context mContext; 131 protected final LayoutInflater mInflater; 132 protected List<ListItem> mList; 133 134 } 135 136 private final Comparator sDisplayNameComparator = new Comparator() { 137 public final int compare(Object a, Object b) { 138 CharSequence sa = ((ListItem) a).procInfo.processName; 139 CharSequence sb = ((ListItem) b).procInfo.processName; 140 return collator.compare(sa, sb); 141 } 142 private final Collator collator = Collator.getInstance(); 143 }; 144 145 private class ListItem { 146 ActivityManager.RunningAppProcessInfo procInfo; ListItem(ActivityManager.RunningAppProcessInfo pInfo)147 public ListItem(ActivityManager.RunningAppProcessInfo pInfo) { 148 procInfo = pInfo; 149 } 150 } 151 152 private AppListAdapter mAdapter; 153 } 154 155