diff --git a/app/src/main/java/org/mian/gitnex/adapters/ExploreRepositoriesAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/ExploreRepositoriesAdapter.java index 5720a3dc..472cef03 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/ExploreRepositoriesAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/ExploreRepositoriesAdapter.java @@ -1,19 +1,19 @@ package org.mian.gitnex.adapters; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.graphics.Typeface; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.appcompat.widget.PopupMenu; 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.mian.gitnex.R; import org.mian.gitnex.activities.OpenRepoInBrowserActivity; import org.mian.gitnex.activities.RepoDetailActivity; @@ -23,9 +23,7 @@ import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.models.UserRepositories; import org.mian.gitnex.util.TinyDB; -import java.lang.reflect.Field; import java.util.List; -import java.util.Objects; /** * Author M M Arif @@ -66,85 +64,65 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter { - Context context = v.getContext(); - TextView repoFullName = v.findViewById(R.id.repoFullName); + Context context = v.getContext(); + TextView repoFullName = v.findViewById(R.id.repoFullName); - Intent intent = new Intent(context, RepoDetailActivity.class); - intent.putExtra("repoFullName", repoFullName.getText().toString()); + Intent intent = new Intent(context, RepoDetailActivity.class); + intent.putExtra("repoFullName", repoFullName.getText().toString()); - TinyDB tinyDb = new TinyDB(context); - tinyDb.putString("repoFullName", repoFullName.getText().toString()); - tinyDb.putBoolean("resumeIssues", true); - context.startActivity(intent); + TinyDB tinyDb = new TinyDB(context); + tinyDb.putString("repoFullName", repoFullName.getText().toString()); + tinyDb.putBoolean("resumeIssues", true); + context.startActivity(intent); - } }); - reposDropdownMenu.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + reposDropdownMenu.setOnClickListener(v -> { - final Context context = v.getContext(); - //Context context_ = new ContextThemeWrapper(context, R.style.popupMenuStyle); + final Context context = v.getContext(); - PopupMenu popupMenu = new PopupMenu(context, v); - popupMenu.inflate(R.menu.repo_dotted_list_menu); + @SuppressLint("InflateParams") + View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_repository_in_list, null); - Object menuHelper; - Class[] argTypes; - try { + TextView repoOpenInBrowser = view.findViewById(R.id.repoOpenInBrowser); + TextView repoStargazers = view.findViewById(R.id.repoStargazers); + TextView repoWatchers = view.findViewById(R.id.repoWatchers); + TextView bottomSheetHeader = view.findViewById(R.id.bottomSheetHeader); - Field fMenuHelper = PopupMenu.class.getDeclaredField("mPopup"); - fMenuHelper.setAccessible(true); - menuHelper = fMenuHelper.get(popupMenu); - argTypes = new Class[] { boolean.class }; - Objects.requireNonNull(menuHelper).getClass().getDeclaredMethod("setForceShowIcon", - argTypes).invoke(menuHelper, true); + bottomSheetHeader.setText(fullName.getText()); + BottomSheetDialog dialog = new BottomSheetDialog(context); + dialog.setContentView(view); + dialog.show(); - } catch (Exception e) { + repoOpenInBrowser.setOnClickListener(openInBrowser -> { - popupMenu.show(); - return; + Intent intentOpenInBrowser = new Intent(context, OpenRepoInBrowserActivity.class); + intentOpenInBrowser.putExtra("repoFullNameBrowser", fullName.getText()); + context.startActivity(intentOpenInBrowser); + dialog.dismiss(); - } + }); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.repoStargazers: + repoStargazers.setOnClickListener(stargazers -> { - Intent intent = new Intent(context, RepoStargazersActivity.class); - intent.putExtra("repoFullNameForStars", fullName.getText()); - context.startActivity(intent); - break; + Intent intent = new Intent(context, RepoStargazersActivity.class); + intent.putExtra("repoFullNameForStars", fullName.getText()); + context.startActivity(intent); + dialog.dismiss(); - case R.id.repoWatchers: + }); - Intent intentW = new Intent(context, RepoWatchersActivity.class); - intentW.putExtra("repoFullNameForWatchers", fullName.getText()); - context.startActivity(intentW); - break; + repoWatchers.setOnClickListener(watchers -> { - case R.id.repoOpenInBrowser: + Intent intentW = new Intent(context, RepoWatchersActivity.class); + intentW.putExtra("repoFullNameForWatchers", fullName.getText()); + context.startActivity(intentW); + dialog.dismiss(); - Intent intentOpenInBrowser = new Intent(context, OpenRepoInBrowserActivity.class); - intentOpenInBrowser.putExtra("repoFullNameBrowser", fullName.getText()); - context.startActivity(intentOpenInBrowser); - break; + }); - } - return false; - } - }); - - popupMenu.show(); - - } }); } diff --git a/app/src/main/java/org/mian/gitnex/adapters/IssueCommentsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/IssueCommentsAdapter.java index 173b7eb7..05d81d44 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/IssueCommentsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/IssueCommentsAdapter.java @@ -7,11 +7,11 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.text.Spanned; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import com.google.android.material.bottomsheet.BottomSheetDialog; import com.vdurmont.emoji.EmojiParser; import org.mian.gitnex.R; import org.mian.gitnex.activities.ReplyToIssueActivity; @@ -23,7 +23,6 @@ import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.util.TinyDB; import org.mian.gitnex.helpers.ClickListener; import org.ocpsoft.prettytime.PrettyTime; -import java.lang.reflect.Field; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Collection; @@ -33,7 +32,6 @@ import java.util.Locale; import java.util.Objects; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.widget.PopupMenu; import androidx.recyclerview.widget.RecyclerView; import io.noties.markwon.AbstractMarkwonPlugin; import io.noties.markwon.Markwon; @@ -84,59 +82,37 @@ public class IssueCommentsAdapter extends RecyclerView.Adapter { - final Context context = v.getContext(); - //Context context_ = new ContextThemeWrapper(context, R.style.popupMenuStyle); + final Context context = v.getContext(); - PopupMenu popupMenu = new PopupMenu(context, v); - popupMenu.inflate(R.menu.issue_comment_menu); + @SuppressLint("InflateParams") + View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_issue_comments, null); - Object menuHelper; - Class[] argTypes; - try { + TextView commentMenuEdit = view.findViewById(R.id.commentMenuEdit); + //TextView commentMenuDelete = view.findViewById(R.id.commentMenuDelete); - Field fMenuHelper = PopupMenu.class.getDeclaredField("mPopup"); - fMenuHelper.setAccessible(true); - menuHelper = fMenuHelper.get(popupMenu); - argTypes = new Class[] { boolean.class }; - menuHelper.getClass().getDeclaredMethod("setForceShowIcon", - argTypes).invoke(menuHelper, true); + BottomSheetDialog dialog = new BottomSheetDialog(context); + dialog.setContentView(view); + dialog.show(); - } catch (Exception e) { + commentMenuEdit.setOnClickListener(ediComment -> { - popupMenu.show(); - return; + Intent intent = new Intent(context, ReplyToIssueActivity.class); + intent.putExtra("commentId", commendId.getText()); + intent.putExtra("commentAction", "edit"); + intent.putExtra("commentBody", commendBodyRaw.getText()); + context.startActivity(intent); + dialog.dismiss(); - } + }); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.commentMenuEdit: + /*commentMenuDelete.setOnClickListener(deleteComment -> { - Intent intent = new Intent(context, ReplyToIssueActivity.class); - intent.putExtra("commentId", commendId.getText()); - intent.putExtra("commentAction", "edit"); - intent.putExtra("commentBody", commendBodyRaw.getText()); - context.startActivity(intent); - break; + dialog.dismiss(); - case R.id.commentMenuDelete: + });*/ - break; - - } - return false; - } - }); - - popupMenu.show(); - - } }); } @@ -177,11 +153,7 @@ public class IssueCommentsAdapter extends RecyclerView.Adapter issueAssigneeAvatar.setOnClickListener(new ClickListener(context.getResources().getString(R.string.issueCreator) + issuesModel.getUser().getLogin(), context)); } - if (issuesModel.getUser().getAvatar_url() != null) { - PicassoService.getInstance(context).get().load(issuesModel.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(issueAssigneeAvatar); - } else { - PicassoService.getInstance(context).get().load(issuesModel.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(issueAssigneeAvatar); - } + PicassoService.getInstance(context).get().load(issuesModel.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(issueAssigneeAvatar); String issueNumber_ = "" + context.getResources().getString(R.string.hash) + issuesModel.getNumber() + ""; issueTitle.setText(Html.fromHtml(issueNumber_ + " " + issuesModel.getTitle())); diff --git a/app/src/main/java/org/mian/gitnex/adapters/LabelsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/LabelsAdapter.java index 6f7ebd23..f2f12382 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/LabelsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/LabelsAdapter.java @@ -1,27 +1,26 @@ package org.mian.gitnex.adapters; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.amulyakhare.textdrawable.TextDrawable; +import com.google.android.material.bottomsheet.BottomSheetDialog; import org.mian.gitnex.R; import org.mian.gitnex.activities.CreateLabelActivity; import org.mian.gitnex.helpers.AlertDialogs; import org.mian.gitnex.helpers.ColorInverter; import org.mian.gitnex.helpers.LabelWidthCalculator; import org.mian.gitnex.models.Labels; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import java.util.List; import androidx.annotation.NonNull; -import androidx.appcompat.widget.PopupMenu; import androidx.recyclerview.widget.RecyclerView; /** @@ -50,65 +49,45 @@ public class LabelsAdapter extends RecyclerView.Adapter { - final Context context = v.getContext(); - //Context context_ = new ContextThemeWrapper(context, R.style.popupMenuStyle); + final Context context = v.getContext(); - PopupMenu popupMenu = new PopupMenu(context, v); - popupMenu.inflate(R.menu.labels_menu); + @SuppressLint("InflateParams") + View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_labels_in_list, null); - Object menuHelper; - Class[] argTypes; - try { + TextView labelMenuEdit = view.findViewById(R.id.labelMenuEdit); + TextView labelMenuDelete = view.findViewById(R.id.labelMenuDelete); + TextView bottomSheetHeader = view.findViewById(R.id.bottomSheetHeader); - Field fMenuHelper = PopupMenu.class.getDeclaredField("mPopup"); - fMenuHelper.setAccessible(true); - menuHelper = fMenuHelper.get(popupMenu); - argTypes = new Class[] { boolean.class }; - menuHelper.getClass().getDeclaredMethod("setForceShowIcon", - argTypes).invoke(menuHelper, true); + bottomSheetHeader.setText(labelTitle.getText()); + BottomSheetDialog dialog = new BottomSheetDialog(context); + dialog.setContentView(view); + dialog.show(); - } catch (Exception e) { + labelMenuEdit.setOnClickListener(editLabel -> { - popupMenu.show(); - return; + Intent intent = new Intent(context, CreateLabelActivity.class); + intent.putExtra("labelId", labelId.getText()); + intent.putExtra("labelTitle", labelTitle.getText()); + intent.putExtra("labelColor", labelColor.getText()); + intent.putExtra("labelAction", "edit"); + context.startActivity(intent); + dialog.dismiss(); - } + }); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.labelMenuEdit: + labelMenuDelete.setOnClickListener(deleteLabel -> { - Intent intent = new Intent(context, CreateLabelActivity.class); - intent.putExtra("labelId", labelId.getText()); - intent.putExtra("labelTitle", labelTitle.getText()); - intent.putExtra("labelColor", labelColor.getText()); - intent.putExtra("labelAction", "edit"); - context.startActivity(intent); - break; + AlertDialogs.labelDeleteDialog(context, labelTitle.getText().toString(), labelId.getText().toString(), + context.getResources().getString(R.string.labelDeleteTitle), + context.getResources().getString(R.string.labelDeleteMessage), + context.getResources().getString(R.string.labelDeletePositiveButton), + context.getResources().getString(R.string.labelDeleteNegativeButton)); + dialog.dismiss(); - case R.id.labelMenuDelete: + }); - AlertDialogs.labelDeleteDialog(context, labelTitle.getText().toString(), labelId.getText().toString(), - context.getResources().getString(R.string.labelDeleteTitle), - context.getResources().getString(R.string.labelDeleteMessage), - context.getResources().getString(R.string.labelDeletePositiveButton), - context.getResources().getString(R.string.labelDeleteNegativeButton)); - break; - - } - return false; - } - }); - - popupMenu.show(); - - } }); } diff --git a/app/src/main/java/org/mian/gitnex/adapters/MyReposListAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/MyReposListAdapter.java index 075b47ff..237fa9c4 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/MyReposListAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/MyReposListAdapter.java @@ -1,10 +1,10 @@ package org.mian.gitnex.adapters; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.graphics.Typeface; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Filter; @@ -13,6 +13,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.util.ColorGenerator; +import com.google.android.material.bottomsheet.BottomSheetDialog; import org.mian.gitnex.R; import org.mian.gitnex.activities.OpenRepoInBrowserActivity; import org.mian.gitnex.activities.RepoDetailActivity; @@ -22,11 +23,9 @@ import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.models.UserRepositories; import org.mian.gitnex.util.TinyDB; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import androidx.annotation.NonNull; -import androidx.appcompat.widget.PopupMenu; import androidx.recyclerview.widget.RecyclerView; /** @@ -64,85 +63,65 @@ public class MyReposListAdapter extends RecyclerView.Adapter { - Context context = v.getContext(); + Context context = v.getContext(); - Intent intent = new Intent(context, RepoDetailActivity.class); - intent.putExtra("repoFullName", fullNameMy.getText().toString()); + Intent intent = new Intent(context, RepoDetailActivity.class); + intent.putExtra("repoFullName", fullNameMy.getText().toString()); - TinyDB tinyDb = new TinyDB(context); - tinyDb.putString("repoFullName", fullNameMy.getText().toString()); - tinyDb.putString("repoType", repoType.getText().toString()); - tinyDb.putBoolean("resumeIssues", true); - context.startActivity(intent); + TinyDB tinyDb = new TinyDB(context); + tinyDb.putString("repoFullName", fullNameMy.getText().toString()); + tinyDb.putString("repoType", repoType.getText().toString()); + tinyDb.putBoolean("resumeIssues", true); + context.startActivity(intent); - } }); - reposDropdownMenu.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + reposDropdownMenu.setOnClickListener(v -> { - final Context context = v.getContext(); - //Context context_ = new ContextThemeWrapper(context, R.style.popupMenuStyle); + final Context context = v.getContext(); - PopupMenu popupMenu = new PopupMenu(context, v); - popupMenu.inflate(R.menu.repo_dotted_list_menu); + @SuppressLint("InflateParams") + View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_repository_in_list, null); - Object menuHelper; - Class[] argTypes; - try { + TextView repoOpenInBrowser = view.findViewById(R.id.repoOpenInBrowser); + TextView repoStargazers = view.findViewById(R.id.repoStargazers); + TextView repoWatchers = view.findViewById(R.id.repoWatchers); + TextView bottomSheetHeader = view.findViewById(R.id.bottomSheetHeader); - Field fMenuHelper = PopupMenu.class.getDeclaredField("mPopup"); - fMenuHelper.setAccessible(true); - menuHelper = fMenuHelper.get(popupMenu); - argTypes = new Class[] { boolean.class }; - menuHelper.getClass().getDeclaredMethod("setForceShowIcon", - argTypes).invoke(menuHelper, true); + bottomSheetHeader.setText(fullNameMy.getText()); + BottomSheetDialog dialog = new BottomSheetDialog(context); + dialog.setContentView(view); + dialog.show(); - } catch (Exception e) { + repoOpenInBrowser.setOnClickListener(openInBrowser -> { - popupMenu.show(); - return; + Intent intentOpenInBrowser = new Intent(context, OpenRepoInBrowserActivity.class); + intentOpenInBrowser.putExtra("repoFullNameBrowser", fullNameMy.getText()); + context.startActivity(intentOpenInBrowser); + dialog.dismiss(); - } + }); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.repoStargazers: + repoStargazers.setOnClickListener(stargazers -> { - Intent intent = new Intent(context, RepoStargazersActivity.class); - intent.putExtra("repoFullNameForStars", fullNameMy.getText()); - context.startActivity(intent); - break; + Intent intent = new Intent(context, RepoStargazersActivity.class); + intent.putExtra("repoFullNameForStars", fullNameMy.getText()); + context.startActivity(intent); + dialog.dismiss(); - case R.id.repoWatchers: + }); - Intent intentW = new Intent(context, RepoWatchersActivity.class); - intentW.putExtra("repoFullNameForWatchers", fullNameMy.getText()); - context.startActivity(intentW); - break; + repoWatchers.setOnClickListener(watchers -> { - case R.id.repoOpenInBrowser: + Intent intentW = new Intent(context, RepoWatchersActivity.class); + intentW.putExtra("repoFullNameForWatchers", fullNameMy.getText()); + context.startActivity(intentW); + dialog.dismiss(); - Intent intentOpenInBrowser = new Intent(context, OpenRepoInBrowserActivity.class); - intentOpenInBrowser.putExtra("repoFullNameBrowser", fullNameMy.getText()); - context.startActivity(intentOpenInBrowser); - break; + }); - } - return false; - } - }); - - popupMenu.show(); - - } }); } diff --git a/app/src/main/java/org/mian/gitnex/adapters/ReposListAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/ReposListAdapter.java index 00f2bccc..9c83b49c 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/ReposListAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/ReposListAdapter.java @@ -1,13 +1,12 @@ package org.mian.gitnex.adapters; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.graphics.Typeface; import androidx.annotation.NonNull; -import androidx.appcompat.widget.PopupMenu; import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Filter; @@ -16,6 +15,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.util.ColorGenerator; +import com.google.android.material.bottomsheet.BottomSheetDialog; import org.mian.gitnex.R; import org.mian.gitnex.activities.OpenRepoInBrowserActivity; import org.mian.gitnex.activities.RepoDetailActivity; @@ -25,7 +25,6 @@ import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.models.UserRepositories; import org.mian.gitnex.util.TinyDB; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; @@ -65,88 +64,67 @@ public class ReposListAdapter extends RecyclerView.Adapter { - Context context = v.getContext(); - TextView repoFullName = v.findViewById(R.id.repoFullName); - TextView repoType_ = v.findViewById(R.id.repoType); + Context context = v.getContext(); + TextView repoFullName = v.findViewById(R.id.repoFullName); + TextView repoType_ = v.findViewById(R.id.repoType); - Intent intent = new Intent(context, RepoDetailActivity.class); - intent.putExtra("repoFullName", repoFullName.getText().toString()); + Intent intent = new Intent(context, RepoDetailActivity.class); + intent.putExtra("repoFullName", repoFullName.getText().toString()); - TinyDB tinyDb = new TinyDB(context); - tinyDb.putString("repoFullName", repoFullName.getText().toString()); - tinyDb.putString("repoType", repoType_.getText().toString()); - tinyDb.putBoolean("resumeIssues", true); - context.startActivity(intent); + TinyDB tinyDb = new TinyDB(context); + tinyDb.putString("repoFullName", repoFullName.getText().toString()); + tinyDb.putString("repoType", repoType_.getText().toString()); + tinyDb.putBoolean("resumeIssues", true); + context.startActivity(intent); - } }); - reposDropdownMenu.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + reposDropdownMenu.setOnClickListener(v -> { - final Context context = v.getContext(); - //Context context_ = new ContextThemeWrapper(context, R.style.popupMenuStyle); + final Context context = v.getContext(); - PopupMenu popupMenu = new PopupMenu(context, v); - popupMenu.inflate(R.menu.repo_dotted_list_menu); + @SuppressLint("InflateParams") + View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_repository_in_list, null); - Object menuHelper; - Class[] argTypes; - try { + TextView repoOpenInBrowser = view.findViewById(R.id.repoOpenInBrowser); + TextView repoStargazers = view.findViewById(R.id.repoStargazers); + TextView repoWatchers = view.findViewById(R.id.repoWatchers); + TextView bottomSheetHeader = view.findViewById(R.id.bottomSheetHeader); - Field fMenuHelper = PopupMenu.class.getDeclaredField("mPopup"); - fMenuHelper.setAccessible(true); - menuHelper = fMenuHelper.get(popupMenu); - argTypes = new Class[] { boolean.class }; - assert menuHelper != null; - menuHelper.getClass().getDeclaredMethod("setForceShowIcon", - argTypes).invoke(menuHelper, true); + bottomSheetHeader.setText(fullName.getText()); + BottomSheetDialog dialog = new BottomSheetDialog(context); + dialog.setContentView(view); + dialog.show(); - } catch (Exception e) { + repoOpenInBrowser.setOnClickListener(openInBrowser -> { - popupMenu.show(); - return; + Intent intentOpenInBrowser = new Intent(context, OpenRepoInBrowserActivity.class); + intentOpenInBrowser.putExtra("repoFullNameBrowser", fullName.getText()); + context.startActivity(intentOpenInBrowser); + dialog.dismiss(); - } + }); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.repoStargazers: + repoStargazers.setOnClickListener(stargazers -> { - Intent intent = new Intent(context, RepoStargazersActivity.class); - intent.putExtra("repoFullNameForStars", fullName.getText()); - context.startActivity(intent); - break; + Intent intent = new Intent(context, RepoStargazersActivity.class); + intent.putExtra("repoFullNameForStars", fullName.getText()); + context.startActivity(intent); + dialog.dismiss(); - case R.id.repoWatchers: + }); - Intent intentW = new Intent(context, RepoWatchersActivity.class); - intentW.putExtra("repoFullNameForWatchers", fullName.getText()); - context.startActivity(intentW); - break; + repoWatchers.setOnClickListener(watchers -> { - case R.id.repoOpenInBrowser: + Intent intentW = new Intent(context, RepoWatchersActivity.class); + intentW.putExtra("repoFullNameForWatchers", fullName.getText()); + context.startActivity(intentW); + dialog.dismiss(); - Intent intentOpenInBrowser = new Intent(context, OpenRepoInBrowserActivity.class); - intentOpenInBrowser.putExtra("repoFullNameBrowser", fullName.getText()); - context.startActivity(intentOpenInBrowser); - break; + }); - } - return false; - } - }); - - popupMenu.show(); - - } }); } diff --git a/app/src/main/java/org/mian/gitnex/adapters/RepositoriesByOrgAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/RepositoriesByOrgAdapter.java index 6520fc51..42967f8a 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/RepositoriesByOrgAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/RepositoriesByOrgAdapter.java @@ -1,10 +1,10 @@ package org.mian.gitnex.adapters; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.graphics.Typeface; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Filter; @@ -13,6 +13,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.util.ColorGenerator; +import com.google.android.material.bottomsheet.BottomSheetDialog; import org.mian.gitnex.R; import org.mian.gitnex.activities.OpenRepoInBrowserActivity; import org.mian.gitnex.activities.RepoDetailActivity; @@ -22,11 +23,9 @@ import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.models.UserRepositories; import org.mian.gitnex.util.TinyDB; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import androidx.annotation.NonNull; -import androidx.appcompat.widget.PopupMenu; import androidx.recyclerview.widget.RecyclerView; /** @@ -64,85 +63,65 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter { - Context context = v.getContext(); + Context context = v.getContext(); - Intent intent = new Intent(context, RepoDetailActivity.class); - intent.putExtra("repoFullName", fullName.getText().toString()); + Intent intent = new Intent(context, RepoDetailActivity.class); + intent.putExtra("repoFullName", fullName.getText().toString()); - TinyDB tinyDb = new TinyDB(context); - tinyDb.putString("repoFullName", fullName.getText().toString()); - tinyDb.putString("repoType", repoType.getText().toString()); - tinyDb.putBoolean("resumeIssues", true); - context.startActivity(intent); + TinyDB tinyDb = new TinyDB(context); + tinyDb.putString("repoFullName", fullName.getText().toString()); + tinyDb.putString("repoType", repoType.getText().toString()); + tinyDb.putBoolean("resumeIssues", true); + context.startActivity(intent); - } }); - reposDropdownMenu.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + reposDropdownMenu.setOnClickListener(v -> { - final Context context = v.getContext(); - //Context context_ = new ContextThemeWrapper(context, R.style.popupMenuStyle); + final Context context = v.getContext(); - PopupMenu popupMenu = new PopupMenu(context, v); - popupMenu.inflate(R.menu.repo_dotted_list_menu); + @SuppressLint("InflateParams") + View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_repository_in_list, null); - Object menuHelper; - Class[] argTypes; - try { + TextView repoOpenInBrowser = view.findViewById(R.id.repoOpenInBrowser); + TextView repoStargazers = view.findViewById(R.id.repoStargazers); + TextView repoWatchers = view.findViewById(R.id.repoWatchers); + TextView bottomSheetHeader = view.findViewById(R.id.bottomSheetHeader); - Field fMenuHelper = PopupMenu.class.getDeclaredField("mPopup"); - fMenuHelper.setAccessible(true); - menuHelper = fMenuHelper.get(popupMenu); - argTypes = new Class[] { boolean.class }; - menuHelper.getClass().getDeclaredMethod("setForceShowIcon", - argTypes).invoke(menuHelper, true); + bottomSheetHeader.setText(fullName.getText()); + BottomSheetDialog dialog = new BottomSheetDialog(context); + dialog.setContentView(view); + dialog.show(); - } catch (Exception e) { + repoOpenInBrowser.setOnClickListener(openInBrowser -> { - popupMenu.show(); - return; + Intent intentOpenInBrowser = new Intent(context, OpenRepoInBrowserActivity.class); + intentOpenInBrowser.putExtra("repoFullNameBrowser", fullName.getText()); + context.startActivity(intentOpenInBrowser); + dialog.dismiss(); - } + }); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.repoStargazers: + repoStargazers.setOnClickListener(openInBrowser -> { - Intent intent = new Intent(context, RepoStargazersActivity.class); - intent.putExtra("repoFullNameForStars", fullName.getText()); - context.startActivity(intent); - break; + Intent intent = new Intent(context, RepoStargazersActivity.class); + intent.putExtra("repoFullNameForStars", fullName.getText()); + context.startActivity(intent); + dialog.dismiss(); - case R.id.repoWatchers: + }); - Intent intentW = new Intent(context, RepoWatchersActivity.class); - intentW.putExtra("repoFullNameForWatchers", fullName.getText()); - context.startActivity(intentW); - break; + repoWatchers.setOnClickListener(openInBrowser -> { - case R.id.repoOpenInBrowser: + Intent intentW = new Intent(context, RepoWatchersActivity.class); + intentW.putExtra("repoFullNameForWatchers", fullName.getText()); + context.startActivity(intentW); + dialog.dismiss(); - Intent intentOpenInBrowser = new Intent(context, OpenRepoInBrowserActivity.class); - intentOpenInBrowser.putExtra("repoFullNameBrowser", fullName.getText()); - context.startActivity(intentOpenInBrowser); - break; + }); - } - return false; - } - }); - - popupMenu.show(); - - } }); } diff --git a/app/src/main/java/org/mian/gitnex/adapters/StarredReposListAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/StarredReposListAdapter.java index 651e29a0..215b13a0 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/StarredReposListAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/StarredReposListAdapter.java @@ -1,10 +1,10 @@ package org.mian.gitnex.adapters; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.graphics.Typeface; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Filter; @@ -13,6 +13,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.util.ColorGenerator; +import com.google.android.material.bottomsheet.BottomSheetDialog; import org.mian.gitnex.R; import org.mian.gitnex.activities.OpenRepoInBrowserActivity; import org.mian.gitnex.activities.RepoDetailActivity; @@ -22,12 +23,9 @@ import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.models.UserRepositories; import org.mian.gitnex.util.TinyDB; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import androidx.annotation.NonNull; -import androidx.appcompat.view.ContextThemeWrapper; -import androidx.appcompat.widget.PopupMenu; import androidx.recyclerview.widget.RecyclerView; /** @@ -65,85 +63,65 @@ public class StarredReposListAdapter extends RecyclerView.Adapter { - Context context = v.getContext(); + Context context = v.getContext(); - Intent intent = new Intent(context, RepoDetailActivity.class); - intent.putExtra("repoFullName", fullName.getText().toString()); + Intent intent = new Intent(context, RepoDetailActivity.class); + intent.putExtra("repoFullName", fullName.getText().toString()); - TinyDB tinyDb = new TinyDB(context); - tinyDb.putString("repoFullName", fullName.getText().toString()); - tinyDb.putString("repoType", repoType.getText().toString()); - tinyDb.putBoolean("resumeIssues", true); - context.startActivity(intent); + TinyDB tinyDb = new TinyDB(context); + tinyDb.putString("repoFullName", fullName.getText().toString()); + tinyDb.putString("repoType", repoType.getText().toString()); + tinyDb.putBoolean("resumeIssues", true); + context.startActivity(intent); - } }); - reposDropdownMenu.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + reposDropdownMenu.setOnClickListener(v -> { - final Context context = v.getContext(); - Context context_ = new ContextThemeWrapper(context, R.style.AppThemeConfirmDialog); + final Context context = v.getContext(); - PopupMenu popupMenu = new PopupMenu(context, v); - popupMenu.inflate(R.menu.repo_dotted_list_menu); + @SuppressLint("InflateParams") + View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_repository_in_list, null); - Object menuHelper; - Class[] argTypes; - try { + TextView repoOpenInBrowser = view.findViewById(R.id.repoOpenInBrowser); + TextView repoStargazers = view.findViewById(R.id.repoStargazers); + TextView repoWatchers = view.findViewById(R.id.repoWatchers); + TextView bottomSheetHeader = view.findViewById(R.id.bottomSheetHeader); - Field fMenuHelper = PopupMenu.class.getDeclaredField("mPopup"); - fMenuHelper.setAccessible(true); - menuHelper = fMenuHelper.get(popupMenu); - argTypes = new Class[] { boolean.class }; - menuHelper.getClass().getDeclaredMethod("setForceShowIcon", - argTypes).invoke(menuHelper, true); + bottomSheetHeader.setText(fullName.getText()); + BottomSheetDialog dialog = new BottomSheetDialog(context); + dialog.setContentView(view); + dialog.show(); - } catch (Exception e) { + repoOpenInBrowser.setOnClickListener(openInBrowser -> { - popupMenu.show(); - return; + Intent intentOpenInBrowser = new Intent(context, OpenRepoInBrowserActivity.class); + intentOpenInBrowser.putExtra("repoFullNameBrowser", fullName.getText()); + context.startActivity(intentOpenInBrowser); + dialog.dismiss(); - } + }); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.repoStargazers: + repoStargazers.setOnClickListener(stargazers -> { - Intent intent = new Intent(context, RepoStargazersActivity.class); - intent.putExtra("repoFullNameForStars", fullName.getText()); - context.startActivity(intent); - break; + Intent intent = new Intent(context, RepoStargazersActivity.class); + intent.putExtra("repoFullNameForStars", fullName.getText()); + context.startActivity(intent); + dialog.dismiss(); - case R.id.repoWatchers: + }); - Intent intentW = new Intent(context, RepoWatchersActivity.class); - intentW.putExtra("repoFullNameForWatchers", fullName.getText()); - context.startActivity(intentW); - break; + repoWatchers.setOnClickListener(watchers -> { - case R.id.repoOpenInBrowser: + Intent intentW = new Intent(context, RepoWatchersActivity.class); + intentW.putExtra("repoFullNameForWatchers", fullName.getText()); + context.startActivity(intentW); + dialog.dismiss(); - Intent intentOpenInBrowser = new Intent(context, OpenRepoInBrowserActivity.class); - intentOpenInBrowser.putExtra("repoFullNameBrowser", fullName.getText()); - context.startActivity(intentOpenInBrowser); - break; + }); - } - return false; - } - }); - - popupMenu.show(); - - } }); } diff --git a/app/src/main/res/layout/bottom_sheet_issue_comments.xml b/app/src/main/res/layout/bottom_sheet_issue_comments.xml new file mode 100644 index 00000000..8f978a16 --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet_issue_comments.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_labels_in_list.xml b/app/src/main/res/layout/bottom_sheet_labels_in_list.xml new file mode 100644 index 00000000..9527ffad --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet_labels_in_list.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_repository_in_list.xml b/app/src/main/res/layout/bottom_sheet_repository_in_list.xml new file mode 100644 index 00000000..be1c0d65 --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet_repository_in_list.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/issue_comment_menu.xml b/app/src/main/res/menu/issue_comment_menu.xml deleted file mode 100644 index ee654415..00000000 --- a/app/src/main/res/menu/issue_comment_menu.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/labels_menu.xml b/app/src/main/res/menu/labels_menu.xml deleted file mode 100644 index 402bae55..00000000 --- a/app/src/main/res/menu/labels_menu.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/repo_dotted_list_menu.xml b/app/src/main/res/menu/repo_dotted_list_menu.xml deleted file mode 100644 index b9dac84c..00000000 --- a/app/src/main/res/menu/repo_dotted_list_menu.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - \ No newline at end of file