Merge branch 'installed-version' into 'master'
Always display installed app version in the app version list Closes #1572 See merge request fdroid/fdroidclient!749
This commit is contained in:
commit
1c7e4aac29
@ -265,7 +265,10 @@ public final class Utils {
|
||||
"5.0", // 21
|
||||
"5.1", // 22
|
||||
"6.0", // 23
|
||||
"7.0", // 24
|
||||
"7.0", // 24,
|
||||
"7.1", // 25,
|
||||
"8.0", // 26,
|
||||
"8.1", // 27
|
||||
};
|
||||
|
||||
public static String getAndroidVersionName(int sdkLevel) {
|
||||
|
@ -92,7 +92,8 @@ public class AppDetailsRecyclerViewAdapter
|
||||
private static final int VIEWTYPE_LINKS = 3;
|
||||
private static final int VIEWTYPE_PERMISSIONS = 4;
|
||||
private static final int VIEWTYPE_VERSIONS = 5;
|
||||
private static final int VIEWTYPE_VERSION = 6;
|
||||
private static final int VIEWTYPE_NO_VERSIONS = 6;
|
||||
private static final int VIEWTYPE_VERSION = 7;
|
||||
|
||||
private final Context context;
|
||||
@NonNull
|
||||
@ -123,6 +124,7 @@ public class AppDetailsRecyclerViewAdapter
|
||||
versions = new ArrayList<>();
|
||||
compatibleVersionsDifferentSig = new ArrayList<>();
|
||||
final List<Apk> apks = ApkProvider.Helper.findByPackageName(context, this.app.packageName);
|
||||
ensureInstalledApkExists(apks);
|
||||
boolean showIncompatibleVersions = Preferences.get().showIncompatibleVersions();
|
||||
for (final Apk apk : apks) {
|
||||
boolean allowByCompatibility = apk.compatible || showIncompatibleVersions;
|
||||
@ -150,14 +152,30 @@ public class AppDetailsRecyclerViewAdapter
|
||||
addItem(VIEWTYPE_DONATE);
|
||||
addItem(VIEWTYPE_LINKS);
|
||||
addItem(VIEWTYPE_PERMISSIONS);
|
||||
addItem(VIEWTYPE_VERSIONS);
|
||||
if (showVersions) {
|
||||
setShowVersions(true);
|
||||
if (versions.size() > 0) {
|
||||
addItem(VIEWTYPE_VERSIONS);
|
||||
if (showVersions) {
|
||||
setShowVersions(true);
|
||||
}
|
||||
} else {
|
||||
addItem(VIEWTYPE_NO_VERSIONS);
|
||||
}
|
||||
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
private void ensureInstalledApkExists(final List<Apk> apks) {
|
||||
Apk installedApk = app.getInstalledApk(this.context);
|
||||
// These conditions should be enough to determine if the installedApk
|
||||
// is a generated dummy or a proper APK containing data from a repository.
|
||||
if (installedApk != null && installedApk.added == null && installedApk.sig == null) {
|
||||
installedApk.compatible = true;
|
||||
installedApk.sig = app.installedSig;
|
||||
installedApk.maxSdkVersion = -1;
|
||||
apks.add(installedApk);
|
||||
}
|
||||
}
|
||||
|
||||
void setShowVersions(boolean showVersions) {
|
||||
setShowVersions(showVersions, false);
|
||||
}
|
||||
@ -290,11 +308,10 @@ public class AppDetailsRecyclerViewAdapter
|
||||
return new PermissionsViewHolder(permissions);
|
||||
case VIEWTYPE_VERSIONS:
|
||||
View versionsView = inflater.inflate(R.layout.app_details2_links, parent, false);
|
||||
if (versions.size() == 0) {
|
||||
return new NoVersionsViewHolder(versionsView);
|
||||
} else {
|
||||
return new VersionsViewHolder(versionsView);
|
||||
}
|
||||
return new VersionsViewHolder(versionsView);
|
||||
case VIEWTYPE_NO_VERSIONS:
|
||||
View noVersionsView = inflater.inflate(R.layout.app_details2_links, parent, false);
|
||||
return new NoVersionsViewHolder(noVersionsView);
|
||||
case VIEWTYPE_VERSION:
|
||||
View version = inflater.inflate(R.layout.app_details2_version_item, parent, false);
|
||||
return new VersionViewHolder(version);
|
||||
@ -318,6 +335,7 @@ public class AppDetailsRecyclerViewAdapter
|
||||
case VIEWTYPE_LINKS:
|
||||
case VIEWTYPE_PERMISSIONS:
|
||||
case VIEWTYPE_VERSIONS:
|
||||
case VIEWTYPE_NO_VERSIONS:
|
||||
((AppDetailsViewHolder) holder).bindModel();
|
||||
break;
|
||||
|
||||
@ -1042,6 +1060,8 @@ public class AppDetailsRecyclerViewAdapter
|
||||
TextUtils.equals(apk.sig, app.getMostAppropriateSignature());
|
||||
boolean isApkDownloading = callbacks.isAppDownloading() && downloadedApk != null &&
|
||||
downloadedApk.compareTo(apk) == 0 && TextUtils.equals(apk.apkName, downloadedApk.apkName);
|
||||
boolean isApkInstalledDummy = apk.versionCode == app.installedVersionCode &&
|
||||
apk.compatible && apk.size == 0 && apk.maxSdkVersion == -1;
|
||||
|
||||
// Version name and statuses
|
||||
version.setText(apk.versionName);
|
||||
@ -1061,15 +1081,26 @@ public class AppDetailsRecyclerViewAdapter
|
||||
}
|
||||
|
||||
// Added date
|
||||
java.text.DateFormat df = DateFormat.getDateFormat(context);
|
||||
added.setText(context.getString(R.string.added_on, df.format(apk.added)));
|
||||
if (apk.added != null) {
|
||||
java.text.DateFormat df = DateFormat.getDateFormat(context);
|
||||
added.setVisibility(View.VISIBLE);
|
||||
added.setText(context.getString(R.string.added_on, df.format(apk.added)));
|
||||
} else {
|
||||
added.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
// Repository name, APK size and required Android version
|
||||
Repo repo = RepoProvider.Helper.findById(context, apk.repoId);
|
||||
repository.setText(repo != null ? repo.getName() : context.getString(R.string.unknown));
|
||||
if (repo != null) {
|
||||
repository.setVisibility(View.VISIBLE);
|
||||
repository.setText(repo.getName());
|
||||
} else {
|
||||
repository.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
size.setText(context.getString(R.string.app_size, Utils.getFriendlySize(apk.size)));
|
||||
api.setText(getApiText(apk));
|
||||
|
||||
|
||||
// Figuring out whether to show Install/Upgrade button or Downgrade button
|
||||
buttonDowngrade.setVisibility(View.GONE);
|
||||
buttonInstallUpgrade.setVisibility(View.GONE);
|
||||
@ -1121,13 +1152,21 @@ public class AppDetailsRecyclerViewAdapter
|
||||
// Expand the view if it was previously expanded or when downloading
|
||||
expand(versionsExpandTracker.get(apk.apkName) || isApkDownloading);
|
||||
|
||||
// Toggle expanded view when clicking the whole version item
|
||||
itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
toggleExpanded();
|
||||
}
|
||||
});
|
||||
// Toggle expanded view when clicking the whole version item,
|
||||
// unless it's an installed app version dummy item - it doesn't
|
||||
// contain any meaningful info, so there is no reason to expand it.
|
||||
if (!isApkInstalledDummy) {
|
||||
expandArrow.setAlpha(1f);
|
||||
itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
toggleExpanded();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
expandArrow.setAlpha(0.3f);
|
||||
itemView.setOnClickListener(null);
|
||||
}
|
||||
}
|
||||
|
||||
private String getApiText(final Apk apk) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user