package com.eaway.appcrawler; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.View; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RadioButton; import android.widget.SimpleAdapter; import android.widget.SimpleAdapter.ViewBinder; import android.widget.TextView; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; public class MainActivity extends Activity { public static final String TAG = "AppCrawlerTool"; private static final String APP_NAME = "name"; private static final String APP_PKG = "pkg"; private static final String APP_ICON = "icon"; private static final String PKG_PREFIX_ANDROID = "com.android"; private static final String PKG_PREFIX_GOOGLE = "com.google"; private ListView mListView; private RadioButton mRadioBtnPackage; private RadioButton mRadioBtnName; private CheckBox mCheckBoxHideAndroid; private CheckBox mCheckBoxHideGoogle; private PackageManager mPkgMgr; private PackageInfo mPkgInfo; public static List<PackageInfo> sPkgInfoList; public static List<TargetApp> sSelectedAppList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mPkgMgr = getPackageManager(); try { mPkgInfo = mPkgMgr.getPackageInfo(getPackageName(), 0); } catch (NameNotFoundException e) { e.printStackTrace(); } mListView = (ListView) findViewById(R.id.appList); mRadioBtnPackage = (RadioButton) findViewById(R.id.radioPackage); mRadioBtnName = (RadioButton) findViewById(R.id.radioName); mCheckBoxHideAndroid = (CheckBox) findViewById(R.id.checkBoxHideAndroid); mCheckBoxHideGoogle = (CheckBox) findViewById(R.id.checkBoxHideGoogle); refreshAppListView(); } public void onHideButtonClick(View view) { refreshAppListView(); } public void onSortButtonClick(View view) { if (sPkgInfoList != null) { if (mRadioBtnPackage.isChecked()) { Collections.sort(sPkgInfoList, new Comparator<PackageInfo>() { public int compare(PackageInfo p1, PackageInfo p2) { return p1.packageName.compareTo(p2.packageName); } }); } else { Collections.sort(sPkgInfoList, new Comparator<PackageInfo>() { public int compare(PackageInfo p1, PackageInfo p2) { String n1 = (String) p1.applicationInfo.loadLabel(mPkgMgr); String n2 = (String) p2.applicationInfo.loadLabel(mPkgMgr); return n1.compareTo(n2); } }); } refreshAppListView(); } } public void onStartButtonClick(View view) { // Get selected app list sSelectedAppList = new ArrayList<TargetApp>(); for (int i = 0; i < mListView.getChildCount(); i++) { LinearLayout itemLayout = (LinearLayout) mListView.getChildAt(i); CheckBox cb = (CheckBox) itemLayout.findViewById(R.id.checkBox); if (cb.isChecked()) { TextView pkg = (TextView) itemLayout.findViewById(R.id.appPackage); TextView name = (TextView) itemLayout.findViewById(R.id.appName); TargetApp app = new TargetApp((String) name.getText(), (String) pkg.getText()); sSelectedAppList.add(app); } } Intent intent = new Intent(this, SettingsActivity.class); startActivity(intent); } private boolean refreshAppListView() { // Get installed packages ArrayList<HashMap<String, Object>> appList = new ArrayList<HashMap<String, Object>>(); if (sPkgInfoList == null) { sPkgInfoList = mPkgMgr.getInstalledPackages(0); } for (PackageInfo pkg : sPkgInfoList) { // Skip Ourself if (pkg.packageName.equalsIgnoreCase(getPackageName())) continue; // Skip Android packages if (mCheckBoxHideAndroid.isChecked()) { if (pkg.packageName.contains(PKG_PREFIX_ANDROID)) continue; } // Skip Google packages if (mCheckBoxHideGoogle.isChecked()) { if (pkg.packageName.contains(PKG_PREFIX_GOOGLE)) continue; } HashMap<String, Object> mapApp = new HashMap<String, Object>(); mapApp.put(APP_PKG, pkg.packageName); mapApp.put(APP_NAME, pkg.applicationInfo.loadLabel(mPkgMgr)); mapApp.put(APP_ICON, pkg.applicationInfo.loadIcon(mPkgMgr)); appList.add(mapApp); } // Bind ListView with content adapter SimpleAdapter appAdapter = new SimpleAdapter(this, appList, R.layout.app_list_item, new String[] { APP_NAME, APP_PKG, APP_ICON }, new int[] { R.id.appName, R.id.appPackage, R.id.appIcon }); appAdapter.setViewBinder(new ViewBinder() { public boolean setViewValue(View view, Object data, String textRepresentation) { if (view instanceof ImageView && data instanceof Drawable) { ImageView iv = (ImageView) view; iv.setImageDrawable((Drawable) data); return true; } else return false; } }); mListView.setAdapter(appAdapter); return true; } }