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));