Repo shows assets size and download time (#2202)
This commit is contained in:
parent
abe143e9cc
commit
466e5537a9
|
|
@ -36,6 +36,12 @@ public class ReleaseAsset {
|
||||||
@SerializedName("downloadUrl")
|
@SerializedName("downloadUrl")
|
||||||
@Expose
|
@Expose
|
||||||
private String downloadUrl;
|
private String downloadUrl;
|
||||||
|
@SerializedName("downloadCount")
|
||||||
|
@Expose
|
||||||
|
private int downloadCount = 0;
|
||||||
|
@SerializedName("size")
|
||||||
|
@Expose
|
||||||
|
private int size = 0;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public String getName() {
|
public String getName() {
|
||||||
|
|
@ -63,4 +69,20 @@ public class ReleaseAsset {
|
||||||
public void setDownloadUrl(String downloadUrl) {
|
public void setDownloadUrl(String downloadUrl) {
|
||||||
this.downloadUrl = 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
package org.lsposed.manager.ui.fragment;
|
package org.lsposed.manager.ui.fragment;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.app.Activity;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
|
@ -27,7 +28,10 @@ import android.os.Bundle;
|
||||||
import android.text.Spannable;
|
import android.text.Spannable;
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.text.format.Formatter;
|
||||||
import android.text.style.ClickableSpan;
|
import android.text.style.ClickableSpan;
|
||||||
|
import android.text.style.ForegroundColorSpan;
|
||||||
|
import android.text.style.RelativeSizeSpan;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
|
@ -38,6 +42,7 @@ import android.webkit.WebResourceResponse;
|
||||||
import android.webkit.WebSettings;
|
import android.webkit.WebSettings;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
import android.webkit.WebViewClient;
|
import android.webkit.WebViewClient;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
import android.widget.TextView;
|
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)
|
return new BlurBehindDialogBuilder(requireActivity(), R.style.ThemeOverlay_MaterialAlertDialog_Centered_FullWidthButtons)
|
||||||
.setTitle(R.string.module_release_view_assets)
|
.setTitle(R.string.module_release_view_assets)
|
||||||
.setPositiveButton(android.R.string.cancel, null)
|
.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)))
|
(dialog, which) -> NavUtil.startURL(requireActivity(), args.getStringArrayList("urls").get(which)))
|
||||||
.create();
|
.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 f = new DownloadDialog();
|
||||||
var bundle = new Bundle();
|
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.setArguments(bundle);
|
||||||
f.show(fm, "download");
|
f.show(fm, "download");
|
||||||
}
|
}
|
||||||
|
|
@ -429,9 +448,7 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.RepoLis
|
||||||
List<ReleaseAsset> assets = release.getReleaseAssets();
|
List<ReleaseAsset> assets = release.getReleaseAssets();
|
||||||
if (assets != null && !assets.isEmpty()) {
|
if (assets != null && !assets.isEmpty()) {
|
||||||
holder.viewAssets.setOnClickListener(v -> {
|
holder.viewAssets.setOnClickListener(v -> {
|
||||||
ArrayList<String> names = new ArrayList<>();
|
DownloadDialog.create(requireActivity(), getParentFragmentManager(), assets);
|
||||||
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)));
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
holder.viewAssets.setVisibility(View.GONE);
|
holder.viewAssets.setVisibility(View.GONE);
|
||||||
|
|
|
||||||
|
|
@ -16,22 +16,12 @@
|
||||||
~
|
~
|
||||||
~ Copyright (C) 2021 LSPosed Contributors
|
~ Copyright (C) 2021 LSPosed Contributors
|
||||||
-->
|
-->
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<com.google.android.material.textview.MaterialTextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:orientation="vertical"
|
android:id="@+id/item"
|
||||||
|
style="@style/TextAppearance.MaterialComponents.Body2"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content"
|
||||||
|
android:minHeight="?attr/listPreferredItemHeight"
|
||||||
<com.google.android.material.textview.MaterialTextView
|
android:gravity="center_vertical"
|
||||||
style="@style/DeviceInfoDialogLabel"
|
android:paddingStart="?attr/listPreferredItemPaddingStart"
|
||||||
android:id="@+id/title"
|
android:paddingEnd="?attr/listPreferredItemPaddingEnd" />
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content" />
|
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
|
||||||
style="@style/DeviceInfoDialogValue"
|
|
||||||
android:id="@+id/value"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:paddingBottom="0dp"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
|
||||||
|
|
@ -243,4 +243,8 @@
|
||||||
<string name="color_deep_orange">Deep orange</string>
|
<string name="color_deep_orange">Deep orange</string>
|
||||||
<string name="color_brown">Brown</string>
|
<string name="color_brown">Brown</string>
|
||||||
<string name="color_blue_grey">Blue grey</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>
|
</resources>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue