diff --git a/app/src/main/java/org/lsposed/manager/adapters/ScopeAdapter.java b/app/src/main/java/org/lsposed/manager/adapters/ScopeAdapter.java index 338fd598..321e9266 100644 --- a/app/src/main/java/org/lsposed/manager/adapters/ScopeAdapter.java +++ b/app/src/main/java/org/lsposed/manager/adapters/ScopeAdapter.java @@ -380,9 +380,12 @@ public class ScopeAdapter extends RecyclerView.Adapter } }); SpannableStringBuilder sb = new SpannableStringBuilder(android ? "" : activity.getString(R.string.app_description, appInfo.packageName, appInfo.packageInfo.versionName)); - holder.appDescription.setVisibility(View.VISIBLE); + if (android) holder.appDescription.setVisibility(View.GONE); + else { + holder.appDescription.setText(sb); + sb = new SpannableStringBuilder(); + } if (!recommendedList.isEmpty() && recommendedList.contains(appInfo.application)) { - if (!android) sb.append("\n"); String recommended = activity.getString(R.string.requested_by_module); sb.append(recommended); final ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(ResourceUtils.resolveColor(activity.getTheme(), androidx.appcompat.R.attr.colorAccent)); @@ -394,10 +397,8 @@ public class ScopeAdapter extends RecyclerView.Adapter sb.setSpan(styleSpan, sb.length() - recommended.length(), sb.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); } sb.setSpan(foregroundColorSpan, sb.length() - recommended.length(), sb.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); - } else if (android) { - holder.appDescription.setVisibility(View.GONE); } - holder.appDescription.setText(sb); + holder.hint.setText(sb);; holder.itemView.setOnCreateContextMenuListener((menu, v, menuInfo) -> { activity.getMenuInflater().inflate(R.menu.menu_app_item, menu); @@ -551,6 +552,7 @@ public class ScopeAdapter extends RecyclerView.Adapter ImageView appIcon; TextView appName; TextView appDescription; + TextView hint; MaterialCheckBox checkbox; ViewHolder(ItemModuleBinding binding) { @@ -560,6 +562,7 @@ public class ScopeAdapter extends RecyclerView.Adapter appName = binding.appName; appDescription = binding.description; checkbox = binding.checkbox; + hint = binding.hint; checkbox.setVisibility(View.VISIBLE); } } diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java index 6ab38cfc..3f6644e8 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java @@ -444,6 +444,9 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi } else { sb.append(getString(R.string.module_empty_description)); } + holder.appDescription.setText(sb); + + sb = new SpannableStringBuilder(); int installXposedVersion = ConfigManager.getXposedApiVersion(); String warningText = null; @@ -457,7 +460,6 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi warningText = getString(R.string.warning_installed_on_external_storage); } if (warningText != null) { - sb.append("\n"); sb.append(warningText); final ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(ContextCompat.getColor(requireActivity(), rikka.material.R.color.material_red_500)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { @@ -472,7 +474,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi if (repoLoader.isRepoLoaded()) { var ver = repoLoader.getModuleLatestVersion(item.packageName); if (ver != null && ver.first > item.versionCode) { - sb.append("\n"); + if (warningText != null) sb.append("\n"); String recommended = getString(R.string.update_available, ver.second); sb.append(recommended); final ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(ResourceUtils.resolveColor(requireActivity().getTheme(), androidx.appcompat.R.attr.colorAccent)); @@ -486,7 +488,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi sb.setSpan(foregroundColorSpan, sb.length() - recommended.length(), sb.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); } } - holder.appDescription.setText(sb); + holder.hint.setText(sb); if (!isPick) { holder.root.setAlpha(moduleUtil.isModuleEnabled(item.packageName) ? 1.0f : .5f); @@ -605,6 +607,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi TextView appName; TextView appDescription; TextView appVersion; + TextView hint; MaterialCheckBox checkBox; ViewHolder(ItemModuleBinding binding) { @@ -614,6 +617,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi appName = binding.appName; appDescription = binding.description; appVersion = binding.versionName; + hint = binding.hint; checkBox = binding.checkbox; } } diff --git a/app/src/main/res/layout/item_module.xml b/app/src/main/res/layout/item_module.xml index e01ca6d4..af05ce86 100644 --- a/app/src/main/res/layout/item_module.xml +++ b/app/src/main/res/layout/item_module.xml @@ -68,11 +68,25 @@ android:layout_gravity="center_vertical" android:textAppearance="?android:attr/textAppearanceListItemSecondary" android:textColor="?android:attr/textColorSecondary" + app:layout_constraintBottom_toBottomOf="@id/hint" + app:layout_constraintEnd_toStartOf="@id/checkbox" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintStart_toStartOf="@id/app_name" + app:layout_constraintTop_toBottomOf="@id/app_name" + tools:text="@tools:sample/lorem" /> + +