/app/src/main/java/com/fastaccess/data/dao/FragmentPagerAdapterModel.java

https://github.com/k0shk0sh/FastHub · Java · 294 lines · 254 code · 36 blank · 4 comment · 10 complexity · 4e16ee624b835137185af05e5ae06323 MD5 · raw file

  1. package com.fastaccess.data.dao;
  2. import android.content.Context;
  3. import androidx.annotation.NonNull;
  4. import androidx.annotation.Nullable;
  5. import androidx.fragment.app.Fragment;
  6. import com.annimon.stream.Collectors;
  7. import com.annimon.stream.Stream;
  8. import com.fastaccess.R;
  9. import com.fastaccess.data.dao.model.Commit;
  10. import com.fastaccess.data.dao.model.Gist;
  11. import com.fastaccess.data.dao.model.Login;
  12. import com.fastaccess.data.dao.model.PullRequest;
  13. import com.fastaccess.data.dao.types.IssueState;
  14. import com.fastaccess.data.dao.types.MyIssuesType;
  15. import com.fastaccess.ui.modules.feeds.FeedsFragment;
  16. import com.fastaccess.ui.modules.gists.GistsFragment;
  17. import com.fastaccess.ui.modules.gists.gist.comments.GistCommentsFragment;
  18. import com.fastaccess.ui.modules.gists.gist.files.GistFilesListFragment;
  19. import com.fastaccess.ui.modules.gists.starred.StarredGistsFragment;
  20. import com.fastaccess.ui.modules.main.drawer.AccountDrawerFragment;
  21. import com.fastaccess.ui.modules.main.drawer.MainDrawerFragment;
  22. import com.fastaccess.ui.modules.main.issues.MyIssuesFragment;
  23. import com.fastaccess.ui.modules.main.pullrequests.MyPullRequestFragment;
  24. import com.fastaccess.ui.modules.notification.all.AllNotificationsFragment;
  25. import com.fastaccess.ui.modules.notification.fasthub.FastHubNotificationsFragment;
  26. import com.fastaccess.ui.modules.notification.unread.UnreadNotificationsFragment;
  27. import com.fastaccess.ui.modules.pinned.gist.PinnedGistFragment;
  28. import com.fastaccess.ui.modules.pinned.issue.PinnedIssueFragment;
  29. import com.fastaccess.ui.modules.pinned.pullrequest.PinnedPullRequestFragment;
  30. import com.fastaccess.ui.modules.pinned.repo.PinnedReposFragment;
  31. import com.fastaccess.ui.modules.profile.followers.ProfileFollowersFragment;
  32. import com.fastaccess.ui.modules.profile.following.ProfileFollowingFragment;
  33. import com.fastaccess.ui.modules.profile.gists.ProfileGistsFragment;
  34. import com.fastaccess.ui.modules.profile.org.OrgProfileOverviewFragment;
  35. import com.fastaccess.ui.modules.profile.org.members.OrgMembersFragment;
  36. import com.fastaccess.ui.modules.profile.org.repos.OrgReposFragment;
  37. import com.fastaccess.ui.modules.profile.org.teams.OrgTeamFragment;
  38. import com.fastaccess.ui.modules.profile.org.teams.details.members.TeamMembersFragment;
  39. import com.fastaccess.ui.modules.profile.org.teams.details.repos.TeamReposFragment;
  40. import com.fastaccess.ui.modules.profile.overview.ProfileOverviewFragment;
  41. import com.fastaccess.ui.modules.profile.repos.ProfileReposFragment;
  42. import com.fastaccess.ui.modules.profile.starred.ProfileStarredFragment;
  43. import com.fastaccess.ui.modules.repos.code.commit.RepoCommitsFragment;
  44. import com.fastaccess.ui.modules.repos.code.commit.details.comments.CommitCommentsFragment;
  45. import com.fastaccess.ui.modules.repos.code.commit.details.files.CommitFilesFragment;
  46. import com.fastaccess.ui.modules.repos.code.contributors.RepoContributorsFragment;
  47. import com.fastaccess.ui.modules.repos.code.files.paths.RepoFilePathFragment;
  48. import com.fastaccess.ui.modules.repos.code.prettifier.ViewerFragment;
  49. import com.fastaccess.ui.modules.repos.code.releases.RepoReleasesFragment;
  50. import com.fastaccess.ui.modules.repos.extras.branches.BranchesFragment;
  51. import com.fastaccess.ui.modules.repos.issues.issue.RepoClosedIssuesFragment;
  52. import com.fastaccess.ui.modules.repos.issues.issue.RepoOpenedIssuesFragment;
  53. import com.fastaccess.ui.modules.repos.issues.issue.details.timeline.IssueTimelineFragment;
  54. import com.fastaccess.ui.modules.repos.projects.columns.ProjectColumnFragment;
  55. import com.fastaccess.ui.modules.repos.projects.list.RepoProjectFragment;
  56. import com.fastaccess.ui.modules.repos.pull_requests.pull_request.RepoPullRequestFragment;
  57. import com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.commits.PullRequestCommitsFragment;
  58. import com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.files.PullRequestFilesFragment;
  59. import com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.timeline.timeline.PullRequestTimelineFragment;
  60. import com.fastaccess.ui.modules.search.code.SearchCodeFragment;
  61. import com.fastaccess.ui.modules.search.issues.SearchIssuesFragment;
  62. import com.fastaccess.ui.modules.search.repos.SearchReposFragment;
  63. import com.fastaccess.ui.modules.search.users.SearchUsersFragment;
  64. import com.fastaccess.ui.modules.theme.fragment.ThemeFragment;
  65. import java.util.List;
  66. import lombok.Getter;
  67. import lombok.Setter;
  68. /**
  69. * Created by Kosh on 03 Dec 2016, 9:26 AM
  70. */
  71. @Getter @Setter public class FragmentPagerAdapterModel {
  72. String title;
  73. Fragment fragment;
  74. String key;
  75. private FragmentPagerAdapterModel(String title, Fragment fragment) {
  76. this(title, fragment, null);
  77. }
  78. public FragmentPagerAdapterModel(String title, Fragment fragment, String key) {
  79. this.title = title;
  80. this.fragment = fragment;
  81. this.key = key;
  82. }
  83. @NonNull public static List<FragmentPagerAdapterModel> buildForProfile(@NonNull Context context, @NonNull String login) {
  84. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.overview), ProfileOverviewFragment.newInstance(login)),
  85. new FragmentPagerAdapterModel(context.getString(R.string.feed), FeedsFragment.newInstance(login, false)),
  86. new FragmentPagerAdapterModel(context.getString(R.string.repos), ProfileReposFragment.newInstance(login)),
  87. new FragmentPagerAdapterModel(context.getString(R.string.starred), ProfileStarredFragment.newInstance(login)),
  88. new FragmentPagerAdapterModel(context.getString(R.string.gists), ProfileGistsFragment.newInstance(login)),
  89. new FragmentPagerAdapterModel(context.getString(R.string.followers), ProfileFollowersFragment.newInstance(login)),
  90. new FragmentPagerAdapterModel(context.getString(R.string.following), ProfileFollowingFragment.newInstance(login)))
  91. .collect(Collectors.toList());
  92. }
  93. @NonNull public static List<FragmentPagerAdapterModel> buildForRepoCode(@NonNull Context context, @NonNull String repoId,
  94. @NonNull String login, @NonNull String url,
  95. @NonNull String defaultBranch,
  96. @NonNull String htmlUrl) {
  97. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.readme), ViewerFragment.newInstance(url, htmlUrl, true)),
  98. new FragmentPagerAdapterModel(context.getString(R.string.files), RepoFilePathFragment.newInstance(login, repoId, null,
  99. defaultBranch)),
  100. new FragmentPagerAdapterModel(context.getString(R.string.commits), RepoCommitsFragment.newInstance(repoId, login, defaultBranch)),
  101. new FragmentPagerAdapterModel(context.getString(R.string.releases), RepoReleasesFragment.newInstance(repoId, login)),
  102. new FragmentPagerAdapterModel(context.getString(R.string.contributors), RepoContributorsFragment.newInstance(repoId, login)))
  103. .collect(Collectors.toList());
  104. }
  105. @NonNull public static List<FragmentPagerAdapterModel> buildForSearch(@NonNull Context context) {
  106. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.repos), SearchReposFragment.newInstance()),
  107. new FragmentPagerAdapterModel(context.getString(R.string.users), SearchUsersFragment.newInstance()),
  108. new FragmentPagerAdapterModel(context.getString(R.string.issues), SearchIssuesFragment.newInstance()),
  109. new FragmentPagerAdapterModel(context.getString(R.string.code), SearchCodeFragment.newInstance()))
  110. .collect(Collectors.toList());
  111. }
  112. @NonNull public static List<FragmentPagerAdapterModel> buildForIssues(@NonNull Context context, long commentId) {
  113. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.details), IssueTimelineFragment.newInstance(commentId)))
  114. .collect(Collectors.toList());
  115. }
  116. @NonNull public static List<FragmentPagerAdapterModel> buildForPullRequest(@NonNull Context context, @NonNull PullRequest pullRequest) {
  117. String login = pullRequest.getLogin();
  118. String repoId = pullRequest.getRepoId();
  119. int number = pullRequest.getNumber();
  120. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.details), PullRequestTimelineFragment.newInstance()),
  121. new FragmentPagerAdapterModel(context.getString(R.string.commits), PullRequestCommitsFragment.newInstance(repoId, login, number)),
  122. new FragmentPagerAdapterModel(context.getString(R.string.files), PullRequestFilesFragment.newInstance(repoId, login, number)))
  123. .collect(Collectors.toList());
  124. }
  125. @NonNull public static List<FragmentPagerAdapterModel> buildForRepoIssue(@NonNull Context context, @NonNull String login,
  126. @NonNull String repoId) {
  127. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.opened),
  128. RepoOpenedIssuesFragment.newInstance(repoId, login)),
  129. new FragmentPagerAdapterModel(context.getString(R.string.closed),
  130. RepoClosedIssuesFragment.newInstance(repoId, login)))
  131. .collect(Collectors.toList());
  132. }
  133. @NonNull public static List<FragmentPagerAdapterModel> buildForRepoPullRequest(@NonNull Context context, @NonNull String login,
  134. @NonNull String repoId) {
  135. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.opened),
  136. RepoPullRequestFragment.newInstance(repoId, login, IssueState.open)),
  137. new FragmentPagerAdapterModel(context.getString(R.string.closed),
  138. RepoPullRequestFragment.newInstance(repoId, login, IssueState.closed)))
  139. .collect(Collectors.toList());
  140. }
  141. @NonNull public static List<FragmentPagerAdapterModel> buildForCommit(@NonNull Context context, @NonNull Commit commitModel) {
  142. String login = commitModel.getLogin();
  143. String repoId = commitModel.getRepoId();
  144. String sha = commitModel.getSha();
  145. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.files),
  146. CommitFilesFragment.newInstance(commitModel.getSha(), commitModel.getFiles())),
  147. new FragmentPagerAdapterModel(context.getString(R.string.comments),
  148. CommitCommentsFragment.newInstance(login, repoId, sha)))
  149. .collect(Collectors.toList());
  150. }
  151. @NonNull public static List<FragmentPagerAdapterModel> buildForGist(@NonNull Context context, @NonNull Gist gistsModel) {
  152. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.files), GistFilesListFragment.newInstance(gistsModel
  153. .getFilesAsList(), false)),
  154. new FragmentPagerAdapterModel(context.getString(R.string.comments), GistCommentsFragment.newInstance(gistsModel.getGistId())))
  155. .collect(Collectors.toList());
  156. }
  157. @NonNull public static List<FragmentPagerAdapterModel> buildForNotifications(@NonNull Context context) {
  158. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.unread), new UnreadNotificationsFragment()),
  159. new FragmentPagerAdapterModel(context.getString(R.string.all), AllNotificationsFragment.newInstance()),
  160. new FragmentPagerAdapterModel(context.getString(R.string.app_name), new FastHubNotificationsFragment()))
  161. .collect(Collectors.toList());
  162. }
  163. @NonNull public static List<FragmentPagerAdapterModel> buildForGists(@NonNull Context context) {
  164. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.my_gists), ProfileGistsFragment
  165. .newInstance(Login.getUser().getLogin())),
  166. new FragmentPagerAdapterModel(context.getString(R.string.starred), StarredGistsFragment.newInstance()),
  167. new FragmentPagerAdapterModel(context.getString(R.string.public_gists), GistsFragment.newInstance()))
  168. .collect(Collectors.toList());
  169. }
  170. @NonNull public static List<FragmentPagerAdapterModel> buildForMyIssues(@NonNull Context context) {
  171. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.created),
  172. MyIssuesFragment.newInstance(IssueState.open, MyIssuesType.CREATED)),
  173. new FragmentPagerAdapterModel(context.getString(R.string.assigned),
  174. MyIssuesFragment.newInstance(IssueState.open, MyIssuesType.ASSIGNED)),
  175. new FragmentPagerAdapterModel(context.getString(R.string.mentioned),
  176. MyIssuesFragment.newInstance(IssueState.open, MyIssuesType.MENTIONED)),
  177. new FragmentPagerAdapterModel(context.getString(R.string.participated),
  178. MyIssuesFragment.newInstance(IssueState.open, MyIssuesType.PARTICIPATED)))
  179. .collect(Collectors.toList());
  180. }
  181. @NonNull public static List<FragmentPagerAdapterModel> buildForMyPulls(@NonNull Context context) {
  182. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.created),
  183. MyPullRequestFragment.newInstance(IssueState.open, MyIssuesType.CREATED)),
  184. new FragmentPagerAdapterModel(context.getString(R.string.assigned),
  185. MyPullRequestFragment.newInstance(IssueState.open, MyIssuesType.ASSIGNED)),
  186. new FragmentPagerAdapterModel(context.getString(R.string.mentioned),
  187. MyPullRequestFragment.newInstance(IssueState.open, MyIssuesType.MENTIONED)),
  188. new FragmentPagerAdapterModel(context.getString(R.string.review_requests),
  189. MyPullRequestFragment.newInstance(IssueState.open, MyIssuesType.REVIEW)))
  190. .collect(Collectors.toList());
  191. }
  192. @NonNull public static List<FragmentPagerAdapterModel> buildForOrg(@NonNull Context context, @NonNull String login, boolean isMember) {
  193. return Stream.of(
  194. new FragmentPagerAdapterModel(context.getString(R.string.feeds),
  195. isMember ? FeedsFragment.newInstance(login, true) : null),
  196. new FragmentPagerAdapterModel(context.getString(R.string.overview), OrgProfileOverviewFragment.newInstance(login)),
  197. new FragmentPagerAdapterModel(context.getString(R.string.repos), OrgReposFragment.newInstance(login)),
  198. new FragmentPagerAdapterModel(context.getString(R.string.people), OrgMembersFragment.newInstance(login)),
  199. new FragmentPagerAdapterModel(context.getString(R.string.teams), isMember ? OrgTeamFragment.newInstance(login) : null))
  200. .filter(fragmentPagerAdapterModel -> fragmentPagerAdapterModel.getFragment() != null)
  201. .collect(Collectors.toList());
  202. }
  203. @NonNull public static List<FragmentPagerAdapterModel> buildForTeam(@NonNull Context context, long id) {
  204. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.members), TeamMembersFragment.newInstance(id)),
  205. new FragmentPagerAdapterModel(context.getString(R.string.repos), TeamReposFragment.newInstance(id)))
  206. .collect(Collectors.toList());
  207. }
  208. @NonNull public static List<FragmentPagerAdapterModel> buildForTheme() {
  209. return Stream.of(new FragmentPagerAdapterModel("", ThemeFragment.Companion.newInstance(R.style.ThemeLight)),
  210. new FragmentPagerAdapterModel("", ThemeFragment.Companion.newInstance(R.style.ThemeDark)),
  211. new FragmentPagerAdapterModel("", ThemeFragment.Companion.newInstance(R.style.ThemeAmlod)),
  212. new FragmentPagerAdapterModel("", ThemeFragment.Companion.newInstance(R.style.ThemeBluish)))
  213. // new FragmentPagerAdapterModel("", ThemeFragment.Companion.newInstance(R.style.ThemeMidnight)))
  214. .collect(Collectors.toList());
  215. }
  216. @NonNull public static List<FragmentPagerAdapterModel> buildForBranches(@NonNull Context context, @NonNull String repoId, @NonNull String login) {
  217. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.branches),
  218. BranchesFragment.Companion.newInstance(login, repoId, true)),
  219. new FragmentPagerAdapterModel(context.getString(R.string.tags),
  220. BranchesFragment.Companion.newInstance(login, repoId, false)))
  221. .toList();
  222. }
  223. @NonNull public static List<FragmentPagerAdapterModel> buildForRepoProjects(@NonNull Context context, @Nullable String repoId,
  224. @NonNull String login) {
  225. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.open),
  226. RepoProjectFragment.Companion.newInstance(login, repoId, IssueState.open)),
  227. new FragmentPagerAdapterModel(context.getString(R.string.closed),
  228. RepoProjectFragment.Companion.newInstance(login, repoId, IssueState.closed)))
  229. .toList();
  230. }
  231. @NonNull public static List<FragmentPagerAdapterModel> buildForProjectColumns(@NonNull List<ProjectColumnModel> models, boolean isCollaborator) {
  232. return Stream.of(models)
  233. .map(projectColumnModel -> new FragmentPagerAdapterModel("", ProjectColumnFragment.Companion
  234. .newInstance(projectColumnModel, isCollaborator), String.valueOf(projectColumnModel.getId())))
  235. .toList();
  236. }
  237. @NonNull public static List<FragmentPagerAdapterModel> buildForPinned(@NonNull Context context) {
  238. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.repos), PinnedReposFragment.newInstance()),
  239. new FragmentPagerAdapterModel(context.getString(R.string.issues), PinnedIssueFragment.newInstance()),
  240. new FragmentPagerAdapterModel(context.getString(R.string.pull_requests), PinnedPullRequestFragment.newInstance()),
  241. new FragmentPagerAdapterModel(context.getString(R.string.gists), PinnedGistFragment.newInstance()))
  242. .collect(Collectors.toList());
  243. }
  244. @NonNull public static List<FragmentPagerAdapterModel> buildForDrawer(@NonNull Context context) {
  245. return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.menu_label), new MainDrawerFragment()),
  246. new FragmentPagerAdapterModel(context.getString(R.string.profile), new AccountDrawerFragment()))
  247. .toList();
  248. }
  249. @Override public boolean equals(Object o) {
  250. if (this == o) return true;
  251. if (o == null || getClass() != o.getClass()) return false;
  252. FragmentPagerAdapterModel that = (FragmentPagerAdapterModel) o;
  253. return key != null ? key.equals(that.key) : that.key == null;
  254. }
  255. @Override public int hashCode() {
  256. return key != null ? key.hashCode() : 0;
  257. }
  258. }