From 49a532e4628d427598fff6bb4964a540ca20d311 Mon Sep 17 00:00:00 2001 From: M M Arif Date: Tue, 19 Apr 2022 15:42:03 +0500 Subject: [PATCH] reload tags after delete and new tag, other minor fixes --- .../activities/CreateReleaseActivity.java | 5 +- .../org/mian/gitnex/adapters/TagsAdapter.java | 95 ++++++++++++++----- .../gitnex/fragments/ReleasesFragment.java | 16 ++-- .../org/mian/gitnex/helpers/AlertDialogs.java | 35 +------ .../gitnex/viewmodels/ReleasesViewModel.java | 14 +-- app/src/main/res/values/strings.xml | 1 + 6 files changed, 94 insertions(+), 72 deletions(-) diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java index 390e7593..2498d6a6 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java @@ -111,7 +111,6 @@ public class CreateReleaseActivity extends BaseActivity { } createNewTag.setOnClickListener(v -> createNewTag()); - } private void createNewTag() { @@ -152,6 +151,10 @@ public class CreateReleaseActivity extends BaseActivity { public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { if (response.code() == 201) { + + Intent result = new Intent(); + result.putExtra("updateReleases", true); + setResult(201, result); Toasty.success(ctx, getString(R.string.tagCreated)); finish(); } diff --git a/app/src/main/java/org/mian/gitnex/adapters/TagsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/TagsAdapter.java index b3b842e8..9664a5b9 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/TagsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/TagsAdapter.java @@ -10,32 +10,38 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.core.text.HtmlCompat; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.bottomsheet.BottomSheetDialog; import org.gitnex.tea4j.v2.models.Tag; import org.mian.gitnex.R; import org.mian.gitnex.activities.RepoDetailActivity; -import org.mian.gitnex.helpers.AlertDialogs; +import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.Markdown; +import org.mian.gitnex.helpers.Toasty; import java.util.List; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; /** - * Author qwerty287 + * @author qwerty287 */ public class TagsAdapter extends RecyclerView.Adapter { private List tags; private final Context context; - private final String repo; - private final String owner; + private static String repo; + private static String owner; private OnLoadMoreListener loadMoreListener; private boolean isLoading = false, isMoreDataAvailable = true; - static class TagsViewHolder extends RecyclerView.ViewHolder { + class TagsViewHolder extends RecyclerView.ViewHolder { + private Tag tagsHolder; private final TextView tagName; private final TextView tagBody; private final LinearLayout downloadFrame; @@ -57,6 +63,24 @@ public class TagsAdapter extends RecyclerView.Adapter { + final Context context = v.getContext(); + + @SuppressLint("InflateParams") + View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_tag_in_list, null); + + TextView delete = view.findViewById(R.id.tagMenuDelete); + + BottomSheetDialog dialog = new BottomSheetDialog(context); + dialog.setContentView(view); + dialog.show(); + + delete.setOnClickListener(v1 -> { + tagDeleteDialog(context, tagsHolder.getName(), owner, repo, getBindingAdapterPosition()); + dialog.dismiss(); + }); + }); } } @@ -78,6 +102,7 @@ public class TagsAdapter extends RecyclerView.Adapter { - final Context context = v.getContext(); - - @SuppressLint("InflateParams") - View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_tag_in_list, null); - - TextView delete = view.findViewById(R.id.tagMenuDelete); - - BottomSheetDialog dialog = new BottomSheetDialog(context); - dialog.setContentView(view); - dialog.show(); - - delete.setOnClickListener(v1 -> { - AlertDialogs.tagDeleteDialog(context, currentItem.getName(), owner, repo); - dialog.dismiss(); - }); - }); - holder.releaseZipDownload.setText( HtmlCompat.fromHtml("" + context.getResources().getString(R.string.zipArchiveDownloadReleasesTab) + " ", HtmlCompat.FROM_HTML_MODE_LEGACY)); holder.releaseZipDownload.setMovementMethod(LinkMovementMethod.getInstance()); @@ -150,6 +157,7 @@ public class TagsAdapter extends RecyclerView.Adapter RetrofitClient + .getApiInterface(context).repoDeleteTag(owner, repo, tagName).enqueue(new Callback<>() { + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + + if(response.isSuccessful()) { + updateAdapter(position); + Toasty.success(context, context.getString(R.string.tagDeleted)); + } + else if(response.code() == 403) { + Toasty.error(context, context.getString(R.string.authorizeError)); + } + else if(response.code() == 409) { + Toasty.error(context, context.getString(R.string.tagDeleteError)); + } + else { + Toasty.error(context, context.getString(R.string.genericError)); + } + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + + Toasty.error(context, context.getString(R.string.genericError)); + } + })) + .setNeutralButton(R.string.cancelButton, null).show(); + } } diff --git a/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java index 3fc12e9e..b95f56f2 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java @@ -30,6 +30,7 @@ import java.util.List; public class ReleasesFragment extends Fragment { + private ReleasesViewModel releasesViewModel; private ReleasesAdapter adapter; private TagsAdapter tagsAdapter; private RepositoryContext repository; @@ -38,7 +39,7 @@ public class ReleasesFragment extends Fragment { private int page = 1; private int pageReleases = 1; - public ReleasesFragment() { + public ReleasesFragment() { } public static ReleasesFragment newInstance(RepositoryContext repository) { @@ -59,6 +60,7 @@ public class ReleasesFragment extends Fragment { Bundle savedInstanceState) { fragmentReleasesBinding = FragmentReleasesBinding.inflate(inflater, container, false); + releasesViewModel = new ViewModelProvider(this).get(ReleasesViewModel.class); fragmentReleasesBinding.recyclerView.setHasFixedSize(true); fragmentReleasesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); @@ -70,9 +72,9 @@ public class ReleasesFragment extends Fragment { fragmentReleasesBinding.pullToRefresh.setRefreshing(false); if(repository.isReleasesViewTypeIsTag()) { - ReleasesViewModel.loadTagsList(repository.getOwner(), repository.getName(), getContext()); + releasesViewModel.loadTagsList(repository.getOwner(), repository.getName(), getContext()); } else { - ReleasesViewModel.loadReleasesList(repository.getOwner(), repository.getName(), getContext()); + releasesViewModel.loadReleasesList(repository.getOwner(), repository.getName(), getContext()); } fragmentReleasesBinding.progressBar.setVisibility(View.VISIBLE); @@ -86,9 +88,9 @@ public class ReleasesFragment extends Fragment { page = 1; pageReleases = 1; if(repository.isReleasesViewTypeIsTag()) { - ReleasesViewModel.loadTagsList(repository.getOwner(), repository.getName(), getContext()); + releasesViewModel.loadTagsList(repository.getOwner(), repository.getName(), getContext()); } else { - ReleasesViewModel.loadReleasesList(repository.getOwner(), repository.getName(), getContext()); + releasesViewModel.loadReleasesList(repository.getOwner(), repository.getName(), getContext()); } fragmentReleasesBinding.progressBar.setVisibility(View.VISIBLE); }); @@ -108,7 +110,7 @@ public class ReleasesFragment extends Fragment { @Override public void onLoadMore() { pageReleases += 1; - ReleasesViewModel.loadMoreReleases(owner, repo, pageReleases, getContext(), adapter); + releasesViewModel.loadMoreReleases(owner, repo, pageReleases, getContext(), adapter); fragmentReleasesBinding.progressBar.setVisibility(View.VISIBLE); } @@ -145,7 +147,7 @@ public class ReleasesFragment extends Fragment { @Override public void onLoadMore() { page += 1; - ReleasesViewModel.loadMoreTags(owner, repo , page, getContext(), tagsAdapter); + releasesViewModel.loadMoreTags(owner, repo , page, getContext(), tagsAdapter); fragmentReleasesBinding.progressBar.setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/org/mian/gitnex/helpers/AlertDialogs.java b/app/src/main/java/org/mian/gitnex/helpers/AlertDialogs.java index 833acc65..1823b63a 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/AlertDialogs.java +++ b/app/src/main/java/org/mian/gitnex/helpers/AlertDialogs.java @@ -6,21 +6,16 @@ import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.widget.Button; -import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import org.mian.gitnex.R; import org.mian.gitnex.actions.CollaboratorActions; import org.mian.gitnex.actions.PullRequestActions; import org.mian.gitnex.actions.TeamActions; import org.mian.gitnex.activities.CreateLabelActivity; -import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.contexts.RepositoryContext; -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; /** - * Author M M Arif + * @author M M Arif */ public class AlertDialogs { @@ -80,34 +75,6 @@ public class AlertDialogs { } - public static void tagDeleteDialog(final Context context, final String tagName, final String owner, final String repo) { - new AlertDialog.Builder(context) - .setTitle(String.format(context.getString(R.string.deleteTagTitle), tagName)) - .setMessage(R.string.deleteTagConfirmation) - .setIcon(R.drawable.ic_delete) - .setPositiveButton(R.string.menuDeleteText, (dialog, whichButton) -> RetrofitClient.getApiInterface(context).repoDeleteTag(owner, repo, tagName).enqueue(new Callback() { - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) { - if(response.isSuccessful()) { - Toasty.success(context, context.getString(R.string.tagDeleted)); - } - else if(response.code() == 403) { - Toasty.error(context, context.getString(R.string.authorizeError)); - } - else { - Toasty.error(context, context.getString(R.string.genericError)); - } - } - - @Override - public void onFailure(@NonNull Call call, @NonNull Throwable t) { - Toasty.error(context, context.getString(R.string.genericError)); - } - })) - .setNeutralButton(R.string.cancelButton, null).show(); - } - public static void collaboratorRemoveDialog(final Context context, final String userNameMain, RepositoryContext repository) { new AlertDialog.Builder(context) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/ReleasesViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/ReleasesViewModel.java index fbcc3e40..0433625f 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/ReleasesViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/ReleasesViewModel.java @@ -25,8 +25,8 @@ import retrofit2.Response; public class ReleasesViewModel extends ViewModel { - private static MutableLiveData> releasesList; - private static int resultLimit = Constants.resultLimitOldGiteaInstances; + private MutableLiveData> releasesList; + private int resultLimit = Constants.resultLimitOldGiteaInstances; public LiveData> getReleasesList(String owner, String repo, Context ctx) { @@ -42,7 +42,7 @@ public class ReleasesViewModel extends ViewModel { return releasesList; } - public static void loadReleasesList(String owner, String repo, Context ctx) { + public void loadReleasesList(String owner, String repo, Context ctx) { Call> call = RetrofitClient .getApiInterface(ctx) @@ -69,7 +69,7 @@ public class ReleasesViewModel extends ViewModel { }); } - public static void loadMoreReleases(String owner, String repo, int page, Context ctx, ReleasesAdapter adapter) { + public void loadMoreReleases(String owner, String repo, int page, Context ctx, ReleasesAdapter adapter) { Call> call = RetrofitClient .getApiInterface(ctx) @@ -106,7 +106,7 @@ public class ReleasesViewModel extends ViewModel { }); } - private static MutableLiveData> tagsList; + private MutableLiveData> tagsList; public LiveData> getTagsList(String owner, String repo, Context ctx) { @@ -122,7 +122,7 @@ public class ReleasesViewModel extends ViewModel { return tagsList; } - public static void loadTagsList(String owner, String repo, Context ctx) { + public void loadTagsList(String owner, String repo, Context ctx) { Call> call = RetrofitClient .getApiInterface(ctx) @@ -149,7 +149,7 @@ public class ReleasesViewModel extends ViewModel { }); } - public static void loadMoreTags(String owner, String repo, int page, Context ctx, TagsAdapter adapter) { + public void loadMoreTags(String owner, String repo, int page, Context ctx, TagsAdapter adapter) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 484fd353..2f44bc9e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -749,6 +749,7 @@ Do you really want to delete this tag? Delete tag %s Tag deleted + A tag attached to a release cannot be deleted directly Use Custom Tabs No application found to open this link. SSH URLs and URLs with another prefix the http:// or https:// are not supported by most browser Log in again