mirror of
https://github.com/gitnex-org/gitnex.git
synced 2026-07-22 05:04:55 -05:00
reload tags after delete and new tag, other minor fixes
This commit is contained in:
@@ -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<Tag> call, @NonNull retrofit2.Response<Tag> response) {
|
||||
|
||||
if (response.code() == 201) {
|
||||
|
||||
Intent result = new Intent();
|
||||
result.putExtra("updateReleases", true);
|
||||
setResult(201, result);
|
||||
Toasty.success(ctx, getString(R.string.tagCreated));
|
||||
finish();
|
||||
}
|
||||
|
||||
@@ -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<TagsAdapter.TagsViewHolder> {
|
||||
|
||||
private List<Tag> 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<TagsAdapter.TagsViewHolder
|
||||
releaseTarDownload = itemView.findViewById(R.id.releaseTarDownload);
|
||||
downloadDropdownIcon = itemView.findViewById(R.id.downloadDropdownIcon);
|
||||
options = itemView.findViewById(R.id.tagsOptionsMenu);
|
||||
|
||||
options.setOnClickListener(v -> {
|
||||
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<TagsAdapter.TagsViewHolder
|
||||
public void onBindViewHolder(@NonNull TagsViewHolder holder, int position) {
|
||||
|
||||
Tag currentItem = tags.get(position);
|
||||
holder.tagsHolder = currentItem;
|
||||
|
||||
holder.tagName.setText(currentItem.getName());
|
||||
|
||||
@@ -106,24 +131,6 @@ public class TagsAdapter extends RecyclerView.Adapter<TagsAdapter.TagsViewHolder
|
||||
holder.options.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
holder.options.setOnClickListener(v -> {
|
||||
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("<a href='" + currentItem.getZipballUrl() + "'>" + context.getResources().getString(R.string.zipArchiveDownloadReleasesTab) + "</a> ", HtmlCompat.FROM_HTML_MODE_LEGACY));
|
||||
holder.releaseZipDownload.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
@@ -150,6 +157,7 @@ public class TagsAdapter extends RecyclerView.Adapter<TagsAdapter.TagsViewHolder
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
public void notifyDataChanged() {
|
||||
notifyDataSetChanged();
|
||||
isLoading = false;
|
||||
@@ -170,4 +178,45 @@ public class TagsAdapter extends RecyclerView.Adapter<TagsAdapter.TagsViewHolder
|
||||
notifyDataChanged();
|
||||
}
|
||||
|
||||
private void updateAdapter(int position) {
|
||||
tags.remove(position);
|
||||
notifyItemRemoved(position);
|
||||
notifyItemRangeChanged(position, tags.size());
|
||||
}
|
||||
|
||||
public void tagDeleteDialog(final Context context, final String tagName, final String owner, final String repo, int position) {
|
||||
|
||||
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<Void> call, @NonNull Response<Void> 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<Void> call, @NonNull Throwable t) {
|
||||
|
||||
Toasty.error(context, context.getString(R.string.genericError));
|
||||
}
|
||||
}))
|
||||
.setNeutralButton(R.string.cancelButton, null).show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Void>() {
|
||||
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<Void> call, @NonNull Response<Void> 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<Void> 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)
|
||||
|
||||
@@ -25,8 +25,8 @@ import retrofit2.Response;
|
||||
|
||||
public class ReleasesViewModel extends ViewModel {
|
||||
|
||||
private static MutableLiveData<List<Release>> releasesList;
|
||||
private static int resultLimit = Constants.resultLimitOldGiteaInstances;
|
||||
private MutableLiveData<List<Release>> releasesList;
|
||||
private int resultLimit = Constants.resultLimitOldGiteaInstances;
|
||||
|
||||
public LiveData<List<Release>> 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<List<Release>> 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<List<Release>> call = RetrofitClient
|
||||
.getApiInterface(ctx)
|
||||
@@ -106,7 +106,7 @@ public class ReleasesViewModel extends ViewModel {
|
||||
});
|
||||
}
|
||||
|
||||
private static MutableLiveData<List<Tag>> tagsList;
|
||||
private MutableLiveData<List<Tag>> tagsList;
|
||||
|
||||
public LiveData<List<Tag>> 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<List<Tag>> 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<List<Tag>> call = RetrofitClient
|
||||
.getApiInterface(ctx)
|
||||
|
||||
@@ -749,6 +749,7 @@
|
||||
<string name="deleteTagConfirmation">Do you really want to delete this tag?</string>
|
||||
<string name="deleteTagTitle">Delete tag %s</string>
|
||||
<string name="tagDeleted">Tag deleted</string>
|
||||
<string name="tagDeleteError">A tag attached to a release cannot be deleted directly</string>
|
||||
<string name="useCustomTabs">Use Custom Tabs</string>
|
||||
<string name="browserOpenFailed">No application found to open this link. SSH URLs and URLs with another prefix the http:// or https:// are not supported by most browser</string>
|
||||
<string name="logInAgain">Log in again</string>
|
||||
|
||||
Reference in New Issue
Block a user