From e1c13f3711692899821b50ad61cbce39c84d5206 Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Wed, 10 Feb 2021 15:26:49 +0800 Subject: [PATCH] [app] Open release in browser --- .../manager/ui/activity/RepoItemActivity.java | 71 +++++++++------ app/src/main/res/drawable/ic_attach_file.xml | 30 +++++++ .../main/res/drawable/ic_open_in_browser.xml | 30 +++++++ app/src/main/res/layout/item_repo_release.xml | 88 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 + app/src/main/res/values/styles.xml | 7 ++ 6 files changed, 200 insertions(+), 28 deletions(-) create mode 100644 app/src/main/res/drawable/ic_attach_file.xml create mode 100644 app/src/main/res/drawable/ic_open_in_browser.xml create mode 100644 app/src/main/res/layout/item_repo_release.xml diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/RepoItemActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/RepoItemActivity.java index bbaee51b..0b9835ce 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/RepoItemActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/RepoItemActivity.java @@ -41,7 +41,6 @@ import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager2.widget.ViewPager2; import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import com.google.android.material.snackbar.Snackbar; import com.google.android.material.tabs.TabLayoutMediator; import java.util.ArrayList; @@ -52,6 +51,7 @@ import io.github.lsposed.manager.R; import io.github.lsposed.manager.databinding.ActivityModuleDetailBinding; import io.github.lsposed.manager.databinding.ItemRepoReadmeBinding; import io.github.lsposed.manager.databinding.ItemRepoRecyclerviewBinding; +import io.github.lsposed.manager.databinding.ItemRepoReleaseBinding; import io.github.lsposed.manager.databinding.ItemRepoTitleDescriptionBinding; import io.github.lsposed.manager.repo.RepoLoader; import io.github.lsposed.manager.repo.model.Collaborator; @@ -117,7 +117,7 @@ public class RepoItemActivity extends BaseActivity { } } - private class InformationAdapter extends RecyclerView.Adapter { + private class InformationAdapter extends RecyclerView.Adapter { private final OnlineModule module; private int rowCount = 0; @@ -140,12 +140,12 @@ public class RepoItemActivity extends BaseActivity { @NonNull @Override - public TitleDescriptionHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new TitleDescriptionHolder(ItemRepoTitleDescriptionBinding.inflate(getLayoutInflater(), parent, false)); + public InformationAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new InformationAdapter.ViewHolder(ItemRepoTitleDescriptionBinding.inflate(getLayoutInflater(), parent, false)); } @Override - public void onBindViewHolder(@NonNull TitleDescriptionHolder holder, int position) { + public void onBindViewHolder(@NonNull InformationAdapter.ViewHolder holder, int position) { if (position == homepageRow) { holder.title.setText(R.string.module_information_homepage); holder.description.setText(module.getHomepageUrl()); @@ -183,15 +183,27 @@ public class RepoItemActivity extends BaseActivity { NavUtil.startURL(RepoItemActivity.this, module.getSourceUrl()); } }); + } @Override public int getItemCount() { return rowCount; } + + class ViewHolder extends RecyclerView.ViewHolder { + TextView title; + LinkifyTextView description; + + public ViewHolder(ItemRepoTitleDescriptionBinding binding) { + super(binding.getRoot()); + title = binding.title; + description = binding.description; + } + } } - private class ReleaseAdapter extends RecyclerView.Adapter { + private class ReleaseAdapter extends RecyclerView.Adapter { private final List items; public ReleaseAdapter(List items) { @@ -200,48 +212,51 @@ public class RepoItemActivity extends BaseActivity { @NonNull @Override - public TitleDescriptionHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new TitleDescriptionHolder(ItemRepoTitleDescriptionBinding.inflate(getLayoutInflater(), parent, false)); + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new ViewHolder(ItemRepoReleaseBinding.inflate(getLayoutInflater(), parent, false)); } @Override - public void onBindViewHolder(@NonNull TitleDescriptionHolder holder, int position) { + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { Release release = items.get(position); holder.title.setText(release.getName()); holder.description.setText(release.getDescription()); - holder.itemView.setOnClickListener(v -> { - List assets = release.getReleaseAssets(); - if (assets != null && !assets.isEmpty()) { + holder.openInBrowser.setOnClickListener(v -> NavUtil.startURL(RepoItemActivity.this, release.getUrl())); + List assets = release.getReleaseAssets(); + if (assets != null && !assets.isEmpty()) { + holder.viewAssets.setOnClickListener(v -> { ArrayList names = new ArrayList<>(); - release.getReleaseAssets().forEach(releaseAsset -> names.add(releaseAsset.getName())); + assets.forEach(releaseAsset -> names.add(releaseAsset.getName())); new MaterialAlertDialogBuilder(RepoItemActivity.this) - .setItems(names.toArray(new String[0]), (dialog, which) -> NavUtil.startURL(RepoItemActivity.this, release.getReleaseAssets().get(which).getDownloadUrl())) + .setItems(names.toArray(new String[0]), (dialog, which) -> NavUtil.startURL(RepoItemActivity.this, assets.get(which).getDownloadUrl())) .show(); - } else { - Snackbar.make(binding.snackbar, "no assets", Snackbar.LENGTH_SHORT).show(); - } - }); + }); + } else { + holder.viewAssets.setVisibility(View.GONE); + } } @Override public int getItemCount() { return items.size(); } - } + class ViewHolder extends RecyclerView.ViewHolder { + TextView title; + TextView description; + View openInBrowser; + View viewAssets; - static class TitleDescriptionHolder extends RecyclerView.ViewHolder { - TextView title; - LinkifyTextView description; - - public TitleDescriptionHolder(ItemRepoTitleDescriptionBinding binding) { - super(binding.getRoot()); - title = binding.title; - description = binding.description; + public ViewHolder(ItemRepoReleaseBinding binding) { + super(binding.getRoot()); + title = binding.title; + description = binding.description; + openInBrowser = binding.openInBrowser; + viewAssets = binding.viewAssets; + } } } - private class PagerAdapter extends RecyclerView.Adapter { @NonNull diff --git a/app/src/main/res/drawable/ic_attach_file.xml b/app/src/main/res/drawable/ic_attach_file.xml new file mode 100644 index 00000000..919b7fcd --- /dev/null +++ b/app/src/main/res/drawable/ic_attach_file.xml @@ -0,0 +1,30 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_open_in_browser.xml b/app/src/main/res/drawable/ic_open_in_browser.xml new file mode 100644 index 00000000..3c04742f --- /dev/null +++ b/app/src/main/res/drawable/ic_open_in_browser.xml @@ -0,0 +1,30 @@ + + + + + diff --git a/app/src/main/res/layout/item_repo_release.xml b/app/src/main/res/layout/item_repo_release.xml new file mode 100644 index 00000000..e001a529 --- /dev/null +++ b/app/src/main/res/layout/item_repo_release.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 152ffd09..ae17cbfd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -154,4 +154,6 @@ Homepage Source code Collaborators + Assets + Open in… diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 7a72a926..13fa40ab 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -27,6 +27,13 @@ @color/switchbar_background_light + +