diff --git a/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java index 53f35350..78f722be 100644 --- a/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java @@ -42,7 +42,6 @@ import org.mian.gitnex.helpers.Authorization; import org.mian.gitnex.helpers.Version; import org.mian.gitnex.models.UserRepositories; import org.mian.gitnex.models.WatchInfo; -import org.mian.gitnex.util.AppUtil; import org.mian.gitnex.util.TinyDB; import java.util.Objects; import retrofit2.Call; @@ -63,59 +62,19 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF private FragmentRefreshListenerPr fragmentRefreshListenerPr; private FragmentRefreshListenerMilestone fragmentRefreshListenerMilestone; - final Context ctx = this; + private final Context ctx = this; private Context appCtx; - // issues interface - public FragmentRefreshListener getFragmentRefreshListener() { + private TinyDB tinyDB; - return fragmentRefreshListener; - } + private String instanceUrl; + private String loginUid; + private String instanceToken; - public void setFragmentRefreshListener(FragmentRefreshListener fragmentRefreshListener) { + private String repositoryOwner; + private String repositoryName; - this.fragmentRefreshListener = fragmentRefreshListener; - } - - public interface FragmentRefreshListener { - - void onRefresh(String text); - - } - - // pr interface - public FragmentRefreshListenerPr getFragmentRefreshListenerPr() { - - return fragmentRefreshListenerPr; - } - - public void setFragmentRefreshListenerPr(FragmentRefreshListenerPr fragmentRefreshListenerPr) { - - this.fragmentRefreshListenerPr = fragmentRefreshListenerPr; - } - - public interface FragmentRefreshListenerPr { - - void onRefresh(String text); - - } - - // milestones interface - public FragmentRefreshListenerMilestone getFragmentRefreshListenerMilestone() { - - return fragmentRefreshListenerMilestone; - } - - public void setFragmentRefreshListenerMilestone(FragmentRefreshListenerMilestone fragmentRefreshListenerMilestone) { - - this.fragmentRefreshListenerMilestone = fragmentRefreshListenerMilestone; - } - - public interface FragmentRefreshListenerMilestone { - - void onRefresh(String text); - - } + private int tabsCount; @Override protected int getLayoutResourceId() { @@ -129,40 +88,32 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF super.onCreate(savedInstanceState); appCtx = getApplicationContext(); - TinyDB tinyDb = new TinyDB(appCtx); - String repoFullName = tinyDb.getString("repoFullName"); - String[] parts = repoFullName.split("/"); - String repoName1 = parts[1]; + tinyDB = new TinyDB(appCtx); - final String instanceUrl = tinyDb.getString("instanceUrl"); - final String repoOwner = parts[0]; - final String loginUid = tinyDb.getString("loginUid"); - final String instanceToken = "token " + tinyDb.getString(loginUid + "-token"); - - tinyDb.putString("repoIssuesState", "open"); - tinyDb.putString("repoPrState", "open"); - tinyDb.putString("milestoneState", "open"); - - String appLocale = tinyDb.getString("locale"); - AppUtil.setAppLocale(getResources(), appLocale); + String[] repoNameParts = tinyDB.getString("repoFullName").split("/"); + repositoryOwner = repoNameParts[0]; + repositoryName = repoNameParts[1]; Toolbar toolbar = findViewById(R.id.toolbar); + TextView toolbarTitle = toolbar.findViewById(R.id.toolbar_title); + toolbarTitle.setText(repositoryName); setSupportActionBar(toolbar); - Objects.requireNonNull(getSupportActionBar()).setTitle(repoName1); + Objects.requireNonNull(getSupportActionBar()).setTitle(repositoryName); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); + instanceUrl = tinyDB.getString("instanceUrl"); + loginUid = tinyDB.getString("loginUid"); + instanceToken = "token " + tinyDB.getString(loginUid + "-token"); - ViewPager mViewPager = findViewById(R.id.container); - mViewPager.setAdapter(mSectionsPagerAdapter); - - TabLayout tabLayout = findViewById(R.id.tabs); + tinyDB.putString("repoIssuesState", "open"); + tinyDB.putString("repoPrState", "open"); + tinyDB.putString("milestoneState", "open"); Typeface myTypeface; - switch(tinyDb.getInt("customFontId", -1)) { + switch(tinyDB.getInt("customFontId", -1)) { case 0: myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/roboto.ttf"); @@ -179,34 +130,50 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF } toolbarTitle.setTypeface(myTypeface); - toolbarTitle.setText(repoName1); - ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0); - int tabsCount = vg.getChildCount(); + TabLayout tabLayout = findViewById(R.id.tabs); + + ViewGroup viewGroup = (ViewGroup) tabLayout.getChildAt(0); + tabsCount = viewGroup.getChildCount(); + for(int j = 0; j < tabsCount; j++) { - ViewGroup vgTab = (ViewGroup) vg.getChildAt(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); } } } - // only show Collaborators if you have permission to - final View collaboratorTab = vg.getChildAt(8); - if(tinyDb.getBoolean("isRepoAdmin") || new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) { + // Only show collaborators tab, if you have permission to + View collaboratorTab = viewGroup.getChildAt(8); + + if(tinyDB.getBoolean("isRepoAdmin") || new Version(tinyDB.getString("giteaVersion")).higherOrEqual("1.12.0")) { + collaboratorTab.setVisibility(View.VISIBLE); } else { + + tabsCount--; collaboratorTab.setVisibility(View.GONE); + } + ViewPager mViewPager = findViewById(R.id.container); + mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager)); - if(tinyDb.getBoolean("enableCounterBadges")) { + SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); + mViewPager.setAdapter(mSectionsPagerAdapter); + + if(tinyDB.getBoolean("enableCounterBadges")) { @SuppressLint("InflateParams") View tabHeader2 = LayoutInflater.from(this).inflate(R.layout.badge_issue, null); textViewBadgeIssue = tabHeader2.findViewById(R.id.counterBadgeIssue); @@ -221,41 +188,48 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF textViewBadgePull.setVisibility(View.GONE); textViewBadgeRelease.setVisibility(View.GONE); - getRepoInfo(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName1); + getRepoInfo(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repositoryOwner, repositoryName); ColorStateList textColor = tabLayout.getTabTextColors(); - // issue count + // Issue count if(textViewBadgeIssue.getText() != "") { + TabLayout.Tab tabOpenIssues = tabLayout.getTabAt(2); Objects.requireNonNull(tabLayout.getTabAt(2)).setCustomView(tabHeader2); - assert tabOpenIssues != null; + assert tabOpenIssues != null; // FIXME This should be cleaned up TextView openIssueTabView = Objects.requireNonNull(tabOpenIssues.getCustomView()).findViewById(R.id.counterBadgeIssueText); openIssueTabView.setTextColor(textColor); + } - // pull count + // Pull request count if(textViewBadgePull.getText() != "") { // only show if API returned a number + Objects.requireNonNull(tabLayout.getTabAt(3)).setCustomView(tabHeader4); TabLayout.Tab tabOpenPulls = tabLayout.getTabAt(3); - assert tabOpenPulls != null; + assert tabOpenPulls != null; // FIXME This should be cleaned up TextView openPullTabView = Objects.requireNonNull(tabOpenPulls.getCustomView()).findViewById(R.id.counterBadgePullText); openPullTabView.setTextColor(textColor); + } - // release count - if(new Version("1.11.4").less(tinyDb.getString("giteaVersion"))) { + // Release count + if(new Version("1.11.4").less(tinyDB.getString("giteaVersion"))) { + if(textViewBadgeRelease.getText() != "") { // only show if API returned a number + Objects.requireNonNull(tabLayout.getTabAt(5)).setCustomView(tabHeader6); TabLayout.Tab tabOpenRelease = tabLayout.getTabAt(5); - assert tabOpenRelease != null; + assert tabOpenRelease != null; // FIXME This should be cleaned up TextView openReleaseTabView = Objects.requireNonNull(tabOpenRelease.getCustomView()).findViewById(R.id.counterBadgeReleaseText); openReleaseTabView.setTextColor(textColor); + } } } - checkRepositoryStarStatus(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName1); - checkRepositoryWatchStatus(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName1); + checkRepositoryStarStatus(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repositoryOwner, repositoryName); + checkRepositoryWatchStatus(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repositoryOwner, repositoryName); } @@ -263,17 +237,10 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF public void onResume() { super.onResume(); - TinyDB tinyDb = new TinyDB(appCtx); - final String instanceUrl = tinyDb.getString("instanceUrl"); - final String loginUid = tinyDb.getString("loginUid"); - String repoFullName = tinyDb.getString("repoFullName"); - String[] parts = repoFullName.split("/"); - final String repoOwner = parts[0]; - final String repoName = parts[1]; - final String instanceToken = "token " + tinyDb.getString(loginUid + "-token"); - if(tinyDb.getBoolean("enableCounterIssueBadge")) { - getRepoInfo(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName); + if(tinyDB.getBoolean("enableCounterIssueBadge")) { + + getRepoInfo(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repositoryOwner, repositoryName); } } @@ -293,27 +260,34 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF int id = item.getItemId(); switch(id) { + case android.R.id.home: finish(); return true; + case R.id.repoMenu: BottomSheetRepoFragment bottomSheet = new BottomSheetRepoFragment(); bottomSheet.show(getSupportFragmentManager(), "repoBottomSheet"); return true; + case R.id.filter: BottomSheetIssuesFilterFragment filterBottomSheet = new BottomSheetIssuesFilterFragment(); filterBottomSheet.show(getSupportFragmentManager(), "repoFilterMenuBottomSheet"); return true; + case R.id.filterPr: BottomSheetPullRequestFilterFragment filterPrBottomSheet = new BottomSheetPullRequestFilterFragment(); filterPrBottomSheet.show(getSupportFragmentManager(), "repoFilterMenuPrBottomSheet"); return true; + case R.id.filterMilestone: BottomSheetMilestonesFilterFragment filterMilestoneBottomSheet = new BottomSheetMilestonesFilterFragment(); filterMilestoneBottomSheet.show(getSupportFragmentManager(), "repoFilterMenuMilestoneBottomSheet"); return true; + default: return super.onOptionsItemSelected(item); + } } @@ -321,68 +295,81 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF @Override public void onButtonClicked(String text) { - TinyDB tinyDb = new TinyDB(appCtx); - switch(text) { + case "label": startActivity(new Intent(RepoDetailActivity.this, CreateLabelActivity.class)); break; + case "newIssue": startActivity(new Intent(RepoDetailActivity.this, CreateIssueActivity.class)); break; + case "newMilestone": startActivity(new Intent(RepoDetailActivity.this, CreateMilestoneActivity.class)); break; + case "addCollaborator": startActivity(new Intent(RepoDetailActivity.this, AddCollaboratorToRepositoryActivity.class)); break; + case "createRelease": startActivity(new Intent(RepoDetailActivity.this, CreateReleaseActivity.class)); break; + case "openWebRepo": - Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(tinyDb.getString("repoHtmlUrl"))); + Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(tinyDB.getString("repoHtmlUrl"))); startActivity(i); break; + case "shareRepo": Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); sharingIntent.setType("text/plain"); - sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, tinyDb.getString("repoHtmlUrl")); - sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, tinyDb.getString("repoHtmlUrl")); - startActivity(Intent.createChooser(sharingIntent, tinyDb.getString("repoHtmlUrl"))); + sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, tinyDB.getString("repoHtmlUrl")); + sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, tinyDB.getString("repoHtmlUrl")); + startActivity(Intent.createChooser(sharingIntent, tinyDB.getString("repoHtmlUrl"))); break; + case "newFile": startActivity(new Intent(RepoDetailActivity.this, CreateFileActivity.class)); break; + case "openIssues": if(getFragmentRefreshListener() != null) { getFragmentRefreshListener().onRefresh("open"); } break; + case "closedIssues": if(getFragmentRefreshListener() != null) { getFragmentRefreshListener().onRefresh("closed"); } break; + case "openPr": if(getFragmentRefreshListenerPr() != null) { getFragmentRefreshListenerPr().onRefresh("open"); } break; + case "closedPr": if(getFragmentRefreshListenerPr() != null) { getFragmentRefreshListenerPr().onRefresh("closed"); } break; + case "openMilestone": if(getFragmentRefreshListenerMilestone() != null) { getFragmentRefreshListenerMilestone().onRefresh("open"); } break; + case "closedMilestone": if(getFragmentRefreshListenerMilestone() != null) { getFragmentRefreshListenerMilestone().onRefresh("closed"); } break; + } } @@ -398,54 +385,58 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF @Override public Fragment getItem(int position) { - TinyDB tinyDb = new TinyDB(appCtx); - String repoFullName = tinyDb.getString("repoFullName"); - String[] parts = repoFullName.split("/"); - String repoOwner = parts[0]; - String repoName = parts[1]; - Fragment fragment = null; + switch(position) { - case 0: // information - return RepoInfoFragment.newInstance(repoOwner, repoName); - case 1: // files - return FilesFragment.newInstance(repoOwner, repoName); - case 2: // issues + + case 0: // Repository details + return RepoInfoFragment.newInstance(repositoryOwner, repositoryName); + + case 1: // Files + return FilesFragment.newInstance(repositoryOwner, repositoryName); + + case 2: // Issues fragment = new IssuesFragment(); break; - case 3: // pull requests + + case 3: // Pull requests fragment = new PullRequestsFragment(); break; - case 4: // branches - return BranchesFragment.newInstance(repoOwner, repoName); - case 5: // releases - return ReleasesFragment.newInstance(repoOwner, repoName); - case 6: // milestones + + case 4: // Branches + return BranchesFragment.newInstance(repositoryOwner, repositoryName); + + case 5: // Releases + return ReleasesFragment.newInstance(repositoryOwner, repositoryName); + + case 6: // Milestones fragment = new MilestonesFragment(); break; - case 7: // labels - return LabelsFragment.newInstance(repoOwner, repoName); - case 8: // collaborators - return CollaboratorsFragment.newInstance(repoOwner, repoName); + + case 7: // Labels + return LabelsFragment.newInstance(repositoryOwner, repositoryName); + + case 8: // Collaborators + return CollaboratorsFragment.newInstance(repositoryOwner, repositoryName); + } + assert fragment != null; return fragment; + } @Override public int getCount() { - return 9; + return tabsCount; } } private void getRepoInfo(String instanceUrl, String token, final String owner, String repo) { - TinyDB tinyDb = new TinyDB(appCtx); - Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getUserRepository(token, owner, repo); - call.enqueue(new Callback() { @Override @@ -457,20 +448,23 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF if(response.code() == 200) { - if(tinyDb.getBoolean("enableCounterBadges")) { + if(tinyDB.getBoolean("enableCounterBadges")) { assert repoInfo != null; if(repoInfo.getOpen_issues_count() != null) { + textViewBadgeIssue.setVisibility(View.VISIBLE); textViewBadgeIssue.setText(repoInfo.getOpen_issues_count()); } if(repoInfo.getOpen_pull_count() != null) { + textViewBadgePull.setVisibility(View.VISIBLE); textViewBadgePull.setText(repoInfo.getOpen_pull_count()); } if(repoInfo.getRelease_count() != null) { + textViewBadgeRelease.setVisibility(View.VISIBLE); textViewBadgeRelease.setText(repoInfo.getRelease_count()); } @@ -480,6 +474,7 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF } else { + Log.e("onFailure", String.valueOf(response.code())); } @@ -497,17 +492,13 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF private void checkRepositoryStarStatus(String instanceUrl, String instanceToken, final String owner, String repo) { - Call call; - - call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().checkRepoStarStatus(instanceToken, owner, repo); - + Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().checkRepoStarStatus(instanceToken, owner, repo); call.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { - TinyDB tinyDb = new TinyDB(appCtx); - tinyDb.putInt("repositoryStarStatus", response.code()); + tinyDB.putInt("repositoryStarStatus", response.code()); } @@ -525,22 +516,23 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF Call call; call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().checkRepoWatchStatus(instanceToken, owner, repo); - call.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { - TinyDB tinyDb = new TinyDB(appCtx); - if(response.code() == 200) { + assert response.body() != null; + if(response.body().getSubscribed()) { - tinyDb.putBoolean("repositoryWatchStatus", true); + tinyDB.putBoolean("repositoryWatchStatus", true); } + } else { - tinyDb.putBoolean("repositoryWatchStatus", false); + + tinyDB.putBoolean("repositoryWatchStatus", false); } } @@ -554,4 +546,25 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF } + // Issues interface + public FragmentRefreshListener getFragmentRefreshListener() { return fragmentRefreshListener; } + + public void setFragmentRefreshListener(FragmentRefreshListener fragmentRefreshListener) { this.fragmentRefreshListener = fragmentRefreshListener; } + + public interface FragmentRefreshListener { void onRefresh(String text); } + + // Pull request interface + public FragmentRefreshListenerPr getFragmentRefreshListenerPr() { return fragmentRefreshListenerPr; } + + public void setFragmentRefreshListenerPr(FragmentRefreshListenerPr fragmentRefreshListenerPr) { this.fragmentRefreshListenerPr = fragmentRefreshListenerPr; } + + public interface FragmentRefreshListenerPr { void onRefresh(String text); } + + // Milestones interface + public FragmentRefreshListenerMilestone getFragmentRefreshListenerMilestone() { return fragmentRefreshListenerMilestone; } + + public void setFragmentRefreshListenerMilestone(FragmentRefreshListenerMilestone fragmentRefreshListenerMilestone) { this.fragmentRefreshListenerMilestone = fragmentRefreshListenerMilestone; } + + public interface FragmentRefreshListenerMilestone { void onRefresh(String text); } + }