diff --git a/res/layout/select_local_apps_list_item.xml b/res/layout/select_local_apps_list_item.xml new file mode 100644 index 000000000..c29cd761b --- /dev/null +++ b/res/layout/select_local_apps_list_item.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/org/fdroid/fdroid/views/fragments/SelectLocalAppsFragment.java b/src/org/fdroid/fdroid/views/fragments/SelectLocalAppsFragment.java index 182d95dcb..87d692f9d 100644 --- a/src/org/fdroid/fdroid/views/fragments/SelectLocalAppsFragment.java +++ b/src/org/fdroid/fdroid/views/fragments/SelectLocalAppsFragment.java @@ -19,15 +19,19 @@ import android.app.ListFragment; import android.app.LoaderManager.LoaderCallbacks; import android.content.CursorLoader; import android.content.Loader; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; import android.database.Cursor; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; +import android.util.Log; import android.view.ActionMode; import android.view.View; -import android.widget.ListView; +import android.widget.*; import android.widget.SearchView.OnQueryTextListener; -import android.widget.SimpleCursorAdapter; +import android.widget.SimpleCursorAdapter.ViewBinder; import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.R; @@ -42,6 +46,8 @@ import java.util.HashSet; public class SelectLocalAppsFragment extends ListFragment implements LoaderCallbacks, OnQueryTextListener { + private PackageManager packageManager; + private Drawable defaultAppIcon; private SelectLocalAppsActivity selectLocalAppsActivity; private ActionMode mActionMode = null; private String mCurrentFilterString; @@ -57,21 +63,48 @@ public class SelectLocalAppsFragment extends ListFragment setEmptyText(getString(R.string.no_applications_found)); + packageManager = getActivity().getPackageManager(); + defaultAppIcon = getActivity().getResources() + .getDrawable(android.R.drawable.sym_def_app_icon); + selectLocalAppsActivity = (SelectLocalAppsActivity) getActivity(); ListView listView = getListView(); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); SimpleCursorAdapter adapter = new SimpleCursorAdapter(getActivity(), - android.R.layout.simple_list_item_activated_2, + R.layout.select_local_apps_list_item, null, new String[] { InstalledAppProvider.DataColumns.APPLICATION_LABEL, InstalledAppProvider.DataColumns.APP_ID, }, new int[] { - android.R.id.text1, - android.R.id.text2, + R.id.application_label, + R.id.package_name, }, 0); + adapter.setViewBinder(new ViewBinder() { + + @Override + public boolean setViewValue(View view, Cursor cursor, int columnIndex) { + Log.i("SelectLocalAppsFragment", "ViewBinder " + columnIndex); + if (columnIndex == cursor.getColumnIndex(InstalledAppProvider.DataColumns.APP_ID)) { + String packageName = cursor.getString(columnIndex); + TextView textView = (TextView) view.findViewById(R.id.package_name); + textView.setText(packageName); + LinearLayout ll = (LinearLayout) view.getParent().getParent(); + ImageView iconView = (ImageView) ll.getChildAt(0); + Drawable icon; + try { + icon = packageManager.getApplicationIcon(packageName); + } catch (NameNotFoundException e) { + icon = defaultAppIcon; + } + iconView.setImageDrawable(icon); + return true; + } + return false; + } + }); setListAdapter(adapter); setListShown(false); // start out with a progress indicator