From c937cbf297b50a3f331951a5c5b103d66fe0b787 Mon Sep 17 00:00:00 2001 From: wsdfhjxc Date: Fri, 7 Sep 2018 03:06:43 +0200 Subject: [PATCH] Display required arch also for compatible app versions --- .../views/AppDetailsRecyclerViewAdapter.java | 50 ++++++++++++++++--- .../res/layout/app_details2_version_item.xml | 7 +++ 2 files changed, 50 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java index 75dd50bf5..6c8bf9eb7 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java @@ -1005,6 +1005,7 @@ public class AppDetailsRecyclerViewAdapter Button buttonAction; final View busyIndicator; final TextView incompatibleReasons; + final TextView targetArch; private Apk apk; @@ -1024,6 +1025,7 @@ public class AppDetailsRecyclerViewAdapter buttonDowngrade = (Button) view.findViewById(R.id.button_downgrade); busyIndicator = (View) view.findViewById(R.id.busy_indicator); incompatibleReasons = (TextView) view.findViewById(R.id.incompatible_reasons); + targetArch = (TextView) view.findViewById(R.id.target_arch); int margin = context.getResources().getDimensionPixelSize(R.dimen.layout_horizontal_margin); int padding = context.getResources().getDimensionPixelSize(R.dimen.details_activity_padding); @@ -1088,18 +1090,32 @@ public class AppDetailsRecyclerViewAdapter // Show busy indicator when the APK is being downloaded busyIndicator.setVisibility(isApkDownloading ? View.VISIBLE : View.GONE); - // Display incompatible reasons when the app - // isn't compatible and the expert mode is enabled - if (Preferences.get().expertMode() && !apk.compatible) { - String incompatibleReasonsText = getIncompatibleReasonsText(apk); - if (incompatibleReasonsText != null) { - incompatibleReasons.setVisibility(View.VISIBLE); - incompatibleReasons.setText(incompatibleReasonsText); + // Display when the expert mode is enabled + if (Preferences.get().expertMode()) { + // Display incompatible reasons when the app isn't compatible + if (!apk.compatible) { + String incompatibleReasonsText = getIncompatibleReasonsText(apk); + if (incompatibleReasonsText != null) { + incompatibleReasons.setVisibility(View.VISIBLE); + incompatibleReasons.setText(incompatibleReasonsText); + } else { + incompatibleReasons.setVisibility(View.GONE); + } + targetArch.setVisibility(View.GONE); } else { + // Display target architecture when the app is compatible + String targetArchText = getTargetArchText(apk); + if (targetArchText != null) { + targetArch.setVisibility(View.VISIBLE); + targetArch.setText(targetArchText); + } else { + targetArch.setVisibility(View.GONE); + } incompatibleReasons.setVisibility(View.GONE); } } else { incompatibleReasons.setVisibility(View.GONE); + targetArch.setVisibility(View.GONE); } // Expand the view if it was previously expanded or when downloading @@ -1144,6 +1160,26 @@ public class AppDetailsRecyclerViewAdapter return null; } + private String getTargetArchText(final Apk apk) { + if (apk.nativecode == null) { + return null; + } + String currentArch = System.getProperty("os.arch"); + List customArchs = new ArrayList<>(); + for (String arch : apk.nativecode) { + // Gather only archs different than current arch + if (!TextUtils.equals(arch, currentArch)) { + customArchs.add(arch); + } + } + String archs = TextUtils.join(", ", customArchs); + if (!archs.isEmpty()) { + // Reuse "Requires: ..." string to display this + return context.getResources().getString(R.string.requires_features, archs); + } + return null; + } + private void showActionButton(Button button, boolean isApkInstalled, boolean isApkDownloading) { buttonAction = button; if (isApkDownloading) { diff --git a/app/src/main/res/layout/app_details2_version_item.xml b/app/src/main/res/layout/app_details2_version_item.xml index 01f4f91cf..f0e2b7945 100644 --- a/app/src/main/res/layout/app_details2_version_item.xml +++ b/app/src/main/res/layout/app_details2_version_item.xml @@ -167,5 +167,12 @@ android:visibility="gone" tools:visibility="visible" tools:text="Requires: armeabi-v7a" /> + +