diff --git a/F-Droid/res/values/strings.xml b/F-Droid/res/values/strings.xml
index deecc6f43..9d375edc4 100644
--- a/F-Droid/res/values/strings.xml
+++ b/F-Droid/res/values/strings.xml
@@ -63,6 +63,8 @@
Installed
Not Installed
+ Installed (from %s)
+ Installed (from unknown source)
Added on %s
diff --git a/F-Droid/src/org/fdroid/fdroid/AppDetails.java b/F-Droid/src/org/fdroid/fdroid/AppDetails.java
index 119f803d4..2e8a53ff5 100644
--- a/F-Droid/src/org/fdroid/fdroid/AppDetails.java
+++ b/F-Droid/src/org/fdroid/fdroid/AppDetails.java
@@ -70,6 +70,7 @@ import org.fdroid.fdroid.data.Apk;
import org.fdroid.fdroid.data.ApkProvider;
import org.fdroid.fdroid.data.App;
import org.fdroid.fdroid.data.AppProvider;
+import org.fdroid.fdroid.data.InstalledAppProvider;
import org.fdroid.fdroid.data.Repo;
import org.fdroid.fdroid.data.RepoProvider;
import org.fdroid.fdroid.installer.Installer;
@@ -173,11 +174,31 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
}
+ private String getInstalledStatus(final Apk apk) {
+ // Definitely not installed.
+ if (apk.vercode != app.installedVersionCode) {
+ return getString(R.string.not_inst);
+ }
+ // Definitely installed this version.
+ if (mInstalledSigID != null && apk.sig != null
+ && apk.sig.equals(mInstalledSigID)) {
+ return getString(R.string.inst);
+ }
+ // Installed the same version, but from someplace else.
+ final String installerPkgName = mPm.getInstallerPackageName(app.id);
+ if (installerPkgName != null && installerPkgName.length() > 0) {
+ final String installerLabel = InstalledAppProvider
+ .getApplicationLabel(mctx, installerPkgName);
+ return getString(R.string.inst_known_source, installerLabel);
+ }
+ return getString(R.string.inst_unknown_source);
+ }
+
@Override
public View getView(int position, View convertView, ViewGroup parent) {
java.text.DateFormat df = DateFormat.getDateFormat(mctx);
- Apk apk = getItem(position);
+ final Apk apk = getItem(position);
ViewHolder holder;
if (convertView == null) {
@@ -202,13 +223,7 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
+ " " + apk.version
+ (apk.vercode == app.suggestedVercode ? " ☆" : ""));
- if (apk.vercode == app.installedVersionCode
- && mInstalledSigID != null && apk.sig != null
- && apk.sig.equals(mInstalledSigID)) {
- holder.status.setText(getString(R.string.inst));
- } else {
- holder.status.setText(getString(R.string.not_inst));
- }
+ holder.status.setText(getInstalledStatus(apk));
if (apk.size > 0) {
holder.size.setText(Utils.getFriendlySize(apk.size));