package org.mian.gitnex.activities; import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Intent; import android.content.res.ColorStateList; import android.graphics.Typeface; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.widget.ViewPager2; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.progressindicator.LinearProgressIndicator; import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayoutMediator; import org.gitnex.tea4j.v2.models.Branch; import org.gitnex.tea4j.v2.models.Milestone; import org.gitnex.tea4j.v2.models.Organization; import org.gitnex.tea4j.v2.models.Repository; import org.gitnex.tea4j.v2.models.WatchInfo; import org.mian.gitnex.R; import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.fragments.BottomSheetIssuesFilterFragment; import org.mian.gitnex.fragments.BottomSheetMilestonesFilterFragment; import org.mian.gitnex.fragments.BottomSheetPullRequestFilterFragment; import org.mian.gitnex.fragments.BottomSheetReleasesTagsFragment; import org.mian.gitnex.fragments.BottomSheetRepoFragment; import org.mian.gitnex.fragments.CollaboratorsFragment; import org.mian.gitnex.fragments.FilesFragment; import org.mian.gitnex.fragments.IssuesFragment; import org.mian.gitnex.fragments.LabelsFragment; import org.mian.gitnex.fragments.MilestonesFragment; import org.mian.gitnex.fragments.PullRequestsFragment; import org.mian.gitnex.fragments.ReleasesFragment; import org.mian.gitnex.fragments.RepoInfoFragment; import org.mian.gitnex.fragments.WikiFragment; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.contexts.RepositoryContext; import org.mian.gitnex.structs.BottomSheetListener; import org.mian.gitnex.structs.FragmentRefreshListener; import java.util.ArrayList; import java.util.List; import java.util.Objects; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; /** * @author M M Arif */ public class RepoDetailActivity extends BaseActivity implements BottomSheetListener { private TextView textViewBadgeIssue; private TextView textViewBadgePull; private TextView textViewBadgeRelease; private Typeface myTypeface; private FragmentRefreshListener fragmentRefreshListener; private FragmentRefreshListener fragmentRefreshListenerPr; private FragmentRefreshListener fragmentRefreshListenerMilestone; private FragmentRefreshListener fragmentRefreshListenerFiles; private FragmentRefreshListener fragmentRefreshListenerFilterIssuesByMilestone; private FragmentRefreshListener fragmentRefreshListenerReleases; public ViewPager2 viewPager; public RepositoryContext repository; public static boolean updateRepo = false; private Dialog progressDialog; private MaterialAlertDialogBuilder materialAlertDialogBuilder; private Intent intentWiki; private final ActivityResultLauncher createReleaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { if(result.getResultCode() == 201) { assert result.getData() != null; if(result.getData().getBooleanExtra("updateReleases", false)) { if(fragmentRefreshListenerReleases != null) fragmentRefreshListenerReleases.onRefresh(null); repository.removeRepository(); getRepoInfo(repository.getOwner(), repository.getName()); } } }); private final ActivityResultLauncher createMilestoneLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { if(result.getResultCode() == 201) { assert result.getData() != null; if(result.getData().getBooleanExtra("milestoneCreated", false)) { if(fragmentRefreshListenerMilestone != null) fragmentRefreshListenerMilestone.onRefresh(repository.getMilestoneState().toString()); } } }); private final ActivityResultLauncher editFileLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { if(result.getResultCode() == 200) { assert result.getData() != null; if(result.getData().getBooleanExtra("fileModified", false)) { if(fragmentRefreshListenerFiles != null) fragmentRefreshListenerFiles.onRefresh(repository.getBranchRef()); } } }); private final ActivityResultLauncher settingsLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { if(result.getResultCode() == 200) { assert result.getData() != null; if(result.getData().getBooleanExtra("nameChanged", false)) { recreate(); } } }); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_repo_detail); repository = RepositoryContext.fromIntent(getIntent()); Toolbar toolbar = findViewById(R.id.toolbar); materialAlertDialogBuilder = new MaterialAlertDialogBuilder(ctx, R.style.ThemeOverlay_Material3_Dialog_Alert); intentWiki = new Intent(ctx, WikiActivity.class); TextView toolbarTitle = findViewById(R.id.toolbar_title); toolbarTitle.setText(repository.getFullName()); setSupportActionBar(toolbar); Objects.requireNonNull(getSupportActionBar()).setTitle(repository.getName()); getSupportActionBar().setDisplayHomeAsUpEnabled(true); myTypeface = AppUtil.getTypeface(this); toolbarTitle.setTypeface(myTypeface); getRepoInfo(repository.getOwner(), repository.getName()); checkRepositoryStarStatus(repository.getOwner(), repository.getName()); checkRepositoryWatchStatus(repository.getOwner(), repository.getName()); } @Override public void onResume() { super.onResume(); repository.checkAccountSwitch(this); if(updateRepo) { updateRepo = false; repository.removeRepository(); getRepoInfo(repository.getOwner(), repository.getName()); } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.repo_dotted_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if(id == android.R.id.home) { if(!getIntent().getBooleanExtra("openedFromUserOrg", false)) { RetrofitClient.getApiInterface(ctx).orgGet(repository.getOwner()).enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { Intent intent = new Intent(ctx, response.isSuccessful() ? OrganizationDetailActivity.class : ProfileActivity.class); intent.putExtra(response.isSuccessful() ? "orgName" : "username", repository.getOwner()); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); } @Override public void onFailure(@NonNull Call call, @NonNull Throwable t) { finish(); } }); } else { finish(); } return true; } else if(id == R.id.repoMenu) { if(repository.hasRepository()) { BottomSheetRepoFragment bottomSheet = new BottomSheetRepoFragment(repository); bottomSheet.show(getSupportFragmentManager(), "repoBottomSheet"); } return true; } else if(id == R.id.filter) { BottomSheetIssuesFilterFragment filterBottomSheet = new BottomSheetIssuesFilterFragment(); filterBottomSheet.show(getSupportFragmentManager(), "repoFilterMenuBottomSheet"); return true; } else if(id == R.id.filterPr) { BottomSheetPullRequestFilterFragment filterPrBottomSheet = new BottomSheetPullRequestFilterFragment(); filterPrBottomSheet.show(getSupportFragmentManager(), "repoFilterMenuPrBottomSheet"); return true; } else if(id == R.id.filterMilestone) { BottomSheetMilestonesFilterFragment filterMilestoneBottomSheet = new BottomSheetMilestonesFilterFragment(); filterMilestoneBottomSheet.show(getSupportFragmentManager(), "repoFilterMenuMilestoneBottomSheet"); return true; } else if(id == R.id.switchBranches) { chooseBranch(); return true; } else if(id == R.id.branchCommits) { Intent intent = repository.getIntent(ctx, CommitsActivity.class); ctx.startActivity(intent); return true; } else if(id == R.id.filterReleases && getAccount().requiresVersion("1.15.0")) { BottomSheetReleasesTagsFragment bottomSheetReleasesTagsFragment = new BottomSheetReleasesTagsFragment(); bottomSheetReleasesTagsFragment.show(getSupportFragmentManager(), "repoFilterReleasesMenuBottomSheet"); return true; } return super.onOptionsItemSelected(item); } @Override public void onButtonClicked(String text) { switch(text) { case "label": startActivity(repository.getIntent(ctx, CreateLabelActivity.class)); break; case "newIssue": startActivity(repository.getIntent(ctx, CreateIssueActivity.class)); break; case "newMilestone": createMilestoneLauncher.launch(repository.getIntent(ctx, CreateMilestoneActivity.class)); break; case "addCollaborator": startActivity(repository.getIntent(ctx, AddCollaboratorToRepositoryActivity.class)); break; case "chooseBranch": chooseBranch(); break; case "createRelease": createReleaseLauncher.launch(repository.getIntent(ctx, CreateReleaseActivity.class)); break; case "openWebRepo": AppUtil.openUrlInBrowser(this, repository.getRepository().getHtmlUrl()); break; case "shareRepo": AppUtil.sharingIntent(this, repository.getRepository().getHtmlUrl()); break; case "copyRepoUrl": AppUtil.copyToClipboard(this, repository.getRepository().getHtmlUrl(), ctx.getString(R.string.copyIssueUrlToastMsg)); break; case "newFile": editFileLauncher.launch(repository.getIntent(ctx, CreateFileActivity.class)); break; case "filterByMilestone": filterIssuesByMilestone(); break; case "openIssues": repository.setIssueState(RepositoryContext.State.OPEN); if(getFragmentRefreshListener() != null) { getFragmentRefreshListener().onRefresh("open"); } break; case "closedIssues": repository.setIssueState(RepositoryContext.State.CLOSED); if(getFragmentRefreshListener() != null) { getFragmentRefreshListener().onRefresh("closed"); } break; case "openPr": repository.setPrState(RepositoryContext.State.OPEN); if(getFragmentRefreshListenerPr() != null) { getFragmentRefreshListenerPr().onRefresh("open"); } break; case "closedPr": repository.setPrState(RepositoryContext.State.CLOSED); if(getFragmentRefreshListenerPr() != null) { getFragmentRefreshListenerPr().onRefresh("closed"); } break; case "openMilestone": repository.setMilestoneState(RepositoryContext.State.OPEN); if(getFragmentRefreshListenerMilestone() != null) { getFragmentRefreshListenerMilestone().onRefresh("open"); } break; case "closedMilestone": repository.setMilestoneState(RepositoryContext.State.CLOSED); if(getFragmentRefreshListenerMilestone() != null) { getFragmentRefreshListenerMilestone().onRefresh("closed"); } break; case "repoSettings": settingsLauncher.launch(repository.getIntent(ctx, RepositorySettingsActivity.class)); break; case "newPullRequest": startActivity(repository.getIntent(ctx, CreatePullRequestActivity.class)); break; case "tags": if(getFragmentRefreshListenerReleases() != null) { getFragmentRefreshListenerReleases().onRefresh("tags"); } break; case "releases": if(getFragmentRefreshListenerReleases() != null) { getFragmentRefreshListenerReleases().onRefresh("releases"); } break; case "unwatch": repository.setWatched(false); break; case "watch": repository.setWatched(true); break; case "unstar": repository.setStarred(false); break; case "star": repository.setStarred(true); break; case "createWiki": Intent intent = new Intent(ctx, WikiActivity.class); intent.putExtra("action", "add"); intent.putExtra(RepositoryContext.INTENT_EXTRA, ((RepoDetailActivity) ctx).repository); ctx.startActivity(intent); break; } } private void filterIssuesByMilestone() { progressDialog = new Dialog(this); progressDialog.setContentView(R.layout.custom_progress_loader); progressDialog.show(); Call> call = RetrofitClient .getApiInterface(ctx) .issueGetMilestonesList(repository.getOwner(), repository.getName(), "open", null, 1, 50); call.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call> call, @NonNull Response> response) { progressDialog.hide(); if(response.code() == 200) { List milestonesList = new ArrayList<>(); int selectedMilestone = 0; assert response.body() != null; milestonesList.add("All"); for(int i = 0; i < response.body().size(); i++) { Milestone milestones = response.body().get(i); milestonesList.add(milestones.getTitle()); } for(int j = 0; j < milestonesList.size(); j++) { if(repository.getIssueMilestoneFilterName() != null) { if(repository.getIssueMilestoneFilterName().equals(milestonesList.get(j))) { selectedMilestone = j; } } } materialAlertDialogBuilder.setTitle(R.string.selectMilestone) .setSingleChoiceItems(milestonesList.toArray(new String[0]), selectedMilestone, (dialogInterface, i) -> { repository.setIssueMilestoneFilterName(milestonesList.get(i)); if(getFragmentRefreshListenerFilterIssuesByMilestone() != null) { getFragmentRefreshListenerFilterIssuesByMilestone().onRefresh(milestonesList.get(i)); } dialogInterface.dismiss(); }) .setNeutralButton(R.string.cancelButton, null); materialAlertDialogBuilder.create().show(); } } @Override public void onFailure(@NonNull Call> call, @NonNull Throwable t) { progressDialog.hide(); } }); } @Override public void onDestroy() { super.onDestroy(); if(progressDialog != null) { progressDialog.dismiss(); } } private void chooseBranch() { progressDialog = new Dialog(this); progressDialog.setCancelable(false); progressDialog.setContentView(R.layout.custom_progress_loader); progressDialog.show(); Call> call = RetrofitClient .getApiInterface(ctx) .repoListBranches(repository.getOwner(), repository.getName(), null, null); call.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call> call, @NonNull Response> response) { progressDialog.hide(); if(response.code() == 200) { List branchesList = new ArrayList<>(); int selectedBranch = 0; assert response.body() != null; for(int i = 0; i < response.body().size(); i++) { Branch branches = response.body().get(i); branchesList.add(branches.getName()); if(repository.getBranchRef().equals(branches.getName())) { selectedBranch = i; } } materialAlertDialogBuilder.setTitle(R.string.pageTitleChooseBranch) .setSingleChoiceItems(branchesList.toArray(new String[0]), selectedBranch, (dialogInterface, i) -> { repository.setBranchRef(branchesList.get(i)); if(getFragmentRefreshListenerFiles() != null) { getFragmentRefreshListenerFiles().onRefresh(branchesList.get(i)); } dialogInterface.dismiss(); }) .setNeutralButton(R.string.cancelButton, null); materialAlertDialogBuilder.create().show(); } } @Override public void onFailure(@NonNull Call> call, @NonNull Throwable t) { progressDialog.hide(); } }); } public class ViewPagerAdapter extends FragmentStateAdapter { public ViewPagerAdapter(@NonNull FragmentActivity fa) { super(fa); } @NonNull @Override public Fragment createFragment(int position) { Fragment fragment = null; switch(position) { case 0: // Repository details return RepoInfoFragment.newInstance(repository); case 1: // Files return FilesFragment.newInstance(repository); case 2: // Issues fragment = IssuesFragment.newInstance(repository); break; case 3: // Pull requests fragment = PullRequestsFragment.newInstance(repository); break; case 4: // Releases return ReleasesFragment.newInstance(repository); case 5: // Wiki return WikiFragment.newInstance(repository); case 6: // Milestones fragment = MilestonesFragment.newInstance(repository); break; case 7: // Labels return LabelsFragment.newInstance(repository); case 8: // Collaborators return CollaboratorsFragment.newInstance(repository); } assert fragment != null; return fragment; } @Override public int getItemCount() { return 9; } } private void getRepoInfo(final String owner, String repo) { LinearProgressIndicator loading = findViewById(R.id.loadingIndicator); if(repository.hasRepository()) { loading.setVisibility(View.GONE); initWithRepo(); return; } Call call = RetrofitClient.getApiInterface(ctx).repoGet(owner, repo); call.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { Repository repoInfo = response.body(); loading.setVisibility(View.GONE); if(response.code() == 200) { assert repoInfo != null; repository.setRepository(repoInfo); initWithRepo(); } else { Toasty.error(ctx, getString(R.string.genericError)); finish(); } } @Override public void onFailure(@NonNull Call call, @NonNull Throwable t) { Toasty.error(ctx, getString(R.string.genericError)); finish(); } }); } private void initWithRepo() { repository.setBranchRef(repository.getRepository().getDefaultBranch()); ImageView repoTypeToolbar = findViewById(R.id.repoTypeToolbar); if(repository.getRepository().isPrivate()) { repoTypeToolbar.setVisibility(View.VISIBLE); } else { repoTypeToolbar.setVisibility(View.GONE); } TabLayout tabLayout = findViewById(R.id.tabs); if(viewPager == null) { viewPager = findViewById(R.id.repositoryContainer); viewPager.setOffscreenPageLimit(1); viewPager.setAdapter(new ViewPagerAdapter(this)); String[] tabTitles = {ctx.getResources().getString(R.string.tabTextInfo), ctx.getResources().getString(R.string.tabTextFiles), ctx.getResources().getString(R.string.pageTitleIssues), ctx.getResources().getString(R.string.tabPullRequests), ctx.getResources().getString(R.string.tabTextReleases), ctx.getResources().getString(R.string.wiki), ctx.getResources().getString(R.string.tabTextMl), ctx.getResources().getString(R.string.newIssueLabelsTitle), ctx.getResources().getString(R.string.tabTextCollaborators)}; new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> tab.setText(tabTitles[position])).attach(); ViewGroup viewGroup = (ViewGroup) tabLayout.getChildAt(0); int tabsCount = viewGroup.getChildCount(); for(int j = 0; j < tabsCount; j++) { ViewGroup vgTab = (ViewGroup) viewGroup.getChildAt(j); int tabChildCount = vgTab.getChildCount(); for(int i = 0; i < tabChildCount; i++) { View tabViewChild = vgTab.getChildAt(i); if(tabViewChild instanceof TextView) { ((TextView) tabViewChild).setTypeface(myTypeface); } } } } if(tinyDB.getBoolean("enableCounterBadges", true)) { @SuppressLint("InflateParams") View tabHeader2 = LayoutInflater.from(ctx).inflate(R.layout.badge_issue, null); if(textViewBadgeIssue == null) { textViewBadgeIssue = tabHeader2.findViewById(R.id.counterBadgeIssue); } @SuppressLint("InflateParams") View tabHeader4 = LayoutInflater.from(ctx).inflate(R.layout.badge_pull, null); if(textViewBadgePull == null) { textViewBadgePull = tabHeader4.findViewById(R.id.counterBadgePull); } @SuppressLint("InflateParams") View tabHeader6 = LayoutInflater.from(ctx).inflate(R.layout.badge_release, null); if(textViewBadgeRelease == null) { textViewBadgeRelease = tabHeader6.findViewById(R.id.counterBadgeRelease); } ColorStateList textColor = tabLayout.getTabTextColors(); if(repository.getRepository().getOpenIssuesCount() != null) { textViewBadgeIssue.setVisibility(View.VISIBLE); textViewBadgeIssue.setText(String.valueOf(repository.getRepository().getOpenIssuesCount())); TabLayout.Tab tabOpenIssues = tabLayout.getTabAt(2); assert tabOpenIssues != null; if(tabOpenIssues.getCustomView() == null) { tabOpenIssues.setCustomView(tabHeader2); } TextView openIssueTabView = Objects.requireNonNull(tabOpenIssues.getCustomView()).findViewById(R.id.counterBadgeIssueText); openIssueTabView.setTextColor(textColor); } else { textViewBadgeIssue.setVisibility(View.GONE); } if(repository.getRepository().getOpenPrCounter() != null) { textViewBadgePull.setVisibility(View.VISIBLE); textViewBadgePull.setText(String.valueOf(repository.getRepository().getOpenPrCounter())); TabLayout.Tab tabOpenPulls = tabLayout.getTabAt(3); assert tabOpenPulls != null; if(tabOpenPulls.getCustomView() == null) { tabOpenPulls.setCustomView(tabHeader4); } TextView openPullTabView = Objects.requireNonNull(tabOpenPulls.getCustomView()).findViewById(R.id.counterBadgePullText); openPullTabView.setTextColor(textColor); } else { textViewBadgePull.setVisibility(View.GONE); } if(repository.getRepository().getReleaseCounter() != null) { textViewBadgeRelease.setVisibility(View.VISIBLE); textViewBadgeRelease.setText(String.valueOf(repository.getRepository().getReleaseCounter())); TabLayout.Tab tabOpenRelease = tabLayout.getTabAt(4); assert tabOpenRelease != null; if(tabOpenRelease.getCustomView() == null) { tabOpenRelease.setCustomView(tabHeader6); } TextView openReleaseTabView = Objects.requireNonNull(tabOpenRelease.getCustomView()).findViewById(R.id.counterBadgeReleaseText); openReleaseTabView.setTextColor(textColor); } else { textViewBadgeRelease.setVisibility(View.GONE); } } Intent mainIntent = getIntent(); String goToSection = mainIntent.getStringExtra("goToSection"); String goToSectionType = mainIntent.getStringExtra("goToSectionType"); if(goToSection != null) { mainIntent.removeExtra("goToSection"); mainIntent.removeExtra("goToSectionType"); switch(goToSectionType) { case "branchesList": viewPager.setCurrentItem(1); chooseBranch(); break; case "branch": viewPager.setCurrentItem(1); String selectedBranch = mainIntent.getStringExtra("selectedBranch"); repository.setBranchRef(selectedBranch); if(getFragmentRefreshListenerFiles() != null) { getFragmentRefreshListenerFiles().onRefresh(selectedBranch); } break; case "file": viewPager.setCurrentItem(1); String branch1 = mainIntent.getStringExtra("branch"); repository.setBranchRef(branch1); if(getFragmentRefreshListenerFiles() != null) { getFragmentRefreshListenerFiles().onRefresh(branch1); } Intent intent = repository.getIntent(ctx, FileViewActivity.class); intent.putExtra("file", mainIntent.getSerializableExtra("file")); startActivity(intent); break; case "dir": viewPager.setCurrentItem(1); String branch2 = mainIntent.getStringExtra("branch"); repository.setBranchRef(branch2); if(getFragmentRefreshListenerFiles() != null) { getFragmentRefreshListenerFiles().onRefresh(branch2); } break; case "commitsList": viewPager.setCurrentItem(1); String branch = mainIntent.getStringExtra("branchName"); repository.setBranchRef(branch); if(getFragmentRefreshListenerFiles() != null) { getFragmentRefreshListenerFiles().onRefresh(branch); } Intent intent1 = repository.getIntent(ctx, CommitsActivity.class); ctx.startActivity(intent1); break; case "issue": viewPager.setCurrentItem(2); break; case "issueNew": viewPager.setCurrentItem(2); startActivity(repository.getIntent(ctx, CreateIssueActivity.class)); break; case "pull": viewPager.setCurrentItem(3); break; case "pullNew": viewPager.setCurrentItem(3); startActivity(repository.getIntent(ctx, CreatePullRequestActivity.class)); break; case "releases": viewPager.setCurrentItem(4); break; case "newRelease": viewPager.setCurrentItem(4); createReleaseLauncher.launch(repository.getIntent(ctx, CreateReleaseActivity.class)); break; case "wiki": viewPager.setCurrentItem(5); break; case "wikiNew": viewPager.setCurrentItem(5); intentWiki.putExtra("action", "add"); intentWiki.putExtra(RepositoryContext.INTENT_EXTRA, ((RepoDetailActivity) ctx).repository); ctx.startActivity(intentWiki); break; case "milestones": viewPager.setCurrentItem(6); break; case "milestonesNew": viewPager.setCurrentItem(6); createMilestoneLauncher.launch(repository.getIntent(ctx, CreateMilestoneActivity.class)); break; case "labels": viewPager.setCurrentItem(7); break; case "settings": settingsLauncher.launch(repository.getIntent(ctx, RepositorySettingsActivity.class)); break; } } } private void checkRepositoryStarStatus(final String owner, String repo) { Call call = RetrofitClient.getApiInterface(ctx).userCurrentCheckStarring(owner, repo); call.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { repository.setStarred(response.code() == 204); } @Override public void onFailure(@NonNull Call call, @NonNull Throwable t) { } }); } private void checkRepositoryWatchStatus(final String owner, String repo) { Call call = RetrofitClient.getApiInterface(ctx).userCurrentCheckSubscription(owner, repo); call.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { if(response.code() == 200) { assert response.body() != null; repository.setWatched(response.body().isSubscribed()); } else { repository.setWatched(false); } } @Override public void onFailure(@NonNull Call call, @NonNull Throwable t) { } }); } // Issues milestone filter interface public FragmentRefreshListener getFragmentRefreshListenerFilterIssuesByMilestone() { return fragmentRefreshListenerFilterIssuesByMilestone; } public void setFragmentRefreshListenerFilterIssuesByMilestone(FragmentRefreshListener fragmentRefreshListener) { this.fragmentRefreshListenerFilterIssuesByMilestone = fragmentRefreshListener; } // Issues interface public FragmentRefreshListener getFragmentRefreshListener() { return fragmentRefreshListener; } public void setFragmentRefreshListener(FragmentRefreshListener fragmentRefreshListener) { this.fragmentRefreshListener = fragmentRefreshListener; } // Pull request interface public FragmentRefreshListener getFragmentRefreshListenerPr() { return fragmentRefreshListenerPr; } public void setFragmentRefreshListenerPr(FragmentRefreshListener fragmentRefreshListenerPr) { this.fragmentRefreshListenerPr = fragmentRefreshListenerPr; } // Milestones interface public FragmentRefreshListener getFragmentRefreshListenerMilestone() { return fragmentRefreshListenerMilestone; } public void setFragmentRefreshListenerMilestone(FragmentRefreshListener fragmentRefreshListenerMilestone) { this.fragmentRefreshListenerMilestone = fragmentRefreshListenerMilestone; } // Files interface public FragmentRefreshListener getFragmentRefreshListenerFiles() { return fragmentRefreshListenerFiles; } public void setFragmentRefreshListenerFiles(FragmentRefreshListener fragmentRefreshListenerFiles) { this.fragmentRefreshListenerFiles = fragmentRefreshListenerFiles; } //Releases interface public FragmentRefreshListener getFragmentRefreshListenerReleases() { return fragmentRefreshListenerReleases; } public void setFragmentRefreshListenerReleases(FragmentRefreshListener fragmentRefreshListener) { this.fragmentRefreshListenerReleases = fragmentRefreshListener; } }