From 93ad621790553c9a66057d751975d88dc4431039 Mon Sep 17 00:00:00 2001 From: M M Arif Date: Sat, 21 May 2022 20:24:15 +0500 Subject: [PATCH] Add bottom sheet and delete wiki page --- .../mian/gitnex/adapters/ReleasesAdapter.java | 3 +- .../mian/gitnex/adapters/WikiListAdapter.java | 86 ++++++++++++++++++- .../mian/gitnex/fragments/WikiFragment.java | 2 +- .../res/layout/bottom_sheet_wiki_in_list.xml | 80 +++++++++++++++++ app/src/main/res/values/strings.xml | 2 + 5 files changed, 169 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/layout/bottom_sheet_wiki_in_list.xml diff --git a/app/src/main/java/org/mian/gitnex/adapters/ReleasesAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/ReleasesAdapter.java index b514dcd8..e44d5271 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/ReleasesAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/ReleasesAdapter.java @@ -105,8 +105,7 @@ public class ReleasesAdapter extends RecyclerView.Adapter { final Context context = v.getContext(); - @SuppressLint("InflateParams") - View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_release_in_list, null); + View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_release_in_list, itemView.findViewById(android.R.id.content), false); TextView deleteRelease = view.findViewById(R.id.deleteRelease); diff --git a/app/src/main/java/org/mian/gitnex/adapters/WikiListAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/WikiListAdapter.java index 1963214c..cc382c4f 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/WikiListAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/WikiListAdapter.java @@ -10,18 +10,26 @@ import android.view.ViewGroup; import android.widget.ImageView; 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.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.util.ColorGenerator; +import com.google.android.material.bottomsheet.BottomSheetDialog; import org.gitnex.tea4j.v2.models.WikiPageMetaData; import org.mian.gitnex.R; import org.mian.gitnex.activities.RepoDetailActivity; import org.mian.gitnex.activities.WikiActivity; +import org.mian.gitnex.clients.RetrofitClient; +import org.mian.gitnex.databinding.FragmentWikiBinding; import org.mian.gitnex.helpers.ClickListener; import org.mian.gitnex.helpers.TimeHelper; +import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.contexts.RepositoryContext; import java.util.List; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; /** * @author M M Arif @@ -33,10 +41,16 @@ public class WikiListAdapter extends RecyclerView.Adapter wikiList; private OnLoadMoreListener loadMoreListener; private boolean isLoading = false, isMoreDataAvailable = true; + private final FragmentWikiBinding fragmentWikiBinding; + private final String repoOwner; + private final String repoName; - public WikiListAdapter(List wikiListMain, Context ctx) { + public WikiListAdapter(List wikiListMain, Context ctx, String repoOwner, String repoName, FragmentWikiBinding fragmentWikiBinding) { this.ctx = ctx; this.wikiList = wikiListMain; + this.repoOwner = repoOwner; + this.repoName = repoName; + this.fragmentWikiBinding = fragmentWikiBinding; } @NonNull @@ -73,6 +87,7 @@ public class WikiListAdapter extends RecyclerView.Adapter { + Intent intent = new Intent(ctx, WikiActivity.class); intent.putExtra("pageName", wikiPageMeta.getTitle()); intent.putExtra(RepositoryContext.INTENT_EXTRA, ((RepoDetailActivity) itemView.getContext()).repository); ctx.startActivity(intent); }); + + wikiMenu.setOnClickListener(v -> { + + Context ctx = v.getContext(); + + View view = LayoutInflater.from(ctx).inflate(R.layout.bottom_sheet_wiki_in_list, itemView.findViewById(android.R.id.content), false); + + TextView editWiki = view.findViewById(R.id.edit_wiki); + TextView deleteWiki = view.findViewById(R.id.delete_wiki); + + BottomSheetDialog dialog = new BottomSheetDialog(ctx); + dialog.setContentView(view); + dialog.show(); + + editWiki.setOnClickListener(v12 -> { + + dialog.dismiss(); + }); + + deleteWiki.setOnClickListener(v12 -> { + + deleteWiki(repoOwner, repoName, wikiPageMeta.getTitle(), getAbsoluteAdapterPosition(), ctx); + dialog.dismiss(); + }); + }); } @SuppressLint("SetTextI18n") @@ -110,6 +152,12 @@ public class WikiListAdapter extends RecyclerView.Adapter RetrofitClient + .getApiInterface(context).repoDeleteWikiPage(owner, repo, pageName).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.wikiPageDeleted)); + if(getItemCount() == 0) { + fragmentWikiBinding.noData.setVisibility(View.VISIBLE); + } + } + 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(); + } } diff --git a/app/src/main/java/org/mian/gitnex/fragments/WikiFragment.java b/app/src/main/java/org/mian/gitnex/fragments/WikiFragment.java index 682eb9c8..079b1745 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/WikiFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/WikiFragment.java @@ -78,7 +78,7 @@ public class WikiFragment extends Fragment { wikiViewModel.getWiki(owner, repo, page, resultLimit, getContext(), fragmentWikiBinding).observe(getViewLifecycleOwner(), wikiListMain -> { - adapter = new WikiListAdapter(wikiListMain, getContext()); + adapter = new WikiListAdapter(wikiListMain, getContext(), owner, repo, fragmentWikiBinding); adapter.setLoadMoreListener(new WikiListAdapter.OnLoadMoreListener() { @Override diff --git a/app/src/main/res/layout/bottom_sheet_wiki_in_list.xml b/app/src/main/res/layout/bottom_sheet_wiki_in_list.xml new file mode 100644 index 00000000..b7c294da --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet_wiki_in_list.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b5bbeb76..4e55eb76 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -770,4 +770,6 @@ Wiki %1$s updated %2$s]]> + Do you really want to delete %1$s? + Wiki page deleted successfully