diff --git a/res/drawable/ic_cab_done_holo_dark.png b/res/drawable/ic_cab_done_holo_dark.png
new file mode 100644
index 000000000..2e06dd01b
Binary files /dev/null and b/res/drawable/ic_cab_done_holo_dark.png differ
diff --git a/res/layout/applistitem.xml b/res/layout/applistitem.xml
index f2f11e132..ebc9c5367 100644
--- a/res/layout/applistitem.xml
+++ b/res/layout/applistitem.xml
@@ -14,6 +14,26 @@
android:layout_height="50dp"
android:padding="4dp"/>
+
+
+
+
+
+
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 24e579438..3bf3b9d12 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -177,6 +177,6 @@
Display a list of permissions an app needs
You don\'t have any app installed that can handle %s
Compact Layout
- Hide app summaries when listing apps
+ Only show app names and summaries in list
diff --git a/src/org/fdroid/fdroid/AppListAdapter.java b/src/org/fdroid/fdroid/AppListAdapter.java
deleted file mode 100644
index 7d1f45168..000000000
--- a/src/org/fdroid/fdroid/AppListAdapter.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.fdroid.fdroid;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import android.content.Context;
-import android.net.Uri;
-import android.preference.PreferenceManager;
-import android.content.SharedPreferences;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-public class AppListAdapter extends BaseAdapter {
-
- private List items = new ArrayList();
- private Context mContext;
-
- private boolean pref_compact;
-
- public AppListAdapter(Context context) {
- mContext = context;
- SharedPreferences prefs = PreferenceManager
- .getDefaultSharedPreferences(mContext);
- pref_compact = prefs.getBoolean("compactlayout", false);
- }
-
- public void addItem(DB.App app) {
- items.add(app);
- }
-
- public void clear() {
- items.clear();
- }
-
- @Override
- public int getCount() {
- return items.size();
- }
-
- @Override
- public Object getItem(int position) {
- return items.get(position);
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- View v = convertView;
- if (v == null) {
- LayoutInflater vi = (LayoutInflater) mContext
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- v = vi.inflate(R.layout.applistitem, null);
- }
- DB.App app = items.get(position);
-
- TextView name = (TextView) v.findViewById(R.id.name);
- name.setText(app.name);
-
- String vs;
- if (app.hasUpdates)
- vs = app.installedVersion + " -> " + app.updateVersion;
- else if (app.installedVersion != null)
- vs = app.installedVersion;
- else {
- int numav = app.apks.size();
- if (numav == 1)
- vs = mContext.getString(R.string.n_version_available);
- else
- vs = mContext.getString(R.string.n_versions_available);
- vs = String.format(vs, numav);
- }
-
- TextView status = (TextView) v.findViewById(R.id.status);
- status.setText(vs);
-
- TextView license = (TextView) v.findViewById(R.id.license);
- license.setText(app.license);
-
- TextView summary = (TextView) v.findViewById(R.id.summary);
- if (pref_compact)
- summary.setVisibility(View.GONE);
- else
- summary.setText(app.summary);
-
- ImageView icon = (ImageView) v.findViewById(R.id.icon);
- File icn = new File(DB.getIconsPath(), app.icon);
- if (icn.exists() && icn.length() > 0) {
- new Uri.Builder().build();
- icon.setImageURI(Uri.parse(icn.getPath()));
- } else {
- icon.setImageResource(android.R.drawable.sym_def_app_icon);
- }
-
- // Disable it all if it isn't compatible...
- View[] views = { v, status, summary, license, name };
- for (View view : views) {
- view.setEnabled(app.compatible);
- }
-
- return v;
- }
-
-}
diff --git a/src/org/fdroid/fdroid/AppListManager.java b/src/org/fdroid/fdroid/AppListManager.java
index eadb2a476..4b2b5a077 100644
--- a/src/org/fdroid/fdroid/AppListManager.java
+++ b/src/org/fdroid/fdroid/AppListManager.java
@@ -4,6 +4,10 @@ import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.ArrayAdapter;
+import org.fdroid.fdroid.views.AppListAdapter;
+import org.fdroid.fdroid.views.AvailableAppListAdapter;
+import org.fdroid.fdroid.views.CanUpdateAppListAdapter;
+import org.fdroid.fdroid.views.InstalledAppListAdapter;
import java.util.*;
@@ -48,9 +52,9 @@ public class AppListManager {
public AppListManager(FDroid activity) {
this.fdroidActivity = activity;
- availableApps = new AppListAdapter(fdroidActivity);
- installedApps = new AppListAdapter(fdroidActivity);
- canUpgradeApps = new AppListAdapter(fdroidActivity);
+ availableApps = new AvailableAppListAdapter(fdroidActivity);
+ installedApps = new InstalledAppListAdapter(fdroidActivity);
+ canUpgradeApps = new CanUpdateAppListAdapter(fdroidActivity);
// Needs to be created before createViews(), because that will use the
// getCategoriesAdapter() accessor which expects this object...
diff --git a/src/org/fdroid/fdroid/SearchResults.java b/src/org/fdroid/fdroid/SearchResults.java
index 18631b1d7..95c2434e9 100644
--- a/src/org/fdroid/fdroid/SearchResults.java
+++ b/src/org/fdroid/fdroid/SearchResults.java
@@ -31,6 +31,8 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;
+import org.fdroid.fdroid.views.AppListAdapter;
+import org.fdroid.fdroid.views.AvailableAppListAdapter;
public class SearchResults extends ListActivity {
@@ -45,7 +47,7 @@ public class SearchResults extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- applist = new AppListAdapter(this);
+ applist = new AvailableAppListAdapter(this);
setContentView(R.layout.searchresults);
Intent intent = getIntent();
diff --git a/src/org/fdroid/fdroid/views/AppListAdapter.java b/src/org/fdroid/fdroid/views/AppListAdapter.java
new file mode 100644
index 000000000..2521dddc6
--- /dev/null
+++ b/src/org/fdroid/fdroid/views/AppListAdapter.java
@@ -0,0 +1,155 @@
+package org.fdroid.fdroid.views;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+import android.net.Uri;
+import android.preference.PreferenceManager;
+import android.content.SharedPreferences;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.*;
+import org.fdroid.fdroid.DB;
+import org.fdroid.fdroid.R;
+
+abstract public class AppListAdapter extends BaseAdapter {
+
+ private List items = new ArrayList();
+ private Context mContext;
+
+ private boolean pref_compact;
+
+ public AppListAdapter(Context context) {
+ mContext = context;
+ SharedPreferences prefs = PreferenceManager
+ .getDefaultSharedPreferences(mContext);
+ pref_compact = prefs.getBoolean("compactlayout", false);
+ }
+
+ abstract protected boolean showStatusUpdate();
+
+ abstract protected boolean showStatusInstalled();
+
+ public void addItem(DB.App app) {
+ items.add(app);
+ }
+
+ public void clear() {
+ items.clear();
+ }
+
+ @Override
+ public int getCount() {
+ return items.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return items.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ View v = convertView;
+ if (v == null) {
+ LayoutInflater vi = (LayoutInflater) mContext
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ v = vi.inflate(R.layout.applistitem, null);
+ }
+ DB.App app = items.get(position);
+
+ TextView name = (TextView) v.findViewById(R.id.name);
+ name.setText(app.name);
+
+ TextView summary = (TextView) v.findViewById(R.id.summary);
+ summary.setText(app.summary);
+
+ TextView status = (TextView) v.findViewById(R.id.status);
+ TextView license = (TextView) v.findViewById(R.id.license);
+
+ ImageView iconUpdates = (ImageView)v.findViewById(R.id.icon_status_has_updates);
+ ImageView iconInstalled = (ImageView)v.findViewById(R.id.icon_status_installed);
+
+ if (pref_compact) {
+
+ status.setVisibility(View.GONE);
+ license.setVisibility(View.GONE);
+
+ RelativeLayout.LayoutParams summaryLayout =
+ new RelativeLayout.LayoutParams(
+ RelativeLayout.LayoutParams.WRAP_CONTENT,
+ RelativeLayout.LayoutParams.WRAP_CONTENT);
+ summaryLayout.addRule(RelativeLayout.BELOW, R.id.name);
+ summaryLayout.addRule(RelativeLayout.RIGHT_OF, R.id.icon);
+ summary.setLayoutParams(summaryLayout);
+
+ if (app.hasUpdates && showStatusUpdate()) {
+ iconUpdates.setImageResource(R.drawable.ic_menu_refresh);
+ iconUpdates.setVisibility(View.VISIBLE);
+ } else {
+ iconUpdates.setVisibility(View.GONE);
+ }
+
+ if (app.installedVerCode > 0 && showStatusInstalled()) {
+ iconInstalled.setImageResource(R.drawable.ic_cab_done_holo_dark);
+ iconInstalled.setVisibility(View.VISIBLE);
+ } else {
+ iconInstalled.setVisibility(View.GONE);
+ }
+
+ } else {
+
+ status.setText(getVersionInfo(app));
+ license.setText(app.license);
+
+ iconUpdates.setVisibility(View.GONE);
+ iconInstalled.setVisibility(View.GONE);
+ }
+
+ ImageView icon = (ImageView) v.findViewById(R.id.icon);
+ File icn = new File(DB.getIconsPath(), app.icon);
+ if (icn.exists() && icn.length() > 0) {
+ new Uri.Builder().build();
+ icon.setImageURI(Uri.parse(icn.getPath()));
+ } else {
+ icon.setImageResource(android.R.drawable.sym_def_app_icon);
+ }
+
+ // Disable it all if it isn't compatible...
+ View[] views = { v, status, summary, license, name };
+ for (View view : views) {
+ view.setEnabled(app.compatible);
+ }
+
+ return v;
+ }
+
+ private String getVersionInfo(DB.App app) {
+ StringBuilder version = new StringBuilder();
+ if (app.installedVersion != null) {
+ version.append(app.installedVersion);
+ if (app.hasUpdates) {
+ version.append(" -> ");
+ version.append(app.updateVersion);
+ }
+ } else {
+ int numav = app.apks.size();
+ String numVersions;
+ if (numav == 1)
+ numVersions = mContext.getString(R.string.n_version_available);
+ else
+ numVersions = mContext.getString(R.string.n_versions_available);
+ version.append(String.format(numVersions, numav));
+ }
+ return version.toString();
+ }
+
+}
diff --git a/src/org/fdroid/fdroid/views/AvailableAppListAdapter.java b/src/org/fdroid/fdroid/views/AvailableAppListAdapter.java
new file mode 100644
index 000000000..2b74b2d88
--- /dev/null
+++ b/src/org/fdroid/fdroid/views/AvailableAppListAdapter.java
@@ -0,0 +1,19 @@
+package org.fdroid.fdroid.views;
+
+import android.content.Context;
+
+public class AvailableAppListAdapter extends AppListAdapter {
+ public AvailableAppListAdapter(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected boolean showStatusUpdate() {
+ return true;
+ }
+
+ @Override
+ protected boolean showStatusInstalled() {
+ return true;
+ }
+}
diff --git a/src/org/fdroid/fdroid/views/CanUpdateAppListAdapter.java b/src/org/fdroid/fdroid/views/CanUpdateAppListAdapter.java
new file mode 100644
index 000000000..efd4416ea
--- /dev/null
+++ b/src/org/fdroid/fdroid/views/CanUpdateAppListAdapter.java
@@ -0,0 +1,19 @@
+package org.fdroid.fdroid.views;
+
+import android.content.Context;
+
+public class CanUpdateAppListAdapter extends AppListAdapter {
+ public CanUpdateAppListAdapter(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected boolean showStatusUpdate() {
+ return false;
+ }
+
+ @Override
+ protected boolean showStatusInstalled() {
+ return false;
+ }
+}
diff --git a/src/org/fdroid/fdroid/views/InstalledAppListAdapter.java b/src/org/fdroid/fdroid/views/InstalledAppListAdapter.java
new file mode 100644
index 000000000..bb3138e2d
--- /dev/null
+++ b/src/org/fdroid/fdroid/views/InstalledAppListAdapter.java
@@ -0,0 +1,19 @@
+package org.fdroid.fdroid.views;
+
+import android.content.Context;
+
+public class InstalledAppListAdapter extends AppListAdapter {
+ public InstalledAppListAdapter(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected boolean showStatusUpdate() {
+ return true;
+ }
+
+ @Override
+ protected boolean showStatusInstalled() {
+ return false;
+ }
+}
diff --git a/src/org/fdroid/fdroid/views/fragments/AppListFragment.java b/src/org/fdroid/fdroid/views/fragments/AppListFragment.java
index e5728221e..249b2f438 100644
--- a/src/org/fdroid/fdroid/views/fragments/AppListFragment.java
+++ b/src/org/fdroid/fdroid/views/fragments/AppListFragment.java
@@ -8,6 +8,7 @@ import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import org.fdroid.fdroid.*;
+import org.fdroid.fdroid.views.AppListAdapter;
import org.fdroid.fdroid.views.AppListView;
abstract class AppListFragment extends Fragment implements AdapterView.OnItemClickListener {
diff --git a/src/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java b/src/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java
index c5955efc4..541267ae3 100644
--- a/src/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java
+++ b/src/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java
@@ -6,7 +6,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
-import org.fdroid.fdroid.AppListAdapter;
+import org.fdroid.fdroid.views.AppListAdapter;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.views.AppListView;
diff --git a/src/org/fdroid/fdroid/views/fragments/CanUpdateAppsFragment.java b/src/org/fdroid/fdroid/views/fragments/CanUpdateAppsFragment.java
index 2b864aadd..9485b478b 100644
--- a/src/org/fdroid/fdroid/views/fragments/CanUpdateAppsFragment.java
+++ b/src/org/fdroid/fdroid/views/fragments/CanUpdateAppsFragment.java
@@ -4,8 +4,7 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.AdapterView;
-import org.fdroid.fdroid.AppListAdapter;
+import org.fdroid.fdroid.views.AppListAdapter;
public class CanUpdateAppsFragment extends AppListFragment {
diff --git a/src/org/fdroid/fdroid/views/fragments/InstalledAppsFragment.java b/src/org/fdroid/fdroid/views/fragments/InstalledAppsFragment.java
index 628ddf9b4..8bcc6b462 100644
--- a/src/org/fdroid/fdroid/views/fragments/InstalledAppsFragment.java
+++ b/src/org/fdroid/fdroid/views/fragments/InstalledAppsFragment.java
@@ -4,7 +4,7 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import org.fdroid.fdroid.AppListAdapter;
+import org.fdroid.fdroid.views.AppListAdapter;
public class InstalledAppsFragment extends AppListFragment {