Repo shows assets size and download time (#2202)

This commit is contained in:
LoveSy 2022-10-31 10:54:34 +08:00 committed by GitHub
parent abe143e9cc
commit 466e5537a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 58 additions and 25 deletions

View File

@ -36,6 +36,12 @@ public class ReleaseAsset {
@SerializedName("downloadUrl")
@Expose
private String downloadUrl;
@SerializedName("downloadCount")
@Expose
private int downloadCount = 0;
@SerializedName("size")
@Expose
private int size = 0;
@Nullable
public String getName() {
@ -63,4 +69,20 @@ public class ReleaseAsset {
public void setDownloadUrl(String downloadUrl) {
this.downloadUrl = downloadUrl;
}
public int getDownloadCount() {
return downloadCount;
}
public void setDownloadCount(int downloadCount) {
this.downloadCount = downloadCount;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}

View File

@ -20,6 +20,7 @@
package org.lsposed.manager.ui.fragment;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.content.res.Resources;
import android.graphics.Color;
@ -27,7 +28,10 @@ import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.text.style.ClickableSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.RelativeSizeSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
@ -38,6 +42,7 @@ import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ArrayAdapter;
import android.widget.ScrollView;
import android.widget.TextView;
@ -347,16 +352,30 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.RepoLis
return new BlurBehindDialogBuilder(requireActivity(), R.style.ThemeOverlay_MaterialAlertDialog_Centered_FullWidthButtons)
.setTitle(R.string.module_release_view_assets)
.setPositiveButton(android.R.string.cancel, null)
.setItems(args.getCharSequenceArray("names"),
.setAdapter(new ArrayAdapter<>(requireActivity(), R.layout.dialog_item, args.getCharSequenceArray("names")),
(dialog, which) -> NavUtil.startURL(requireActivity(), args.getStringArrayList("urls").get(which)))
.create();
}
static void create(FragmentManager fm, String[] names, ArrayList<String> urls) {
static void create(Activity activity, FragmentManager fm, List<ReleaseAsset> assets) {
var f = new DownloadDialog();
var bundle = new Bundle();
bundle.putStringArray("names", names);
bundle.putStringArrayList("urls", urls);
var displayNames = new CharSequence[assets.size()];
for (int i = 0; i < assets.size(); i++) {
var sb = new SpannableStringBuilder(assets.get(i).getName());
var count = assets.get(i).getDownloadCount();
var countStr = activity.getResources().getQuantityString(R.plurals.module_release_assets_download_count, count, count);
var sizeStr = Formatter.formatShortFileSize(activity, assets.get(i).getSize());
sb.append('\n').append(sizeStr).append('/').append(countStr);
final ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(ResourceUtils.resolveColor(activity.getTheme(), android.R.attr.textColorSecondary));
final RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(0.8f);
sb.setSpan(foregroundColorSpan, sb.length() - sizeStr.length() - countStr.length() - 1, sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
sb.setSpan(relativeSizeSpan, sb.length() - sizeStr.length() - countStr.length() - 1, sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
displayNames[i] = sb;
}
bundle.putCharSequenceArray("names", displayNames);
bundle.putStringArrayList("urls", assets.stream().map(ReleaseAsset::getDownloadUrl).collect(Collectors.toCollection(ArrayList::new)));
f.setArguments(bundle);
f.show(fm, "download");
}
@ -429,9 +448,7 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.RepoLis
List<ReleaseAsset> assets = release.getReleaseAssets();
if (assets != null && !assets.isEmpty()) {
holder.viewAssets.setOnClickListener(v -> {
ArrayList<String> names = new ArrayList<>();
assets.forEach(releaseAsset -> names.add(releaseAsset.getName()));
DownloadDialog.create(getChildFragmentManager(), names.toArray(new String[0]), assets.stream().map(ReleaseAsset::getDownloadUrl).collect(Collectors.toCollection(ArrayList::new)));
DownloadDialog.create(requireActivity(), getParentFragmentManager(), assets);
});
} else {
holder.viewAssets.setVisibility(View.GONE);

View File

@ -16,22 +16,12 @@
~
~ Copyright (C) 2021 LSPosed Contributors
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
<com.google.android.material.textview.MaterialTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item"
style="@style/TextAppearance.MaterialComponents.Body2"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textview.MaterialTextView
style="@style/DeviceInfoDialogLabel"
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.google.android.material.textview.MaterialTextView
style="@style/DeviceInfoDialogValue"
android:id="@+id/value"
android:layout_height="wrap_content"
android:minHeight="?attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingBottom="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
android:paddingStart="?attr/listPreferredItemPaddingStart"
android:paddingEnd="?attr/listPreferredItemPaddingEnd" />

View File

@ -243,4 +243,8 @@
<string name="color_deep_orange">Deep orange</string>
<string name="color_brown">Brown</string>
<string name="color_blue_grey">Blue grey</string>
<plurals name="module_release_assets_download_count">
<item quantity="one">%d download</item>
<item quantity="other">%d downloads</item>
</plurals>
</resources>