diff --git a/app/src/main/java/org/lsposed/manager/repo/model/OnlineModule.java b/app/src/main/java/org/lsposed/manager/repo/model/OnlineModule.java index f382dde8..c861a923 100644 --- a/app/src/main/java/org/lsposed/manager/repo/model/OnlineModule.java +++ b/app/src/main/java/org/lsposed/manager/repo/model/OnlineModule.java @@ -46,6 +46,9 @@ public class OnlineModule { @SerializedName("latestRelease") @Expose private String latestRelease; + @SerializedName("latestReleaseTime") + @Expose + private String latestReleaseTime; @SerializedName("releases") @Expose private List releases = new ArrayList<>(); @@ -125,6 +128,10 @@ public class OnlineModule { return releases; } + public String getLatestReleaseTime() { + return latestReleaseTime; + } + public void setReleases(List releases) { this.releases = releases; } diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/RepoFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/RepoFragment.java index 4e7499c0..5a9a8843 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/RepoFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/RepoFragment.java @@ -58,6 +58,9 @@ import org.lsposed.manager.ui.widget.EmptyStateRecyclerView; import org.lsposed.manager.util.ModuleUtil; import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.format.FormatStyle; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -283,7 +286,10 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene OnlineModule module = showList.get(position); holder.appName.setText(module.getDescription()); holder.appPackageName.setText(module.getName()); - + var instant = Instant.parse(module.getLatestReleaseTime()); + var formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT) + .withLocale(App.getLocale()).withZone(ZoneId.systemDefault()); + holder.publishedTime.setText(String.format(getString(R.string.module_repo_updated_time), formatter.format(instant))); SpannableStringBuilder sb = new SpannableStringBuilder(); String summary = module.getSummary(); @@ -352,7 +358,7 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene if (sort == 0) { return labelComparator.compare(a.getDescription(), b.getDescription()); } else { - return Instant.parse(b.getReleases().get(0).getUpdatedAt()).compareTo(Instant.parse(a.getReleases().get(0).getUpdatedAt())); + return Instant.parse(b.getLatestReleaseTime()).compareTo(Instant.parse(a.getLatestReleaseTime())); } }).collect(Collectors.toList()); String queryStr = searchView != null ? searchView.getQuery().toString() : ""; @@ -392,14 +398,16 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene TextView appPackageName; TextView appDescription; TextView hint; + TextView publishedTime; ViewHolder(ItemOnlinemoduleBinding binding) { super(binding.getRoot()); root = binding.itemRoot; appName = binding.appName; - appPackageName=binding.appPackageName; + appPackageName = binding.appPackageName; appDescription = binding.description; hint = binding.hint; + publishedTime = binding.publishedTime; } } diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/RepoItemFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/RepoItemFragment.java index 275c89b7..d06c6944 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/RepoItemFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/RepoItemFragment.java @@ -77,6 +77,10 @@ import org.lsposed.manager.util.chrome.CustomTabsURLSpan; import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.format.FormatStyle; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; @@ -411,6 +415,10 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.RepoLis } else { Release release = items.get(position); holder.title.setText(release.getName()); + var instant = Instant.parse(release.getPublishedAt()); + var formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT) + .withLocale(App.getLocale()).withZone(ZoneId.systemDefault()); + holder.publishedTime.setText(String.format(getString(R.string.module_repo_published_time), formatter.format(instant))); renderGithubMarkdown(holder.description, release.getDescriptionHTML()); holder.openInBrowser.setOnClickListener(v -> NavUtil.startURL(requireActivity(), release.getUrl())); List assets = release.getReleaseAssets(); @@ -443,6 +451,7 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.RepoLis class ViewHolder extends RecyclerView.ViewHolder { TextView title; + TextView publishedTime; WebView description; MaterialButton openInBrowser; MaterialButton viewAssets; @@ -457,6 +466,7 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.RepoLis public ReleaseViewHolder(ItemRepoReleaseBinding binding) { super(binding.getRoot()); title = binding.title; + publishedTime = binding.publishedTime; description = binding.description; openInBrowser = binding.openInBrowser; viewAssets = binding.viewAssets; diff --git a/app/src/main/res/layout/item_onlinemodule.xml b/app/src/main/res/layout/item_onlinemodule.xml index 3687fc71..6c272989 100644 --- a/app/src/main/res/layout/item_onlinemodule.xml +++ b/app/src/main/res/layout/item_onlinemodule.xml @@ -98,7 +98,7 @@ android:textAppearance="?android:attr/textAppearanceListItemSecondary" android:textColor="?android:attr/textColorPrimary" app:layout_constrainedWidth="true" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toTopOf="@id/published_Time" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" @@ -106,5 +106,22 @@ app:layout_constraintWidth_max="wrap" tools:text="@tools:sample/lorem" /> + + diff --git a/app/src/main/res/layout/item_repo_release.xml b/app/src/main/res/layout/item_repo_release.xml index 158de771..254ee379 100644 --- a/app/src/main/res/layout/item_repo_release.xml +++ b/app/src/main/res/layout/item_repo_release.xml @@ -47,12 +47,26 @@ android:textSize="16sp" app:layout_constrainedWidth="true" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintBottom_toTopOf="@id/description" + app:layout_constraintBottom_toTopOf="@id/published_Time" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintWidth_max="wrap" tools:text="@tools:sample/lorem" /> + + 仓库 加载中… 所有模块均已最新 + 发布于 %s + 更新于 %s %d 个模块可更新 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b744847c..04931c50 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -34,6 +34,8 @@ Repository Loading… All modules up to date + Published at %s + Updated at %s %d module upgradable %d modules upgradable