Merge branch 'archs' into 'master'

Display required arch also for compatible app versions

Closes #1589

See merge request fdroid/fdroidclient!750
This commit is contained in:
Hans-Christoph Steiner 2018-09-11 08:41:10 +00:00
commit ae136c8342
2 changed files with 50 additions and 7 deletions

View File

@ -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,9 +1090,10 @@ 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) {
// 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);
@ -1098,8 +1101,21 @@ public class AppDetailsRecyclerViewAdapter
} 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<String> 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) {

View File

@ -167,5 +167,12 @@
android:visibility="gone"
tools:visibility="visible"
tools:text="Requires: armeabi-v7a" />
<TextView android:id="@+id/target_arch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?attr/lightGrayTextColor"
android:textSize="12sp"
android:visibility="gone" />
</LinearLayout>
</RelativeLayout>