From 848e7ef8faa16fb5524173f715f9f944c8b394c4 Mon Sep 17 00:00:00 2001 From: M M Arif Date: Fri, 26 Aug 2022 19:00:08 +0200 Subject: [PATCH] Revamp app UI according to Material design (#1185) As title Co-authored-by: M M Arif Co-authored-by: 6543 <6543@obermui.de> Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/1185 Reviewed-by: 6543 <6543@noreply.codeberg.org> --- app/build.gradle | 8 +- .../org/mian/gitnex/actions/IssueActions.java | 6 +- .../AddCollaboratorToRepositoryActivity.java | 3 - .../activities/AddNewTeamMemberActivity.java | 10 +- .../activities/AddNewTeamRepoActivity.java | 10 +- .../activities/AdminCronTasksActivity.java | 8 +- .../activities/AdminGetUsersActivity.java | 5 +- .../AdminUnadoptedReposActivity.java | 4 - .../gitnex/activities/CodeEditorActivity.java | 2 +- .../activities/CreateTeamByOrgActivity.java | 15 +- .../activities/IssueDetailActivity.java | 82 +- .../mian/gitnex/activities/MainActivity.java | 2 +- .../OrganizationDetailActivity.java | 21 +- .../gitnex/activities/RepoForksActivity.java | 51 +- .../RepositorySettingsActivity.java | 26 +- .../adapters/AdminCronTasksAdapter.java | 147 ++-- .../gitnex/adapters/CollaboratorsAdapter.java | 8 +- .../adapters/MostVisitedReposAdapter.java | 91 +- ...ganizationAddUserToTeamMemberAdapter.java} | 10 +- ...rganizationTeamMembersPreviewAdapter.java} | 6 +- ... OrganizationTeamRepositoriesAdapter.java} | 99 +-- ...ter.java => OrganizationTeamsAdapter.java} | 129 +-- .../gitnex/adapters/PullRequestsAdapter.java | 4 - .../gitnex/adapters/UserAccountsAdapter.java | 21 +- .../adapters/UserAccountsNavAdapter.java | 6 +- .../mian/gitnex/adapters/UserGridAdapter.java | 98 ++- .../mian/gitnex/adapters/WikiListAdapter.java | 2 +- .../mian/gitnex/clients/RetrofitClient.java | 10 +- .../gitnex/database/api/RepositoriesApi.java | 4 + .../gitnex/database/dao/RepositoriesDao.java | 3 + .../database/models/DraftWithRepository.java | 9 + .../fragments/CollaboratorsFragment.java | 25 +- .../mian/gitnex/fragments/DraftsFragment.java | 41 +- .../fragments/ExploreIssuesFragment.java | 3 - .../ExplorePublicOrganizationsFragment.java | 3 - .../ExploreRepositoriesFragment.java | 3 - .../fragments/ExploreUsersFragment.java | 3 - .../mian/gitnex/fragments/FilesFragment.java | 2 - .../mian/gitnex/fragments/IssuesFragment.java | 3 - .../mian/gitnex/fragments/LabelsFragment.java | 4 - .../gitnex/fragments/MilestonesFragment.java | 30 +- .../fragments/MostVisitedReposFragment.java | 121 ++- .../gitnex/fragments/MyIssuesFragment.java | 16 +- .../fragments/MyRepositoriesFragment.java | 8 +- .../fragments/NotificationsFragment.java | 4 - .../fragments/OrganizationLabelsFragment.java | 9 +- ....java => OrganizationMembersFragment.java} | 24 +- ... => OrganizationRepositoriesFragment.java} | 23 +- .../OrganizationTeamInfoReposFragment.java | 6 - ...nt.java => OrganizationTeamsFragment.java} | 35 +- .../fragments/OrganizationsFragment.java | 8 +- .../fragments/PullRequestsFragment.java | 3 - .../gitnex/fragments/ReleasesFragment.java | 153 ++-- .../fragments/RepositoriesFragment.java | 8 +- .../StarredRepositoriesFragment.java | 8 +- .../mian/gitnex/fragments/WikiFragment.java | 7 - .../fragments/profile/FollowersFragment.java | 3 - .../fragments/profile/FollowingFragment.java | 3 - .../profile/OrganizationsFragment.java | 3 - .../profile/RepositoriesFragment.java | 3 - .../profile/StarredRepositoriesFragment.java | 3 - .../gitnex/helpers/DividerItemDecorator.java | 41 - .../codeeditor/CustomCodeViewAdapter.java | 15 +- .../helpers/codeeditor/LanguageManager.java | 24 + .../helpers/codeeditor/LanguageName.java | 4 +- .../codeeditor/SourcePositionListener.java | 56 +- .../codeeditor/languages/HtmlLanguage.java | 98 +++ .../codeeditor/languages/PhpLanguage.java | 2 +- .../codeeditor/languages/XmlLanguage.java | 97 +++ .../helpers/ssl/MemorizingTrustManager.java | 14 +- app/src/main/res/drawable/ic_keyword.xml | 12 - app/src/main/res/drawable/ic_reset.xml | 13 + app/src/main/res/drawable/shape_archived.xml | 2 +- .../main/res/drawable/shape_list_divider.xml | 5 - ...ctivity_add_collaborator_to_repository.xml | 66 +- .../layout/activity_add_new_team_member.xml | 66 +- .../res/layout/activity_admin_cron_tasks.xml | 60 +- .../res/layout/activity_admin_get_users.xml | 64 +- app/src/main/res/layout/activity_commits.xml | 16 +- .../main/res/layout/activity_issue_detail.xml | 413 +++++----- app/src/main/res/layout/activity_main.xml | 15 +- .../main/res/layout/activity_repo_forks.xml | 12 +- .../res/layout/activity_repo_stargazers.xml | 31 +- .../res/layout/activity_repo_watchers.xml | 31 +- .../layout/activity_settings_appearance.xml | 56 +- .../res/layout/activity_settings_drafts.xml | 51 +- .../activity_settings_notifications.xml | 32 +- .../res/layout/activity_settings_reports.xml | 32 +- .../res/layout/add_new_team_repository.xml | 51 +- .../layout/custom_user_accounts_dialog.xml | 19 +- .../res/layout/fragment_collaborators.xml | 17 +- .../res/layout/fragment_commit_details.xml | 161 ++-- .../main/res/layout/fragment_diff_files.xml | 28 +- app/src/main/res/layout/fragment_drafts.xml | 28 +- .../main/res/layout/fragment_explore_repo.xml | 28 +- .../res/layout/fragment_explore_users.xml | 28 +- app/src/main/res/layout/fragment_files.xml | 60 +- app/src/main/res/layout/fragment_issues.xml | 30 +- app/src/main/res/layout/fragment_labels.xml | 28 +- .../main/res/layout/fragment_milestones.xml | 32 +- .../res/layout/fragment_notifications.xml | 34 +- .../res/layout/fragment_organization_info.xml | 258 +++--- ....xml => fragment_organization_members.xml} | 25 +- ...ragment_organization_team_info_members.xml | 21 +- ...rg.xml => fragment_organization_teams.xml} | 28 +- .../res/layout/fragment_organizations.xml | 40 +- app/src/main/res/layout/fragment_profile.xml | 27 +- .../res/layout/fragment_profile_detail.xml | 27 +- .../res/layout/fragment_profile_emails.xml | 28 +- .../fragment_profile_followers_following.xml | 31 +- .../res/layout/fragment_pull_requests.xml | 30 +- app/src/main/res/layout/fragment_releases.xml | 28 +- .../main/res/layout/fragment_repo_info.xml | 776 +++++++++--------- .../main/res/layout/fragment_repositories.xml | 36 +- .../res/layout/fragment_search_issues.xml | 29 +- app/src/main/res/layout/fragment_wiki.xml | 28 +- .../main/res/layout/list_admin_cron_tasks.xml | 79 +- .../res/layout/list_admin_unadopted_repos.xml | 36 +- app/src/main/res/layout/list_admin_users.xml | 145 ++-- .../main/res/layout/list_collaborators.xml | 85 +- .../res/layout/list_collaborators_search.xml | 173 ++-- app/src/main/res/layout/list_commits.xml | 138 ++-- app/src/main/res/layout/list_diff_files.xml | 86 +- app/src/main/res/layout/list_drafts.xml | 117 +-- app/src/main/res/layout/list_files.xml | 96 +-- .../main/res/layout/list_issue_comments.xml | 162 ++-- app/src/main/res/layout/list_issues.xml | 251 +++--- .../res/layout/list_items_autocomplete.xml | 31 +- app/src/main/res/layout/list_labels.xml | 107 ++- app/src/main/res/layout/list_milestones.xml | 288 +++---- .../res/layout/list_most_visited_repos.xml | 159 ++-- .../main/res/layout/list_notifications.xml | 147 ++-- ... => list_organization_members_preview.xml} | 0 .../res/layout/list_organization_teams.xml | 79 ++ .../main/res/layout/list_organizations.xml | 82 +- app/src/main/res/layout/list_pr.xml | 244 +++--- .../main/res/layout/list_profile_emails.xml | 13 +- app/src/main/res/layout/list_releases.xml | 547 ++++++------ .../res/layout/list_releases_downloads.xml | 16 +- app/src/main/res/layout/list_repositories.xml | 219 ++--- app/src/main/res/layout/list_tags.xml | 253 +++--- app/src/main/res/layout/list_teams_by_org.xml | 58 -- .../main/res/layout/list_user_accounts.xml | 114 +-- app/src/main/res/layout/list_users.xml | 18 +- app/src/main/res/layout/list_users_grid.xml | 86 +- app/src/main/res/layout/list_wiki.xml | 145 ++-- app/src/main/res/menu/reset_menu.xml | 12 + app/src/main/res/values-v23/themes.xml | 2 + app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/colors.xml | 18 +- app/src/main/res/values/languages.xml | 85 +- app/src/main/res/values/strings.xml | 7 +- app/src/main/res/values/themes.xml | 7 +- build.gradle | 2 +- 154 files changed, 4954 insertions(+), 3903 deletions(-) rename app/src/main/java/org/mian/gitnex/adapters/{UserSearchForTeamMemberAdapter.java => OrganizationAddUserToTeamMemberAdapter.java} (89%) rename app/src/main/java/org/mian/gitnex/adapters/{TeamMembersByOrgPreviewAdapter.java => OrganizationTeamMembersPreviewAdapter.java} (81%) rename app/src/main/java/org/mian/gitnex/adapters/{TeamRepositoriesAdapter.java => OrganizationTeamRepositoriesAdapter.java} (86%) rename app/src/main/java/org/mian/gitnex/adapters/{TeamsByOrgAdapter.java => OrganizationTeamsAdapter.java} (86%) rename app/src/main/java/org/mian/gitnex/fragments/{MembersByOrgFragment.java => OrganizationMembersFragment.java} (78%) rename app/src/main/java/org/mian/gitnex/fragments/{RepositoriesByOrgFragment.java => OrganizationRepositoriesFragment.java} (88%) rename app/src/main/java/org/mian/gitnex/fragments/{TeamsByOrgFragment.java => OrganizationTeamsFragment.java} (81%) delete mode 100644 app/src/main/java/org/mian/gitnex/helpers/DividerItemDecorator.java create mode 100644 app/src/main/java/org/mian/gitnex/helpers/codeeditor/languages/HtmlLanguage.java create mode 100644 app/src/main/java/org/mian/gitnex/helpers/codeeditor/languages/XmlLanguage.java delete mode 100644 app/src/main/res/drawable/ic_keyword.xml create mode 100644 app/src/main/res/drawable/ic_reset.xml delete mode 100644 app/src/main/res/drawable/shape_list_divider.xml rename app/src/main/res/layout/{fragment_members_by_org.xml => fragment_organization_members.xml} (75%) rename app/src/main/res/layout/{fragment_teams_by_org.xml => fragment_organization_teams.xml} (66%) rename app/src/main/res/layout/{list_members_by_org_preview.xml => list_organization_members_preview.xml} (100%) create mode 100644 app/src/main/res/layout/list_organization_teams.xml delete mode 100644 app/src/main/res/layout/list_teams_by_org.xml create mode 100644 app/src/main/res/menu/reset_menu.xml diff --git a/app/build.gradle b/app/build.gradle index dcd7ea4a..286e196e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 33 + compileSdkVersion 32 defaultConfig { applicationId "org.mian.gitnex" minSdkVersion 23 - targetSdkVersion 33 + targetSdkVersion 32 versionCode 445 versionName "4.5.0-dev" multiDexEnabled true @@ -58,8 +58,8 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.compose.material3:material3:1.0.0-alpha16' - implementation 'androidx.compose.material3:material3-window-size-class:1.0.0-alpha16' + implementation 'androidx.compose.material3:material3:1.0.0-alpha15' + implementation 'androidx.compose.material3:material3-window-size-class:1.0.0-alpha15' implementation 'androidx.viewpager2:viewpager2:1.1.0-beta01' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation "androidx.legacy:legacy-support-v4:1.0.0" diff --git a/app/src/main/java/org/mian/gitnex/actions/IssueActions.java b/app/src/main/java/org/mian/gitnex/actions/IssueActions.java index a8856641..ff8fbe1a 100644 --- a/app/src/main/java/org/mian/gitnex/actions/IssueActions.java +++ b/app/src/main/java/org/mian/gitnex/actions/IssueActions.java @@ -3,7 +3,11 @@ package org.mian.gitnex.actions; import android.app.Activity; import android.content.Context; import androidx.annotation.NonNull; -import org.gitnex.tea4j.v2.models.*; +import org.gitnex.tea4j.v2.models.Comment; +import org.gitnex.tea4j.v2.models.CreateIssueCommentOption; +import org.gitnex.tea4j.v2.models.EditIssueCommentOption; +import org.gitnex.tea4j.v2.models.EditIssueOption; +import org.gitnex.tea4j.v2.models.Issue; import org.mian.gitnex.R; import org.mian.gitnex.activities.BaseActivity; import org.mian.gitnex.activities.IssueDetailActivity; diff --git a/app/src/main/java/org/mian/gitnex/activities/AddCollaboratorToRepositoryActivity.java b/app/src/main/java/org/mian/gitnex/activities/AddCollaboratorToRepositoryActivity.java index 14ccd54a..7638c825 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AddCollaboratorToRepositoryActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AddCollaboratorToRepositoryActivity.java @@ -6,7 +6,6 @@ import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import androidx.annotation.NonNull; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.InlineResponse2001; import org.gitnex.tea4j.v2.models.User; @@ -101,8 +100,6 @@ public class AddCollaboratorToRepositoryActivity extends BaseActivity { activityAddCollaboratorToRepositoryBinding.recyclerViewUserSearch.setHasFixedSize(true); activityAddCollaboratorToRepositoryBinding.recyclerViewUserSearch.setLayoutManager(new LinearLayoutManager(ctx)); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(activityAddCollaboratorToRepositoryBinding.recyclerViewUserSearch.getContext(), DividerItemDecoration.VERTICAL); - activityAddCollaboratorToRepositoryBinding.recyclerViewUserSearch.addItemDecoration(dividerItemDecoration); activityAddCollaboratorToRepositoryBinding.progressBar.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/org/mian/gitnex/activities/AddNewTeamMemberActivity.java b/app/src/main/java/org/mian/gitnex/activities/AddNewTeamMemberActivity.java index 2721d321..553c6d96 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AddNewTeamMemberActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AddNewTeamMemberActivity.java @@ -11,12 +11,11 @@ import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import org.gitnex.tea4j.v2.models.InlineResponse2001; import org.gitnex.tea4j.v2.models.User; -import org.mian.gitnex.adapters.UserSearchForTeamMemberAdapter; +import org.mian.gitnex.adapters.OrganizationAddUserToTeamMemberAdapter; import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.databinding.ActivityAddNewTeamMemberBinding; import java.util.ArrayList; @@ -38,7 +37,7 @@ public class AddNewTeamMemberActivity extends BaseActivity { private RecyclerView mRecyclerView; private List dataList; - private UserSearchForTeamMemberAdapter adapter; + private OrganizationAddUserToTeamMemberAdapter adapter; private long teamId; @@ -70,9 +69,6 @@ public class AddNewTeamMemberActivity extends BaseActivity { mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager(new LinearLayoutManager(ctx)); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL); - mRecyclerView.addItemDecoration(dividerItemDecoration); - dataList = new ArrayList<>(); addNewTeamMember.addTextChangedListener(new TextWatcher() { @@ -82,7 +78,7 @@ public class AddNewTeamMemberActivity extends BaseActivity { if(!addNewTeamMember.getText().toString().equals("") && addNewTeamMember.getText().toString().length() > 1) { - adapter = new UserSearchForTeamMemberAdapter(dataList, ctx, Math.toIntExact(teamId), getIntent().getStringExtra("orgName")); + adapter = new OrganizationAddUserToTeamMemberAdapter(dataList, ctx, Math.toIntExact(teamId), getIntent().getStringExtra("orgName")); loadUserSearchList(addNewTeamMember.getText().toString()); } } diff --git a/app/src/main/java/org/mian/gitnex/activities/AddNewTeamRepoActivity.java b/app/src/main/java/org/mian/gitnex/activities/AddNewTeamRepoActivity.java index eb43171f..c1eb6a1f 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AddNewTeamRepoActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AddNewTeamRepoActivity.java @@ -3,11 +3,10 @@ package org.mian.gitnex.activities; import android.os.Bundle; import android.view.View; import androidx.annotation.NonNull; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.Repository; import org.mian.gitnex.R; -import org.mian.gitnex.adapters.TeamRepositoriesAdapter; +import org.mian.gitnex.adapters.OrganizationTeamRepositoriesAdapter; import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.databinding.AddNewTeamRepositoryBinding; import org.mian.gitnex.helpers.Constants; @@ -27,7 +26,7 @@ public class AddNewTeamRepoActivity extends BaseActivity { private AddNewTeamRepositoryBinding addNewTeamRepositoryBinding; private View.OnClickListener onClickListener; private List dataList; - private TeamRepositoriesAdapter adapter; + private OrganizationTeamRepositoriesAdapter adapter; private int resultLimit; private long teamId; @@ -51,9 +50,6 @@ public class AddNewTeamRepoActivity extends BaseActivity { addNewTeamRepositoryBinding.recyclerViewTeamRepos.setHasFixedSize(true); addNewTeamRepositoryBinding.recyclerViewTeamRepos.setLayoutManager(new LinearLayoutManager(ctx)); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(addNewTeamRepositoryBinding.recyclerViewTeamRepos.getContext(), DividerItemDecoration.VERTICAL); - addNewTeamRepositoryBinding.recyclerViewTeamRepos.addItemDecoration(dividerItemDecoration); - dataList = new ArrayList<>(); loadRepos(); @@ -78,7 +74,7 @@ public class AddNewTeamRepoActivity extends BaseActivity { dataList.clear(); dataList.addAll(response.body()); - adapter = new TeamRepositoriesAdapter(dataList, ctx, Math.toIntExact(teamId), getIntent().getStringExtra("orgName"), teamName); + adapter = new OrganizationTeamRepositoriesAdapter(dataList, ctx, Math.toIntExact(teamId), getIntent().getStringExtra("orgName"), teamName); addNewTeamRepositoryBinding.recyclerViewTeamRepos.setAdapter(adapter); addNewTeamRepositoryBinding.noData.setVisibility(View.GONE); diff --git a/app/src/main/java/org/mian/gitnex/activities/AdminCronTasksActivity.java b/app/src/main/java/org/mian/gitnex/activities/AdminCronTasksActivity.java index 3f3d3ac1..8c8f2b1d 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AdminCronTasksActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AdminCronTasksActivity.java @@ -7,7 +7,6 @@ import android.os.Looper; import android.view.View; import androidx.appcompat.widget.Toolbar; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.mian.gitnex.adapters.AdminCronTasksAdapter; import org.mian.gitnex.databinding.ActivityAdminCronTasksBinding; @@ -20,11 +19,13 @@ import org.mian.gitnex.viewmodels.AdminCronTasksViewModel; public class AdminCronTasksActivity extends BaseActivity { - private final int PAGE = 1; private AdminCronTasksViewModel adminCronTasksViewModel; private View.OnClickListener onClickListener; private AdminCronTasksAdapter adapter; + private ActivityAdminCronTasksBinding activityAdminCronTasksBinding; + + private final int PAGE = 1; private int resultLimit; @Override @@ -46,9 +47,6 @@ public class AdminCronTasksActivity extends BaseActivity { activityAdminCronTasksBinding.recyclerView.setHasFixedSize(true); activityAdminCronTasksBinding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(activityAdminCronTasksBinding.recyclerView.getContext(), DividerItemDecoration.VERTICAL); - activityAdminCronTasksBinding.recyclerView.addItemDecoration(dividerItemDecoration); - activityAdminCronTasksBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { activityAdminCronTasksBinding.progressBar.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/org/mian/gitnex/activities/AdminGetUsersActivity.java b/app/src/main/java/org/mian/gitnex/activities/AdminGetUsersActivity.java index c3358cca..e8ca6b6e 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AdminGetUsersActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AdminGetUsersActivity.java @@ -12,7 +12,6 @@ import android.view.inputmethod.EditorInfo; import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.Toolbar; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.mian.gitnex.R; import org.mian.gitnex.adapters.AdminGetUsersAdapter; @@ -55,8 +54,6 @@ public class AdminGetUsersActivity extends BaseActivity implements BottomSheetLi activityAdminGetUsersBinding.recyclerView.setHasFixedSize(true); activityAdminGetUsersBinding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(activityAdminGetUsersBinding.recyclerView.getContext(), DividerItemDecoration.VERTICAL); - activityAdminGetUsersBinding.recyclerView.addItemDecoration(dividerItemDecoration); activityAdminGetUsersBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { @@ -69,6 +66,8 @@ public class AdminGetUsersActivity extends BaseActivity implements BottomSheetLi fetchDataAsync(); } + ; + private void fetchDataAsync() { AdminGetUsersViewModel adminUsersModel = new ViewModelProvider(this).get(AdminGetUsersViewModel.class); diff --git a/app/src/main/java/org/mian/gitnex/activities/AdminUnadoptedReposActivity.java b/app/src/main/java/org/mian/gitnex/activities/AdminUnadoptedReposActivity.java index 553a69b6..a65ef17e 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AdminUnadoptedReposActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AdminUnadoptedReposActivity.java @@ -7,7 +7,6 @@ import android.os.Looper; import android.view.View; import androidx.appcompat.widget.Toolbar; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.mian.gitnex.R; import org.mian.gitnex.adapters.AdminUnadoptedReposAdapter; @@ -55,9 +54,6 @@ public class AdminUnadoptedReposActivity extends BaseActivity { binding.recyclerView.setHasFixedSize(true); binding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(binding.recyclerView.getContext(), DividerItemDecoration.VERTICAL); - binding.recyclerView.addItemDecoration(dividerItemDecoration); - binding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { binding.pullToRefresh.setRefreshing(false); diff --git a/app/src/main/java/org/mian/gitnex/activities/CodeEditorActivity.java b/app/src/main/java/org/mian/gitnex/activities/CodeEditorActivity.java index c1992cca..b8600723 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CodeEditorActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CodeEditorActivity.java @@ -69,7 +69,7 @@ public class CodeEditorActivity extends BaseActivity { // Setup Line number feature binding.codeView.setEnableLineNumber(true); binding.codeView.setLineNumberTextColor(Color.GRAY); - binding.codeView.setLineNumberTextSize(44f); + binding.codeView.setLineNumberTextSize(32f); // Setup Auto indenting feature binding.codeView.setTabLength(4); diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateTeamByOrgActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateTeamByOrgActivity.java index f086be80..2c2b467c 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateTeamByOrgActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateTeamByOrgActivity.java @@ -17,7 +17,7 @@ import org.gitnex.tea4j.v2.models.Team; import org.mian.gitnex.R; import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.databinding.ActivityCreateTeamByOrgBinding; -import org.mian.gitnex.fragments.TeamsByOrgFragment; +import org.mian.gitnex.fragments.OrganizationTeamsFragment; import org.mian.gitnex.helpers.AlertDialogs; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.Toasty; @@ -33,10 +33,6 @@ import retrofit2.Callback; public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClickListener { - private final String[] permissionList = {"Read", "Write", "Admin"}; - private final String[] accessControlsList = new String[]{"Code", "Issues", "Pull Request", "Releases", "Wiki", "External Wiki", "External Issues"}; - private final boolean[] selectedAccessControlsTrueFalse = new boolean[]{false, false, false, false, false, false, false}; - public int permissionSelectedChoice = -1; private View.OnClickListener onClickListener; private TextView teamName; private TextView teamDesc; @@ -45,8 +41,15 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic private TextView teamAccessControls; private TextView teamAccessControlsArray; private Button createTeamButton; + private final String[] permissionList = {"Read", "Write", "Admin"}; + public int permissionSelectedChoice = -1; + + private final String[] accessControlsList = new String[]{"Code", "Issues", "Pull Request", "Releases", "Wiki", "External Wiki", "External Issues"}; + private List pushAccessList; + private final boolean[] selectedAccessControlsTrueFalse = new boolean[]{false, false, false, false, false, false, false}; + @Override public void onCreate(Bundle savedInstanceState) { @@ -279,7 +282,7 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic if(response2.code() == 201) { - TeamsByOrgFragment.resumeTeams = true; + OrganizationTeamsFragment.resumeTeams = true; Toasty.success(ctx, getString(R.string.teamCreated)); finish(); diff --git a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java index 23523ca6..39528963 100644 --- a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java @@ -8,7 +8,12 @@ import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.util.Log; -import android.view.*; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; @@ -16,17 +21,22 @@ import android.widget.ScrollView; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.core.content.res.ResourcesCompat; import androidx.core.text.HtmlCompat; import androidx.core.widget.ImageViewCompat; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.amulyakhare.textdrawable.TextDrawable; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.vdurmont.emoji.EmojiParser; -import org.gitnex.tea4j.v2.models.*; +import org.gitnex.tea4j.v2.models.EditIssueOption; +import org.gitnex.tea4j.v2.models.Issue; +import org.gitnex.tea4j.v2.models.IssueLabelsOption; +import org.gitnex.tea4j.v2.models.Label; +import org.gitnex.tea4j.v2.models.PullRequest; +import org.gitnex.tea4j.v2.models.Repository; +import org.gitnex.tea4j.v2.models.User; +import org.gitnex.tea4j.v2.models.WatchInfo; import org.mian.gitnex.R; import org.mian.gitnex.actions.AssigneesActions; import org.mian.gitnex.actions.LabelsActions; @@ -42,14 +52,28 @@ import org.mian.gitnex.databinding.CustomPrInfoDialogBinding; import org.mian.gitnex.fragments.BottomSheetReplyFragment; import org.mian.gitnex.fragments.BottomSheetSingleIssueFragment; import org.mian.gitnex.fragments.IssuesFragment; -import org.mian.gitnex.helpers.*; +import org.mian.gitnex.helpers.AlertDialogs; +import org.mian.gitnex.helpers.AppUtil; +import org.mian.gitnex.helpers.ClickListener; +import org.mian.gitnex.helpers.ColorInverter; +import org.mian.gitnex.helpers.LabelWidthCalculator; +import org.mian.gitnex.helpers.Markdown; +import org.mian.gitnex.helpers.RoundedTransformation; +import org.mian.gitnex.helpers.TimeHelper; +import org.mian.gitnex.helpers.TinyDB; +import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.contexts.IssueContext; import org.mian.gitnex.structs.BottomSheetListener; import org.mian.gitnex.viewmodels.IssueCommentsViewModel; import org.mian.gitnex.views.ReactionList; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Objects; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -126,9 +150,6 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt viewBinding.recyclerView.setNestedScrollingEnabled(false); viewBinding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); - RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(this, R.drawable.shape_list_divider)); - viewBinding.recyclerView.addItemDecoration(dividerItemDecoration); - viewBinding.addNewComment.setOnClickListener(v -> { BottomSheetReplyFragment bottomSheetReplyFragment = BottomSheetReplyFragment.newInstance(new Bundle(), issue); @@ -354,7 +375,7 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt } @Override - public boolean onCreateOptionsMenu(Menu menu) { + public boolean onCreateOptionsMenu(@NonNull Menu menu) { MenuInflater inflater = getMenuInflater(); showMenu = () -> { @@ -463,11 +484,6 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt assert issueCommentsMain != null; - if(issueCommentsMain.size() > 0) { - - viewBinding.divider.setVisibility(View.VISIBLE); - } - Bundle bundle = new Bundle(); bundle.putString("repoOwner", repoOwner); bundle.putString("repoName", repoName); @@ -570,30 +586,56 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt if(issue.getIssue().getPullRequest().isMerged()) { // merged viewBinding.issuePrState.setImageResource(R.drawable.ic_pull_request); - ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.iconPrMergedColor))); + ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.iconPrMergedColor, null))); } else if(!issue.getIssue().getPullRequest().isMerged() && issue.getIssue().getState().equals("closed")) { // closed viewBinding.issuePrState.setImageResource(R.drawable.ic_pull_request); - ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.iconIssuePrClosedColor))); + ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.iconIssuePrClosedColor, null))); } else { // open viewBinding.issuePrState.setImageResource(R.drawable.ic_pull_request); - ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.darkGreen))); + if(tinyDB.getInt("themeId") == 3) { + ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.retroThemeColorPrimary, null))); + } + else if(tinyDB.getInt("themeId") == 4) { + if(TimeHelper.timeBetweenHours(tinyDB.getInt("darkThemeTimeHour", 18), tinyDB.getInt("lightThemeTimeHour", 6), tinyDB.getInt("darkThemeTimeMinute", 0), tinyDB.getInt("lightThemeTimeMinute", 0))) { + ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.darkGreen, null))); + } + else { + ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.retroThemeColorPrimary, null))); + } + } + else { + ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.darkGreen, null))); + } } } else if(issue.getIssue().getState().equals("closed")) { // issue closed loadingFinishedPr = true; updateMenuState(); viewBinding.issuePrState.setImageResource(R.drawable.ic_issue); - ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.iconIssuePrClosedColor))); + ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.iconIssuePrClosedColor, null))); } else { loadingFinishedPr = true; updateMenuState(); viewBinding.issuePrState.setImageResource(R.drawable.ic_issue); - ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.darkGreen))); + if(tinyDB.getInt("themeId") == 3) { + ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.retroThemeColorPrimary, null))); + } + else if(tinyDB.getInt("themeId") == 4) { + if(TimeHelper.timeBetweenHours(tinyDB.getInt("darkThemeTimeHour", 18), tinyDB.getInt("lightThemeTimeHour", 6), tinyDB.getInt("darkThemeTimeMinute", 0), tinyDB.getInt("lightThemeTimeMinute", 0))) { + ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.darkGreen, null))); + } + else { + ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.retroThemeColorPrimary, null))); + } + } + else { + ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.darkGreen, null))); + } } TinyDB tinyDb = TinyDB.getInstance(appCtx); diff --git a/app/src/main/java/org/mian/gitnex/activities/MainActivity.java b/app/src/main/java/org/mian/gitnex/activities/MainActivity.java index 7606846c..aef956ac 100644 --- a/app/src/main/java/org/mian/gitnex/activities/MainActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/MainActivity.java @@ -203,7 +203,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig if(!userAvatarNav.equals("")) { - int avatarRadius = AppUtil.getPixelsFromDensity(ctx, 3); + int avatarRadius = AppUtil.getPixelsFromDensity(ctx, 60); PicassoService.getInstance(ctx).get().load(userAvatarNav).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(avatarRadius, 0)).resize(160, 160).centerCrop() .into(userAvatar); diff --git a/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java index 66624e68..72aa4965 100644 --- a/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java @@ -3,7 +3,11 @@ package org.mian.gitnex.activities; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; -import android.view.*; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.Toolbar; @@ -15,7 +19,12 @@ import com.google.android.material.tabs.TabLayout; import org.gitnex.tea4j.v2.models.OrganizationPermissions; import org.mian.gitnex.R; import org.mian.gitnex.clients.RetrofitClient; -import org.mian.gitnex.fragments.*; +import org.mian.gitnex.fragments.BottomSheetOrganizationFragment; +import org.mian.gitnex.fragments.OrganizationInfoFragment; +import org.mian.gitnex.fragments.OrganizationLabelsFragment; +import org.mian.gitnex.fragments.OrganizationMembersFragment; +import org.mian.gitnex.fragments.OrganizationRepositoriesFragment; +import org.mian.gitnex.fragments.OrganizationTeamsFragment; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.structs.BottomSheetListener; import java.util.Objects; @@ -225,22 +234,22 @@ public class OrganizationDetailActivity extends BaseActivity implements BottomSh return OrganizationInfoFragment.newInstance(orgName); case 1: // repos - return RepositoriesByOrgFragment.newInstance(orgName); + return OrganizationRepositoriesFragment.newInstance(orgName); case 2: // labels return OrganizationLabelsFragment.newInstance(orgName); case 3: // teams / members if(isMember) { - return TeamsByOrgFragment.newInstance(orgName, permissions); + return OrganizationTeamsFragment.newInstance(orgName, permissions); } else { - return MembersByOrgFragment.newInstance(orgName); + return OrganizationMembersFragment.newInstance(orgName); } case 4: // members if(isMember) { - return MembersByOrgFragment.newInstance(orgName); + return OrganizationMembersFragment.newInstance(orgName); } } return fragment; diff --git a/app/src/main/java/org/mian/gitnex/activities/RepoForksActivity.java b/app/src/main/java/org/mian/gitnex/activities/RepoForksActivity.java index 51df8f59..4bcdcdd8 100644 --- a/app/src/main/java/org/mian/gitnex/activities/RepoForksActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/RepoForksActivity.java @@ -10,16 +10,10 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.EditorInfo; -import android.widget.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.Toolbar; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import org.gitnex.tea4j.v2.models.Repository; import org.mian.gitnex.R; import org.mian.gitnex.adapters.RepoForksAdapter; @@ -39,16 +33,13 @@ import retrofit2.Response; public class RepoForksActivity extends BaseActivity { + private ActivityRepoForksBinding activityRepoForksBinding; private final String TAG = "RepositoryForks"; - private TextView noData; - private ProgressBar progressBar; + private int resultLimit; private int pageSize = 1; - - private RecyclerView recyclerView; private List forksList; private RepoForksAdapter adapter; - private ProgressBar progressLoadMore; private RepositoryContext repository; @@ -58,7 +49,7 @@ public class RepoForksActivity extends BaseActivity { super.onCreate(savedInstanceState); - ActivityRepoForksBinding activityRepoForksBinding = ActivityRepoForksBinding.inflate(getLayoutInflater()); + activityRepoForksBinding = ActivityRepoForksBinding.inflate(getLayoutInflater()); setContentView(activityRepoForksBinding.getRoot()); Toolbar toolbar = activityRepoForksBinding.toolbar; @@ -70,32 +61,21 @@ public class RepoForksActivity extends BaseActivity { activityRepoForksBinding.toolbarTitle.setText(ctx.getResources().getString(R.string.infoTabRepoForksCount)); - ImageView closeActivity = activityRepoForksBinding.close; - noData = activityRepoForksBinding.noData; - progressLoadMore = activityRepoForksBinding.progressLoadMore; - progressBar = activityRepoForksBinding.progressBar; - SwipeRefreshLayout swipeRefresh = activityRepoForksBinding.pullToRefresh; - - closeActivity.setOnClickListener(v -> finish()); - + activityRepoForksBinding.close.setOnClickListener(v -> finish()); resultLimit = Constants.getCurrentResultLimit(ctx); - - recyclerView = activityRepoForksBinding.recyclerView; forksList = new ArrayList<>(); - recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL)); - - swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { + activityRepoForksBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { pageSize = 1; - swipeRefresh.setRefreshing(false); + activityRepoForksBinding.pullToRefresh.setRefreshing(false); loadInitial(repoOwner, repoName, pageSize, resultLimit); adapter.notifyDataChanged(); }, 200)); adapter = new RepoForksAdapter(ctx, forksList); - adapter.setLoadMoreListener(() -> recyclerView.post(() -> { + adapter.setLoadMoreListener(() -> activityRepoForksBinding.recyclerView.post(() -> { if(forksList.size() == resultLimit || pageSize == resultLimit) { @@ -104,9 +84,9 @@ public class RepoForksActivity extends BaseActivity { } })); - recyclerView.setHasFixedSize(true); - recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); - recyclerView.setAdapter(adapter); + activityRepoForksBinding.recyclerView.setHasFixedSize(true); + activityRepoForksBinding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); + activityRepoForksBinding.recyclerView.setAdapter(adapter); loadInitial(repoOwner, repoName, pageSize, resultLimit); } @@ -128,15 +108,15 @@ public class RepoForksActivity extends BaseActivity { forksList.clear(); forksList.addAll(response.body()); adapter.notifyDataChanged(); - noData.setVisibility(View.GONE); + activityRepoForksBinding.noData.setVisibility(View.GONE); } else { forksList.clear(); adapter.notifyDataChanged(); - noData.setVisibility(View.VISIBLE); + activityRepoForksBinding.noData.setVisibility(View.VISIBLE); } - progressBar.setVisibility(View.GONE); + activityRepoForksBinding.progressBar.setVisibility(View.GONE); } else { Log.e(TAG, String.valueOf(response.code())); @@ -148,12 +128,11 @@ public class RepoForksActivity extends BaseActivity { Log.e(TAG, t.toString()); } }); - } private void loadMore(String repoOwner, String repoName, int page, int resultLimit) { - progressLoadMore.setVisibility(View.VISIBLE); + activityRepoForksBinding.progressLoadMore.setVisibility(View.VISIBLE); Call> call = RetrofitClient.getApiInterface(ctx).listForks(repoOwner, repoName, page, resultLimit); @@ -179,7 +158,7 @@ public class RepoForksActivity extends BaseActivity { } adapter.notifyDataChanged(); - progressLoadMore.setVisibility(View.GONE); + activityRepoForksBinding.progressLoadMore.setVisibility(View.GONE); } else { Log.e(TAG, String.valueOf(response.code())); diff --git a/app/src/main/java/org/mian/gitnex/activities/RepositorySettingsActivity.java b/app/src/main/java/org/mian/gitnex/activities/RepositorySettingsActivity.java index b6a740f8..c27883b3 100644 --- a/app/src/main/java/org/mian/gitnex/activities/RepositorySettingsActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/RepositorySettingsActivity.java @@ -38,13 +38,8 @@ public class RepositorySettingsActivity extends BaseActivity { private CustomRepositoryTransferDialogBinding transferRepoBinding; private AlertDialog dialogRepo; - //private AlertDialog dialogRepoDelete; - private MaterialAlertDialogBuilder materialAlertDialogBuilder; - //private Dialog dialogProp; - //private Dialog dialogDeleteRepository; - //private Dialog dialogTransferRepository; private View.OnClickListener onClickListener; private RepositoryContext repository; @@ -75,20 +70,11 @@ public class RepositorySettingsActivity extends BaseActivity { private void showTransferRepository() { - /*dialogTransferRepository = new Dialog(ctx, R.style.ThemeOverlay_MaterialComponents_Dialog_Alert); - - if (dialogTransferRepository.getWindow() != null) { - - dialogTransferRepository.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - }*/ - transferRepoBinding = CustomRepositoryTransferDialogBinding.inflate(LayoutInflater.from(ctx)); View view = transferRepoBinding.getRoot(); materialAlertDialogBuilder.setView(view); - //transferRepoBinding.cancel.setOnClickListener(editProperties -> dialogRepo.dismiss()); - transferRepoBinding.transfer.setOnClickListener(deleteRepo -> { String newOwner = String.valueOf(transferRepoBinding.ownerNameForTransfer.getText()); @@ -118,7 +104,7 @@ public class RepositorySettingsActivity extends BaseActivity { Call transferCall = RetrofitClient.getApiInterface(ctx).repoTransfer(repositoryTransfer, repository.getOwner(), repository.getName()); - transferCall.enqueue(new Callback() { + transferCall.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { @@ -126,15 +112,15 @@ public class RepositorySettingsActivity extends BaseActivity { transferRepoBinding.transfer.setVisibility(View.GONE); transferRepoBinding.processingRequest.setVisibility(View.VISIBLE); - if(response.code() == 202) { + if(response.code() == 202 || response.code() == 201) { dialogRepo.dismiss(); Toasty.success(ctx, getString(R.string.repoTransferSuccess)); - finish(); Objects.requireNonNull(BaseApi.getInstance(ctx, RepositoriesApi.class)).deleteRepository(repository.getRepositoryId()); Intent intent = new Intent(RepositorySettingsActivity.this, MainActivity.class); RepositorySettingsActivity.this.startActivity(intent); + finish(); } else if(response.code() == 404) { @@ -187,7 +173,7 @@ public class RepositorySettingsActivity extends BaseActivity { Call deleteCall = RetrofitClient.getApiInterface(ctx).repoDelete(repository.getOwner(), repository.getName()); - deleteCall.enqueue(new Callback() { + deleteCall.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { @@ -200,10 +186,10 @@ public class RepositorySettingsActivity extends BaseActivity { dialogRepo.dismiss(); Toasty.success(ctx, getString(R.string.repoDeletionSuccess)); - finish(); Objects.requireNonNull(BaseApi.getInstance(ctx, RepositoriesApi.class)).deleteRepository(repository.getRepositoryId()); Intent intent = new Intent(RepositorySettingsActivity.this, MainActivity.class); RepositorySettingsActivity.this.startActivity(intent); + finish(); } else { @@ -300,7 +286,7 @@ public class RepositorySettingsActivity extends BaseActivity { Call propsCall = RetrofitClient.getApiInterface(ctx).repoEdit(repository.getOwner(), repository.getName(), repoProps); - propsCall.enqueue(new Callback() { + propsCall.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { diff --git a/app/src/main/java/org/mian/gitnex/adapters/AdminCronTasksAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/AdminCronTasksAdapter.java index 0c64cb1b..adee3f94 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/AdminCronTasksAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/AdminCronTasksAdapter.java @@ -31,10 +31,84 @@ public class AdminCronTasksAdapter extends RecyclerView.Adapter tasksList; + static class CronTasksViewHolder extends RecyclerView.ViewHolder { + + private Cron cronTasks; + + private final TextView taskName; + + private CronTasksViewHolder(View itemView) { + + super(itemView); + Context ctx = itemView.getContext(); + + final Locale locale = ctx.getResources().getConfiguration().locale; + final String timeFormat = TinyDB.getInstance(ctx).getString("dateFormat", "pretty"); + + ImageView runTask = itemView.findViewById(R.id.runTask); + taskName = itemView.findViewById(R.id.taskName); + LinearLayout cronTasksInfo = itemView.findViewById(R.id.cronTasksInfo); + LinearLayout cronTasksRun = itemView.findViewById(R.id.cronTasksRun); + + cronTasksInfo.setOnClickListener(taskInfo -> { + + String nextRun = ""; + String lastRun = ""; + + if(cronTasks.getNext() != null) { + nextRun = TimeHelper.formatTime(cronTasks.getNext(), locale, timeFormat, ctx); + } + if(cronTasks.getPrev() != null) { + lastRun = TimeHelper.formatTime(cronTasks.getPrev(), locale, timeFormat, ctx); + } + + View view = LayoutInflater.from(ctx).inflate(R.layout.layout_cron_task_info, null); + + TextView taskScheduleContent = view.findViewById(R.id.taskScheduleContent); + TextView nextRunContent = view.findViewById(R.id.nextRunContent); + TextView lastRunContent = view.findViewById(R.id.lastRunContent); + TextView execTimeContent = view.findViewById(R.id.execTimeContent); + + taskScheduleContent.setText(cronTasks.getSchedule()); + nextRunContent.setText(nextRun); + lastRunContent.setText(lastRun); + execTimeContent.setText(String.valueOf(cronTasks.getExecTimes())); + + MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(ctx).setTitle(StringUtils.capitalize(cronTasks.getName().replace("_", " "))).setView(view) + .setNeutralButton(ctx.getString(R.string.close), null); + + materialAlertDialogBuilder.create().show(); + }); + + cronTasksRun.setOnClickListener(taskInfo -> { + + runCronTask(ctx, cronTasks.getName()); + }); + } + + } + public AdminCronTasksAdapter(List tasksListMain) { this.tasksList = tasksListMain; } + @NonNull + @Override + public AdminCronTasksAdapter.CronTasksViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + + View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_admin_cron_tasks, parent, false); + return new AdminCronTasksAdapter.CronTasksViewHolder(v); + } + + @Override + public void onBindViewHolder(@NonNull AdminCronTasksAdapter.CronTasksViewHolder holder, int position) { + + Cron currentItem = tasksList.get(position); + + holder.cronTasks = currentItem; + holder.taskName.setText(StringUtils.capitalize(currentItem.getName().replace("_", " "))); + } + private static void runCronTask(final Context ctx, final String taskName) { Call call = RetrofitClient.getApiInterface(ctx).adminCronRun(taskName); @@ -76,82 +150,9 @@ public class AdminCronTasksAdapter extends RecyclerView.Adapter { - - String nextRun = ""; - String lastRun = ""; - - if(cronTasks.getNext() != null) { - nextRun = TimeHelper.formatTime(cronTasks.getNext(), locale, timeFormat, ctx); - } - if(cronTasks.getPrev() != null) { - lastRun = TimeHelper.formatTime(cronTasks.getPrev(), locale, timeFormat, ctx); - } - - View view = LayoutInflater.from(ctx).inflate(R.layout.layout_cron_task_info, null); - - TextView taskScheduleContent = view.findViewById(R.id.taskScheduleContent); - TextView nextRunContent = view.findViewById(R.id.nextRunContent); - TextView lastRunContent = view.findViewById(R.id.lastRunContent); - TextView execTimeContent = view.findViewById(R.id.execTimeContent); - - taskScheduleContent.setText(cronTasks.getSchedule()); - nextRunContent.setText(nextRun); - lastRunContent.setText(lastRun); - execTimeContent.setText(String.valueOf(cronTasks.getExecTimes())); - - MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(ctx).setTitle(StringUtils.capitalize(cronTasks.getName().replace("_", " "))).setView(view) - .setPositiveButton(ctx.getString(R.string.close), null); - - materialAlertDialogBuilder.create().show(); - }); - - cronTasksRun.setOnClickListener(taskInfo -> { - - runCronTask(ctx, cronTasks.getName()); - }); - } - - } - } diff --git a/app/src/main/java/org/mian/gitnex/adapters/CollaboratorsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/CollaboratorsAdapter.java index c403fe13..b8e1c4db 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/CollaboratorsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/CollaboratorsAdapter.java @@ -82,10 +82,12 @@ public class CollaboratorsAdapter extends BaseAdapter { if(!currentItem.getFullName().equals("")) { viewHolder.collaboratorName.setText(Html.fromHtml(currentItem.getFullName())); + viewHolder.userName.setText(context.getResources().getString(R.string.usernameWithAt, currentItem.getLogin())); } else { viewHolder.collaboratorName.setText(currentItem.getLogin()); + viewHolder.userName.setVisibility(View.GONE); } } @@ -94,20 +96,22 @@ public class CollaboratorsAdapter extends BaseAdapter { private final ImageView collaboratorAvatar; private final TextView collaboratorName; + private final TextView userName; private String userLoginId; ViewHolder(View v) { collaboratorAvatar = v.findViewById(R.id.collaboratorAvatar); collaboratorName = v.findViewById(R.id.collaboratorName); + userName = v.findViewById(R.id.userName); - collaboratorAvatar.setOnClickListener(loginId -> { + v.setOnClickListener(loginId -> { Intent intent = new Intent(context, ProfileActivity.class); intent.putExtra("username", userLoginId); context.startActivity(intent); }); - collaboratorAvatar.setOnLongClickListener(loginId -> { + v.setOnLongClickListener(loginId -> { AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId)); return true; }); diff --git a/app/src/main/java/org/mian/gitnex/adapters/MostVisitedReposAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/MostVisitedReposAdapter.java index 12e5c423..c5d63049 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/MostVisitedReposAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/MostVisitedReposAdapter.java @@ -13,10 +13,14 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.util.ColorGenerator; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.mian.gitnex.R; import org.mian.gitnex.activities.RepoDetailActivity; +import org.mian.gitnex.database.api.BaseApi; +import org.mian.gitnex.database.api.RepositoriesApi; import org.mian.gitnex.database.models.Repository; import org.mian.gitnex.helpers.AppUtil; +import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.contexts.RepositoryContext; import java.util.List; @@ -27,8 +31,65 @@ import java.util.List; public class MostVisitedReposAdapter extends RecyclerView.Adapter { private List mostVisitedReposList; + private final Context ctx; - public MostVisitedReposAdapter(List reposListMain) { + class MostVisitedViewHolder extends RecyclerView.ViewHolder { + + private Repository repository; + + private final ImageView image; + private final TextView repoName; + private final TextView orgName; + private final TextView mostVisited; + private final ImageView resetCounter; + + private MostVisitedViewHolder(View itemView) { + + super(itemView); + + image = itemView.findViewById(R.id.image); + repoName = itemView.findViewById(R.id.repo_name); + orgName = itemView.findViewById(R.id.org_name); + mostVisited = itemView.findViewById(R.id.most_visited); + resetCounter = itemView.findViewById(R.id.reset_counter); + + itemView.setOnClickListener(v -> { + + Context context = v.getContext(); + RepositoryContext repositoryContext = new RepositoryContext(repository.getRepositoryOwner(), repository.getRepositoryName(), context); + Intent intent = repositoryContext.getIntent(context, RepoDetailActivity.class); + context.startActivity(intent); + }); + + resetCounter.setOnClickListener(itemDelete -> { + + MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(ctx, R.style.ThemeOverlay_Material3_Dialog_Alert); + + materialAlertDialogBuilder.setTitle(ctx.getString(R.string.reset)).setMessage(ctx.getString(R.string.resetCounterDialogMessage, repository.getRepositoryName())) + .setPositiveButton(R.string.reset, (dialog, whichButton) -> { + + int getRepositoryId = repository.getRepositoryId(); + resetRepositoryCounter(getBindingAdapterPosition()); + + RepositoriesApi repositoriesApi = BaseApi.getInstance(ctx, RepositoriesApi.class); + assert repositoriesApi != null; + repositoriesApi.updateRepositoryMostVisited(0, getRepositoryId); + }).setNeutralButton(R.string.cancelButton, null).show(); + }); + } + + } + + private void resetRepositoryCounter(int position) { + + mostVisitedReposList.remove(position); + notifyItemRemoved(position); + notifyItemRangeChanged(position, mostVisitedReposList.size()); + Toasty.success(ctx, ctx.getResources().getString(R.string.resetMostReposCounter)); + } + + public MostVisitedReposAdapter(Context ctx, List reposListMain) { + this.ctx = ctx; this.mostVisitedReposList = reposListMain; } @@ -73,32 +134,4 @@ public class MostVisitedReposAdapter extends RecyclerView.Adapter { - - Context context = v.getContext(); - RepositoryContext repositoryContext = new RepositoryContext(repository.getRepositoryOwner(), repository.getRepositoryName(), context); - Intent intent = repositoryContext.getIntent(context, RepoDetailActivity.class); - context.startActivity(intent); - }); - } - - } - } diff --git a/app/src/main/java/org/mian/gitnex/adapters/UserSearchForTeamMemberAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/OrganizationAddUserToTeamMemberAdapter.java similarity index 89% rename from app/src/main/java/org/mian/gitnex/adapters/UserSearchForTeamMemberAdapter.java rename to app/src/main/java/org/mian/gitnex/adapters/OrganizationAddUserToTeamMemberAdapter.java index 22e58ff2..78952648 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/UserSearchForTeamMemberAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/OrganizationAddUserToTeamMemberAdapter.java @@ -30,14 +30,14 @@ import retrofit2.Response; * @author M M Arif */ -public class UserSearchForTeamMemberAdapter extends RecyclerView.Adapter { +public class OrganizationAddUserToTeamMemberAdapter extends RecyclerView.Adapter { private final List usersSearchList; private final Context context; private final int teamId; private final String orgName; - public UserSearchForTeamMemberAdapter(List dataList, Context ctx, int teamId, String orgName) { + public OrganizationAddUserToTeamMemberAdapter(List dataList, Context ctx, int teamId, String orgName) { this.context = ctx; this.usersSearchList = dataList; this.teamId = teamId; @@ -46,13 +46,13 @@ public class UserSearchForTeamMemberAdapter extends RecyclerView.Adapter { +public class OrganizationTeamMembersPreviewAdapter extends RecyclerView.Adapter { private final Context context; private final List userData; - public TeamMembersByOrgPreviewAdapter(Context context, List userInfo) { + public OrganizationTeamMembersPreviewAdapter(Context context, List userInfo) { this.context = context; this.userData = userInfo; } @@ -31,7 +31,7 @@ public class TeamMembersByOrgPreviewAdapter extends RecyclerView.Adapter { +public class OrganizationTeamRepositoriesAdapter extends RecyclerView.Adapter { private final List reposList; private final Context context; @@ -40,7 +40,7 @@ public class TeamRepositoriesAdapter extends RecyclerView.Adapter reposArr; - public TeamRepositoriesAdapter(List dataList, Context ctx, int teamId, String orgName, String teamName) { + public OrganizationTeamRepositoriesAdapter(List dataList, Context ctx, int teamId, String orgName, String teamName) { this.context = ctx; this.reposList = dataList; this.teamId = teamId; @@ -49,15 +49,60 @@ public class TeamRepositoriesAdapter extends RecyclerView.Adapter(); } + class TeamReposViewHolder extends RecyclerView.ViewHolder { + + private Repository repoInfo; + + private final ImageView repoAvatar; + private final TextView name; + private final ImageView addRepoButtonAdd; + + private TeamReposViewHolder(View itemView) { + + super(itemView); + repoAvatar = itemView.findViewById(R.id.userAvatar); + name = itemView.findViewById(R.id.userFullName); + itemView.findViewById(R.id.userName).setVisibility(View.GONE); + addRepoButtonAdd = itemView.findViewById(R.id.addCollaboratorButtonAdd); + ImageView addRepoButtonRemove = itemView.findViewById(R.id.addCollaboratorButtonRemove); + //addRepoButtonAdd.setVisibility(View.VISIBLE); + //addRepoButtonRemove.setVisibility(View.GONE); + + new Handler(Looper.getMainLooper()).postDelayed(OrganizationTeamRepositoriesAdapter.this::getTeamRepos, 200); + + new Handler(Looper.getMainLooper()).postDelayed(() -> { + + if(reposArr.size() > 0) { + for(int i = 0; i < reposArr.size(); i++) { + if(!reposArr.get(i).getName().equals(repoInfo.getName())) { + addRepoButtonAdd.setVisibility(View.VISIBLE); + } + else { + addRepoButtonAdd.setVisibility(View.GONE); + } + } + } + else { + addRepoButtonAdd.setVisibility(View.VISIBLE); + } + }, 500); + + addRepoButtonAdd.setOnClickListener(v -> AlertDialogs.addRepoDialog(context, orgName, repoInfo.getName(), Integer.parseInt(String.valueOf(teamId)), teamName)); + + addRepoButtonRemove.setOnClickListener(v -> AlertDialogs.removeRepoDialog(context, orgName, repoInfo.getName(), Integer.parseInt(String.valueOf(teamId)), teamName)); + } + + } + @NonNull @Override - public TeamRepositoriesAdapter.TeamReposViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + public OrganizationTeamRepositoriesAdapter.TeamReposViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_collaborators_search, parent, false); - return new TeamRepositoriesAdapter.TeamReposViewHolder(v); + return new OrganizationTeamRepositoriesAdapter.TeamReposViewHolder(v); } @Override - public void onBindViewHolder(@NonNull final TeamRepositoriesAdapter.TeamReposViewHolder holder, int position) { + public void onBindViewHolder(@NonNull final OrganizationTeamRepositoriesAdapter.TeamReposViewHolder holder, int position) { Repository currentItem = reposList.get(position); holder.repoInfo = currentItem; @@ -107,48 +152,4 @@ public class TeamRepositoriesAdapter extends RecyclerView.Adapter { - - if(reposArr.size() > 0) { - for(int i = 0; i < reposArr.size(); i++) { - if(!reposArr.get(i).getName().equals(repoInfo.getName())) { - addRepoButtonAdd.setVisibility(View.VISIBLE); - } - else { - addRepoButtonAdd.setVisibility(View.GONE); - } - } - } - else { - addRepoButtonAdd.setVisibility(View.VISIBLE); - } - }, 500); - - addRepoButtonAdd.setOnClickListener(v -> AlertDialogs.addRepoDialog(context, orgName, repoInfo.getName(), Integer.parseInt(String.valueOf(teamId)), teamName)); - - addRepoButtonRemove.setOnClickListener(v -> AlertDialogs.removeRepoDialog(context, orgName, repoInfo.getName(), Integer.parseInt(String.valueOf(teamId)), teamName)); - } - - } - } diff --git a/app/src/main/java/org/mian/gitnex/adapters/TeamsByOrgAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/OrganizationTeamsAdapter.java similarity index 86% rename from app/src/main/java/org/mian/gitnex/adapters/TeamsByOrgAdapter.java rename to app/src/main/java/org/mian/gitnex/adapters/OrganizationTeamsAdapter.java index fbc54656..73affc6f 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/TeamsByOrgAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/OrganizationTeamsAdapter.java @@ -29,47 +29,56 @@ import retrofit2.Response; * @author M M Arif */ -public class TeamsByOrgAdapter extends RecyclerView.Adapter implements Filterable { +public class OrganizationTeamsAdapter extends RecyclerView.Adapter implements Filterable { private final List teamList; private final Context context; private final List teamListFull; private final OrganizationPermissions permissions; private final String orgName; - private final Filter orgTeamsFilter = new Filter() { - @Override - protected FilterResults performFiltering(CharSequence constraint) { - List filteredList = new ArrayList<>(); + static class OrgTeamsViewHolder extends RecyclerView.ViewHolder { - if(constraint == null || constraint.length() == 0) { - filteredList.addAll(teamListFull); - } - else { - String filterPattern = constraint.toString().toLowerCase().trim(); + private Team team; - for(Team item : teamListFull) { - if(item.getName().toLowerCase().contains(filterPattern) || item.getDescription().toLowerCase().contains(filterPattern)) { - filteredList.add(item); - } - } - } + private OrganizationPermissions permissions; + private final TextView teamTitle; + private final TextView teamDescription; + private final LinearLayout membersPreviewFrame; - FilterResults results = new FilterResults(); - results.values = filteredList; + private final List userInfos; + private final OrganizationTeamMembersPreviewAdapter adapter; + private String orgName; - return results; + private OrgTeamsViewHolder(View itemView) { + super(itemView); + + teamTitle = itemView.findViewById(R.id.teamTitle); + teamDescription = itemView.findViewById(R.id.teamDescription); + membersPreviewFrame = itemView.findViewById(R.id.membersPreviewFrame); + + RecyclerView membersPreview = itemView.findViewById(R.id.membersPreview); + + userInfos = new ArrayList<>(); + adapter = new OrganizationTeamMembersPreviewAdapter(itemView.getContext(), userInfos); + + membersPreview.setLayoutManager(new LinearLayoutManager(itemView.getContext(), RecyclerView.HORIZONTAL, false)); + membersPreview.setAdapter(adapter); + + itemView.setOnClickListener(v -> { + Context context = v.getContext(); + + Intent intent = new Intent(context, OrganizationTeamInfoActivity.class); + intent.putExtra("team", team); + intent.putExtra("permissions", permissions); + intent.putExtra("orgName", orgName); + context.startActivity(intent); + }); } - @Override - protected void publishResults(CharSequence constraint, FilterResults results) { - teamList.clear(); - teamList.addAll((List) results.values); - notifyDataSetChanged(); - } - }; + } - public TeamsByOrgAdapter(Context ctx, List teamListMain, OrganizationPermissions permissions, String orgName) { + public OrganizationTeamsAdapter(Context ctx, List teamListMain, OrganizationPermissions permissions, String orgName) { this.context = ctx; this.teamList = teamListMain; this.permissions = permissions; @@ -79,13 +88,13 @@ public class TeamsByOrgAdapter extends RecyclerView.Adapter>() { - @Override public void onResponse(@NonNull Call> call, @NonNull Response> response) { if(response.isSuccessful() && response.body() != null && response.body().size() > 0) { @@ -136,43 +144,36 @@ public class TeamsByOrgAdapter extends RecyclerView.Adapter filteredList = new ArrayList<>(); - private final TextView teamTitle; - private final TextView teamDescription; - private final LinearLayout membersPreviewFrame; - private final List userInfos; - private final TeamMembersByOrgPreviewAdapter adapter; - private Team team; - private OrganizationPermissions permissions; - private String orgName; + if(constraint == null || constraint.length() == 0) { + filteredList.addAll(teamListFull); + } + else { + String filterPattern = constraint.toString().toLowerCase().trim(); - private OrgTeamsViewHolder(View itemView) { - super(itemView); + for(Team item : teamListFull) { + if(item.getName().toLowerCase().contains(filterPattern) || item.getDescription().toLowerCase().contains(filterPattern)) { + filteredList.add(item); + } + } + } - teamTitle = itemView.findViewById(R.id.teamTitle); - teamDescription = itemView.findViewById(R.id.teamDescription); - membersPreviewFrame = itemView.findViewById(R.id.membersPreviewFrame); + FilterResults results = new FilterResults(); + results.values = filteredList; - RecyclerView membersPreview = itemView.findViewById(R.id.membersPreview); - - userInfos = new ArrayList<>(); - adapter = new TeamMembersByOrgPreviewAdapter(itemView.getContext(), userInfos); - - membersPreview.setLayoutManager(new LinearLayoutManager(itemView.getContext(), RecyclerView.HORIZONTAL, false)); - membersPreview.setAdapter(adapter); - - itemView.setOnClickListener(v -> { - Context context = v.getContext(); - - Intent intent = new Intent(context, OrganizationTeamInfoActivity.class); - intent.putExtra("team", team); - intent.putExtra("permissions", permissions); - intent.putExtra("orgName", orgName); - context.startActivity(intent); - }); + return results; } - } + @Override + protected void publishResults(CharSequence constraint, FilterResults results) { + teamList.clear(); + teamList.addAll((List) results.values); + notifyDataSetChanged(); + } + }; } diff --git a/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java index 61e1f174..e61d18e5 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java @@ -212,10 +212,6 @@ public class PullRequestsAdapter extends RecyclerView.Adapter" + context.getResources().getString(R.string.hash) + pullRequest.getNumber() + ""; diff --git a/app/src/main/java/org/mian/gitnex/adapters/UserAccountsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/UserAccountsAdapter.java index 7cc15713..e978d036 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/UserAccountsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/UserAccountsAdapter.java @@ -41,11 +41,13 @@ public class UserAccountsAdapter extends RecyclerView.Adapter userAccountsList; private final Context context; private final Dialog dialog; + private final TinyDB tinyDB; public UserAccountsAdapter(Context ctx, Dialog dialog) { this.dialog = dialog; this.context = ctx; this.userAccountsList = Objects.requireNonNull(BaseApi.getInstance(context, UserAccountsApi.class)).usersAccounts(); + this.tinyDB = TinyDB.getInstance(context); } private void updateLayoutByPosition(int position) { @@ -96,7 +98,6 @@ public class UserAccountsAdapter extends RecyclerView.Adapter membersList; private final Context context; private final List membersListFull; - private final Filter membersFilter = new Filter() { - @Override - protected FilterResults performFiltering(CharSequence constraint) { - List filteredList = new ArrayList<>(); - if(constraint == null || constraint.length() == 0) { + private class ViewHolder { - filteredList.addAll(membersListFull); - } - else { + private String userLoginId; - String filterPattern = constraint.toString().toLowerCase().trim(); + private final ImageView memberAvatar; + private final TextView memberName; + private final TextView userName; - for(User item : membersListFull) { - if(item.getFullName().toLowerCase().contains(filterPattern) || item.getLogin().toLowerCase().contains(filterPattern)) { - filteredList.add(item); - } - } - } + ViewHolder(View v) { - FilterResults results = new FilterResults(); - results.values = filteredList; + memberAvatar = v.findViewById(R.id.userAvatarImageView); + memberName = v.findViewById(R.id.userNameTv); + userName = v.findViewById(R.id.userName); - return results; + v.setOnClickListener(loginId -> { + Intent intent = new Intent(context, ProfileActivity.class); + intent.putExtra("username", userLoginId); + context.startActivity(intent); + }); + + v.setOnLongClickListener(loginId -> { + AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId)); + return true; + }); } - @Override - protected void publishResults(CharSequence constraint, FilterResults results) { - - membersList.clear(); - membersList.addAll((List) results.values); - notifyDataSetChanged(); - } - }; + } public UserGridAdapter(Context ctx, List membersListMain) { @@ -117,10 +115,12 @@ public class UserGridAdapter extends BaseAdapter implements Filterable { if(!currentItem.getFullName().equals("")) { viewHolder.memberName.setText(Html.fromHtml(currentItem.getFullName())); + viewHolder.userName.setText(context.getResources().getString(R.string.usernameWithAt, currentItem.getLogin())); } else { viewHolder.memberName.setText(currentItem.getLogin()); + viewHolder.userName.setVisibility(View.GONE); } } @@ -129,29 +129,39 @@ public class UserGridAdapter extends BaseAdapter implements Filterable { return membersFilter; } - private class ViewHolder { + private final Filter membersFilter = new Filter() { + @Override + protected FilterResults performFiltering(CharSequence constraint) { + List filteredList = new ArrayList<>(); - private final ImageView memberAvatar; - private final TextView memberName; - private String userLoginId; + if(constraint == null || constraint.length() == 0) { - ViewHolder(View v) { + filteredList.addAll(membersListFull); + } + else { - memberAvatar = v.findViewById(R.id.userAvatarImageView); - memberName = v.findViewById(R.id.userNameTv); + String filterPattern = constraint.toString().toLowerCase().trim(); - v.setOnClickListener(loginId -> { - Intent intent = new Intent(context, ProfileActivity.class); - intent.putExtra("username", userLoginId); - context.startActivity(intent); - }); + for(User item : membersListFull) { + if(item.getFullName().toLowerCase().contains(filterPattern) || item.getLogin().toLowerCase().contains(filterPattern)) { + filteredList.add(item); + } + } + } - v.setOnLongClickListener(loginId -> { - AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId)); - return true; - }); + FilterResults results = new FilterResults(); + results.values = filteredList; + + return results; } - } + @Override + protected void publishResults(CharSequence constraint, FilterResults results) { + + membersList.clear(); + membersList.addAll((List) results.values); + notifyDataSetChanged(); + } + }; } diff --git a/app/src/main/java/org/mian/gitnex/adapters/WikiListAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/WikiListAdapter.java index 72ce27f2..6a128bff 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/WikiListAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/WikiListAdapter.java @@ -222,7 +222,7 @@ public class WikiListAdapter extends RecyclerView.Adapter repositoriesDao.updateRepositoryMostVisited(mostVisited, repositoryId)); } + public void resetAllRepositoryMostVisited(int repoAccountId) { + executorService.execute(() -> repositoriesDao.resetAllRepositoryMostVisited(repoAccountId)); + } + public LiveData> fetchAllMostVisited(int repoAccountId) { return repositoriesDao.fetchAllMostVisited(repoAccountId); } diff --git a/app/src/main/java/org/mian/gitnex/database/dao/RepositoriesDao.java b/app/src/main/java/org/mian/gitnex/database/dao/RepositoriesDao.java index 10821c80..61142956 100644 --- a/app/src/main/java/org/mian/gitnex/database/dao/RepositoriesDao.java +++ b/app/src/main/java/org/mian/gitnex/database/dao/RepositoriesDao.java @@ -50,4 +50,7 @@ public interface RepositoriesDao { @Query("SELECT * FROM Repositories WHERE mostVisited > 0 AND repoAccountId = :repoAccountId ORDER BY mostVisited DESC LIMIT 50") LiveData> fetchAllMostVisited(int repoAccountId); + @Query("UPDATE Repositories SET mostVisited = 0 WHERE repoAccountId = :repoAccountId") + void resetAllRepositoryMostVisited(int repoAccountId); + } diff --git a/app/src/main/java/org/mian/gitnex/database/models/DraftWithRepository.java b/app/src/main/java/org/mian/gitnex/database/models/DraftWithRepository.java index c97c8fec..147f9a44 100644 --- a/app/src/main/java/org/mian/gitnex/database/models/DraftWithRepository.java +++ b/app/src/main/java/org/mian/gitnex/database/models/DraftWithRepository.java @@ -12,6 +12,7 @@ public class DraftWithRepository { private int repoAccountId; private String repositoryOwner; private String repositoryName; + private int mostVisited; private int draftRepositoryId; private int draftAccountId; @@ -141,4 +142,12 @@ public class DraftWithRepository { this.issueType = issueType; } + public int getMostVisited() { + return mostVisited; + } + + public void setMostVisited(int mostVisited) { + this.mostVisited = mostVisited; + } + } diff --git a/app/src/main/java/org/mian/gitnex/fragments/CollaboratorsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/CollaboratorsFragment.java index 56d5279e..681ae602 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/CollaboratorsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/CollaboratorsFragment.java @@ -4,9 +4,6 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.GridView; -import android.widget.ProgressBar; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; @@ -22,12 +19,8 @@ import org.mian.gitnex.viewmodels.CollaboratorsViewModel; public class CollaboratorsFragment extends Fragment { public static boolean refreshCollaborators = false; - - private ProgressBar mProgressBar; + private FragmentCollaboratorsBinding fragmentCollaboratorsBinding; private CollaboratorsAdapter adapter; - private GridView mGridView; - private TextView noDataCollaborators; - private RepositoryContext repository; public CollaboratorsFragment() { @@ -48,11 +41,7 @@ public class CollaboratorsFragment extends Fragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - FragmentCollaboratorsBinding fragmentCollaboratorsBinding = FragmentCollaboratorsBinding.inflate(inflater, container, false); - - noDataCollaborators = fragmentCollaboratorsBinding.noDataCollaborators; - mProgressBar = fragmentCollaboratorsBinding.progressBar; - mGridView = fragmentCollaboratorsBinding.gridView; + fragmentCollaboratorsBinding = FragmentCollaboratorsBinding.inflate(inflater, container, false); fetchDataAsync(repository.getOwner(), repository.getName()); return fragmentCollaboratorsBinding.getRoot(); @@ -66,15 +55,15 @@ public class CollaboratorsFragment extends Fragment { collaboratorsModel.getCollaboratorsList(owner, repo, getContext()).observe(getViewLifecycleOwner(), collaboratorsListMain -> { adapter = new CollaboratorsAdapter(getContext(), collaboratorsListMain); if(adapter.getCount() > 0) { - mGridView.setAdapter(adapter); - noDataCollaborators.setVisibility(View.GONE); + fragmentCollaboratorsBinding.gridView.setAdapter(adapter); + fragmentCollaboratorsBinding.noDataCollaborators.setVisibility(View.GONE); } else { adapter.notifyDataSetChanged(); - mGridView.setAdapter(adapter); - noDataCollaborators.setVisibility(View.VISIBLE); + fragmentCollaboratorsBinding.gridView.setAdapter(adapter); + fragmentCollaboratorsBinding.noDataCollaborators.setVisibility(View.VISIBLE); } - mProgressBar.setVisibility(View.GONE); + fragmentCollaboratorsBinding.progressBar.setVisibility(View.GONE); }); } diff --git a/app/src/main/java/org/mian/gitnex/fragments/DraftsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/DraftsFragment.java index 37616eec..ca55db1e 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/DraftsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/DraftsFragment.java @@ -4,16 +4,17 @@ import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.view.*; +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.view.inputmethod.EditorInfo; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.SearchView; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import org.mian.gitnex.R; import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.adapters.DraftsAdapter; @@ -25,6 +26,7 @@ import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.Toasty; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @author M M Arif @@ -32,19 +34,17 @@ import java.util.List; public class DraftsFragment extends Fragment { + private FragmentDraftsBinding fragmentDraftsBinding; private Context ctx; private DraftsAdapter adapter; - private RecyclerView mRecyclerView; private DraftsApi draftsApi; - private TextView noData; private List draftsList_; private int currentActiveAccountId; - private SwipeRefreshLayout swipeRefresh; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - FragmentDraftsBinding fragmentDraftsBinding = FragmentDraftsBinding.inflate(inflater, container, false); + fragmentDraftsBinding = FragmentDraftsBinding.inflate(inflater, container, false); ctx = getContext(); setHasOptionsMenu(true); @@ -56,19 +56,12 @@ public class DraftsFragment extends Fragment { draftsList_ = new ArrayList<>(); draftsApi = BaseApi.getInstance(ctx, DraftsApi.class); - noData = fragmentDraftsBinding.noData; - mRecyclerView = fragmentDraftsBinding.recyclerView; - swipeRefresh = fragmentDraftsBinding.pullToRefresh; - - mRecyclerView.setHasFixedSize(true); - mRecyclerView.setLayoutManager(new LinearLayoutManager(ctx)); - - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL); - mRecyclerView.addItemDecoration(dividerItemDecoration); + fragmentDraftsBinding.recyclerView.setHasFixedSize(true); + fragmentDraftsBinding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); adapter = new DraftsAdapter(getContext(), getChildFragmentManager(), draftsList_); currentActiveAccountId = tinyDb.getInt("currentActiveAccountId"); - swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { + fragmentDraftsBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { draftsList_.clear(); fetchDataAsync(currentActiveAccountId); @@ -84,19 +77,19 @@ public class DraftsFragment extends Fragment { draftsApi.getDrafts(accountId).observe(getViewLifecycleOwner(), drafts -> { - swipeRefresh.setRefreshing(false); + fragmentDraftsBinding.pullToRefresh.setRefreshing(false); assert drafts != null; if(drafts.size() > 0) { draftsList_.clear(); - noData.setVisibility(View.GONE); + fragmentDraftsBinding.noData.setVisibility(View.GONE); draftsList_.addAll(drafts); adapter.notifyDataChanged(); - mRecyclerView.setAdapter(adapter); + fragmentDraftsBinding.recyclerView.setAdapter(adapter); } else { - noData.setVisibility(View.VISIBLE); + fragmentDraftsBinding.noData.setVisibility(View.VISIBLE); } }); } @@ -112,7 +105,7 @@ public class DraftsFragment extends Fragment { if(draftsList_.size() > 0) { - BaseApi.getInstance(ctx, DraftsApi.class).deleteAllDrafts(accountId); + Objects.requireNonNull(BaseApi.getInstance(ctx, DraftsApi.class)).deleteAllDrafts(accountId); draftsList_.clear(); adapter.notifyDataChanged(); Toasty.success(ctx, getResources().getString(R.string.draftsDeleteSuccess)); diff --git a/app/src/main/java/org/mian/gitnex/fragments/ExploreIssuesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/ExploreIssuesFragment.java index 2828d075..528fe8a1 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/ExploreIssuesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/ExploreIssuesFragment.java @@ -8,7 +8,6 @@ import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.mian.gitnex.R; import org.mian.gitnex.adapters.ExploreIssuesAdapter; @@ -40,9 +39,7 @@ public class ExploreIssuesFragment extends Fragment { viewBinding.progressBar.setVisibility(View.VISIBLE); }, 50)); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(requireActivity(), DividerItemDecoration.VERTICAL); viewBinding.recyclerViewSearchIssues.setHasFixedSize(true); - viewBinding.recyclerViewSearchIssues.addItemDecoration(dividerItemDecoration); viewBinding.recyclerViewSearchIssues.setLayoutManager(new LinearLayoutManager(requireActivity())); fetchDataAsync(""); diff --git a/app/src/main/java/org/mian/gitnex/fragments/ExplorePublicOrganizationsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/ExplorePublicOrganizationsFragment.java index dfa49511..4e3c26e8 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/ExplorePublicOrganizationsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/ExplorePublicOrganizationsFragment.java @@ -11,7 +11,6 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.Organization; import org.mian.gitnex.R; @@ -72,9 +71,7 @@ public class ExplorePublicOrganizationsFragment extends Fragment { } }); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(fragmentPublicOrgBinding.recyclerView.getContext(), DividerItemDecoration.VERTICAL); fragmentPublicOrgBinding.recyclerView.setHasFixedSize(true); - fragmentPublicOrgBinding.recyclerView.addItemDecoration(dividerItemDecoration); fragmentPublicOrgBinding.recyclerView.setLayoutManager(new LinearLayoutManager(context)); fragmentPublicOrgBinding.recyclerView.setAdapter(adapter); diff --git a/app/src/main/java/org/mian/gitnex/fragments/ExploreRepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/ExploreRepositoriesFragment.java index 1e2c2fa4..c4fd5206 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/ExploreRepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/ExploreRepositoriesFragment.java @@ -8,7 +8,6 @@ import android.view.*; import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.gitnex.tea4j.v2.models.Repository; @@ -77,9 +76,7 @@ public class ExploreRepositoriesFragment extends Fragment { } })); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, DividerItemDecoration.VERTICAL); viewBinding.recyclerViewReposSearch.setHasFixedSize(true); - viewBinding.recyclerViewReposSearch.addItemDecoration(dividerItemDecoration); viewBinding.recyclerViewReposSearch.setLayoutManager(new LinearLayoutManager(context)); viewBinding.recyclerViewReposSearch.setAdapter(adapter); diff --git a/app/src/main/java/org/mian/gitnex/fragments/ExploreUsersFragment.java b/app/src/main/java/org/mian/gitnex/fragments/ExploreUsersFragment.java index 3e735245..95f0b94e 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/ExploreUsersFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/ExploreUsersFragment.java @@ -8,7 +8,6 @@ import android.view.*; import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.InlineResponse2001; import org.gitnex.tea4j.v2.models.User; @@ -64,9 +63,7 @@ public class ExploreUsersFragment extends Fragment { } })); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, DividerItemDecoration.VERTICAL); viewBinding.recyclerViewExploreUsers.setHasFixedSize(true); - viewBinding.recyclerViewExploreUsers.addItemDecoration(dividerItemDecoration); viewBinding.recyclerViewExploreUsers.setLayoutManager(new LinearLayoutManager(context)); viewBinding.recyclerViewExploreUsers.setAdapter(adapter); diff --git a/app/src/main/java/org/mian/gitnex/fragments/FilesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/FilesFragment.java index 5e0905c8..68750fa2 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/FilesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/FilesFragment.java @@ -11,7 +11,6 @@ import androidx.annotation.NonNull; import androidx.appcompat.widget.SearchView; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.ContentsResponse; import org.mian.gitnex.R; @@ -71,7 +70,6 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter binding.recyclerView.setHasFixedSize(true); binding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); binding.recyclerView.setAdapter(filesAdapter); - binding.recyclerView.addItemDecoration(new DividerItemDecoration(binding.recyclerView.getContext(), DividerItemDecoration.VERTICAL)); binding.breadcrumbsView.setItems(new ArrayList<>( Collections.singletonList(BreadcrumbItem.createSimpleItem(getResources().getString(R.string.filesBreadcrumbRoot) + getResources().getString(R.string.colonDivider) + repository.getBranchRef())))); diff --git a/app/src/main/java/org/mian/gitnex/fragments/IssuesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/IssuesFragment.java index d4f757ce..e42646f1 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/IssuesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/IssuesFragment.java @@ -9,7 +9,6 @@ import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.Issue; import org.mian.gitnex.R; @@ -78,9 +77,7 @@ public class IssuesFragment extends Fragment { } })); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(fragmentIssuesBinding.recyclerView.getContext(), DividerItemDecoration.VERTICAL); fragmentIssuesBinding.recyclerView.setHasFixedSize(true); - fragmentIssuesBinding.recyclerView.addItemDecoration(dividerItemDecoration); fragmentIssuesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(context)); fragmentIssuesBinding.recyclerView.setAdapter(adapter); diff --git a/app/src/main/java/org/mian/gitnex/fragments/LabelsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/LabelsFragment.java index e3520e04..0e18ad70 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/LabelsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/LabelsFragment.java @@ -11,7 +11,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; @@ -63,9 +62,6 @@ public class LabelsFragment extends Fragment { mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL); - mRecyclerView.addItemDecoration(dividerItemDecoration); - mProgressBar = fragmentLabelsBinding.progressBar; swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { diff --git a/app/src/main/java/org/mian/gitnex/fragments/MilestonesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/MilestonesFragment.java index c3c51228..c47a8a1f 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/MilestonesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/MilestonesFragment.java @@ -4,13 +4,17 @@ import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.view.*; +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.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.Milestone; import org.mian.gitnex.R; @@ -28,7 +32,6 @@ import java.util.List; public class MilestonesFragment extends Fragment { - public String state = "open"; private MilestonesViewModel milestonesViewModel; private FragmentMilestonesBinding viewBinding; private Menu menu; @@ -37,6 +40,7 @@ public class MilestonesFragment extends Fragment { private RepositoryContext repository; private String milestoneId; private int page = 1; + public String state = "open"; public static MilestonesFragment newInstance(RepositoryContext repository) { MilestonesFragment fragment = new MilestonesFragment(); @@ -44,15 +48,6 @@ public class MilestonesFragment extends Fragment { return fragment; } - private static int getMilestoneIndex(int milestoneId, List milestones) { - for(Milestone milestone : milestones) { - if(milestone.getId() == milestoneId) { - return milestones.indexOf(milestone); - } - } - return -1; - } - @Override public void onCreate(@Nullable Bundle savedInstanceState) { repository = RepositoryContext.fromBundle(requireArguments()); @@ -75,8 +70,6 @@ public class MilestonesFragment extends Fragment { dataList = new ArrayList<>(); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(viewBinding.recyclerView.getContext(), DividerItemDecoration.VERTICAL); - viewBinding.recyclerView.addItemDecoration(dividerItemDecoration); viewBinding.recyclerView.setHasFixedSize(true); viewBinding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); @@ -150,6 +143,15 @@ public class MilestonesFragment extends Fragment { }); } + private static int getMilestoneIndex(int milestoneId, List milestones) { + for(Milestone milestone : milestones) { + if(milestone.getId() == milestoneId) { + return milestones.indexOf(milestone); + } + } + return -1; + } + @Override public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { diff --git a/app/src/main/java/org/mian/gitnex/fragments/MostVisitedReposFragment.java b/app/src/main/java/org/mian/gitnex/fragments/MostVisitedReposFragment.java index 05ea4f02..0d09a0c9 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/MostVisitedReposFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/MostVisitedReposFragment.java @@ -5,15 +5,17 @@ import android.os.Bundle; import android.os.Handler; import android.os.Looper; 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.TextView; +import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; +import androidx.appcompat.widget.SearchView; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.mian.gitnex.R; import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.adapters.MostVisitedReposAdapter; @@ -22,8 +24,10 @@ import org.mian.gitnex.database.api.RepositoriesApi; import org.mian.gitnex.database.models.Repository; import org.mian.gitnex.databinding.FragmentDraftsBinding; import org.mian.gitnex.helpers.TinyDB; +import org.mian.gitnex.helpers.Toasty; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @author M M Arif @@ -31,19 +35,17 @@ import java.util.List; public class MostVisitedReposFragment extends Fragment { + private FragmentDraftsBinding fragmentDraftsBinding; private Context ctx; private MostVisitedReposAdapter adapter; - private RecyclerView mRecyclerView; private RepositoriesApi repositoriesApi; - private TextView noData; private List mostVisitedReposList; private int currentActiveAccountId; - private SwipeRefreshLayout swipeRefresh; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - FragmentDraftsBinding fragmentDraftsBinding = FragmentDraftsBinding.inflate(inflater, container, false); + fragmentDraftsBinding = FragmentDraftsBinding.inflate(inflater, container, false); ctx = getContext(); setHasOptionsMenu(true); @@ -55,19 +57,12 @@ public class MostVisitedReposFragment extends Fragment { mostVisitedReposList = new ArrayList<>(); repositoriesApi = BaseApi.getInstance(ctx, RepositoriesApi.class); - noData = fragmentDraftsBinding.noData; - mRecyclerView = fragmentDraftsBinding.recyclerView; - swipeRefresh = fragmentDraftsBinding.pullToRefresh; + fragmentDraftsBinding.recyclerView.setHasFixedSize(true); + fragmentDraftsBinding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); - mRecyclerView.setHasFixedSize(true); - mRecyclerView.setLayoutManager(new LinearLayoutManager(ctx)); - - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL); - mRecyclerView.addItemDecoration(dividerItemDecoration); - - adapter = new MostVisitedReposAdapter(mostVisitedReposList); + adapter = new MostVisitedReposAdapter(ctx, mostVisitedReposList); currentActiveAccountId = tinyDb.getInt("currentActiveAccountId"); - swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { + fragmentDraftsBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { mostVisitedReposList.clear(); fetchDataAsync(currentActiveAccountId); @@ -82,21 +77,101 @@ public class MostVisitedReposFragment extends Fragment { repositoriesApi.fetchAllMostVisited(accountId).observe(getViewLifecycleOwner(), mostVisitedRepos -> { - swipeRefresh.setRefreshing(false); + fragmentDraftsBinding.pullToRefresh.setRefreshing(false); assert mostVisitedRepos != null; if(mostVisitedRepos.size() > 0) { mostVisitedReposList.clear(); - noData.setVisibility(View.GONE); + fragmentDraftsBinding.noData.setVisibility(View.GONE); mostVisitedReposList.addAll(mostVisitedRepos); adapter.notifyDataChanged(); - mRecyclerView.setAdapter(adapter); + fragmentDraftsBinding.recyclerView.setAdapter(adapter); } else { - noData.setVisibility(View.VISIBLE); + fragmentDraftsBinding.noData.setVisibility(View.VISIBLE); } }); } + public void resetAllRepositoryCounter(int accountId) { + + if(mostVisitedReposList.size() > 0) { + + Objects.requireNonNull(BaseApi.getInstance(ctx, RepositoriesApi.class)).resetAllRepositoryMostVisited(accountId); + mostVisitedReposList.clear(); + adapter.notifyDataChanged(); + Toasty.success(ctx, getResources().getString(R.string.resetMostReposCounter)); + } + else { + Toasty.warning(ctx, getResources().getString(R.string.noDataFound)); + } + } + + @Override + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { + + inflater.inflate(R.menu.reset_menu, menu); + inflater.inflate(R.menu.search_menu, menu); + super.onCreateOptionsMenu(menu, inflater); + + MenuItem searchItem = menu.findItem(R.id.action_search); + SearchView searchView = (SearchView) searchItem.getActionView(); + searchView.setImeOptions(EditorInfo.IME_ACTION_DONE); + + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + + @Override + public boolean onQueryTextSubmit(String query) { + + return false; + } + + @Override + public boolean onQueryTextChange(String newText) { + + filter(newText); + return false; + } + }); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + + if(item.getItemId() == R.id.reset_menu_item) { + + if(mostVisitedReposList.size() == 0) { + Toasty.warning(ctx, getResources().getString(R.string.noDataFound)); + } + else { + new MaterialAlertDialogBuilder(ctx).setTitle(R.string.reset).setMessage(R.string.resetCounterAllDialogMessage).setPositiveButton(R.string.reset, (dialog, which) -> { + + resetAllRepositoryCounter(currentActiveAccountId); + dialog.dismiss(); + }).setNeutralButton(R.string.cancelButton, null).show(); + } + } + + return super.onOptionsItemSelected(item); + } + + private void filter(String text) { + + List arr = new ArrayList<>(); + + for(Repository d : mostVisitedReposList) { + + if(d == null || d.getRepositoryOwner() == null || d.getRepositoryName() == null) { + continue; + } + + if(d.getRepositoryOwner().toLowerCase().contains(text) || d.getRepositoryName().toLowerCase().contains(text)) { + arr.add(d); + } + } + + adapter.updateList(arr); + } + } diff --git a/app/src/main/java/org/mian/gitnex/fragments/MyIssuesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/MyIssuesFragment.java index f7f85bf8..896e6dba 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/MyIssuesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/MyIssuesFragment.java @@ -3,12 +3,16 @@ package org.mian.gitnex.fragments; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.view.*; +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.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.mian.gitnex.R; import org.mian.gitnex.activities.MainActivity; @@ -22,13 +26,13 @@ import org.mian.gitnex.viewmodels.IssuesViewModel; public class MyIssuesFragment extends Fragment { - public String state = "open"; - public boolean assignedToMe = false; private IssuesViewModel issuesViewModel; private FragmentIssuesBinding fragmentIssuesBinding; private ExploreIssuesAdapter adapter; private int page = 1; private Menu menu; + public String state = "open"; + public boolean assignedToMe = false; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -39,8 +43,6 @@ public class MyIssuesFragment extends Fragment { fragmentIssuesBinding.recyclerView.setHasFixedSize(true); fragmentIssuesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(fragmentIssuesBinding.recyclerView.getContext(), DividerItemDecoration.VERTICAL); - fragmentIssuesBinding.recyclerView.addItemDecoration(dividerItemDecoration); ((MainActivity) requireActivity()).setFragmentRefreshListenerMyIssues(myIssues -> { @@ -73,6 +75,8 @@ public class MyIssuesFragment extends Fragment { return fragmentIssuesBinding.getRoot(); } + ; + private void fetchDataAsync(String query, String state, boolean assignedToMe) { issuesViewModel.getIssuesList(query, "issues", true, state, assignedToMe, getContext()).observe(getViewLifecycleOwner(), issuesListMain -> { diff --git a/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java index 04b3ba47..5f8e5e03 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java @@ -7,11 +7,9 @@ import android.os.Looper; import android.view.*; import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import org.mian.gitnex.R; import org.mian.gitnex.activities.BaseActivity; import org.mian.gitnex.activities.CreateRepoActivity; @@ -19,7 +17,6 @@ import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.adapters.ReposListAdapter; import org.mian.gitnex.databinding.FragmentRepositoriesBinding; import org.mian.gitnex.helpers.Constants; -import org.mian.gitnex.helpers.DividerItemDecorator; import org.mian.gitnex.viewmodels.RepositoriesViewModel; /** @@ -54,10 +51,7 @@ public class MyRepositoriesFragment extends Fragment { fragmentRepositoriesBinding.recyclerView.setHasFixedSize(true); fragmentRepositoriesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(requireContext(), R.drawable.shape_list_divider)); - fragmentRepositoriesBinding.recyclerView.addItemDecoration(dividerItemDecoration); - - fragmentRepositoriesBinding.recyclerView.setPadding(0, 0, 0, 240); + fragmentRepositoriesBinding.recyclerView.setPadding(0, 0, 0, 220); fragmentRepositoriesBinding.recyclerView.setClipToPadding(false); fragmentRepositoriesBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { diff --git a/app/src/main/java/org/mian/gitnex/fragments/NotificationsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/NotificationsFragment.java index a67d147f..9a72645d 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/NotificationsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/NotificationsFragment.java @@ -8,7 +8,6 @@ import android.view.*; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import org.apache.commons.lang3.StringUtils; @@ -71,12 +70,9 @@ public class NotificationsFragment extends Fragment implements NotificationsAdap LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(viewBinding.notifications.getContext(), DividerItemDecoration.VERTICAL); - viewBinding.notifications.setHasFixedSize(true); viewBinding.notifications.setLayoutManager(linearLayoutManager); viewBinding.notifications.setAdapter(notificationsAdapter); - viewBinding.notifications.addItemDecoration(dividerItemDecoration); viewBinding.notifications.addOnScrollListener(new RecyclerView.OnScrollListener() { diff --git a/app/src/main/java/org/mian/gitnex/fragments/OrganizationLabelsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/OrganizationLabelsFragment.java index 7464579c..beea83aa 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/OrganizationLabelsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationLabelsFragment.java @@ -11,7 +11,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; @@ -26,13 +25,14 @@ import org.mian.gitnex.viewmodels.OrganizationLabelsViewModel; public class OrganizationLabelsFragment extends Fragment { - private static final String repoOwnerF = "param1"; - private final String type = "org"; private OrganizationLabelsViewModel organizationLabelsViewModel; private ProgressBar mProgressBar; private RecyclerView mRecyclerView; private LabelsAdapter adapter; private TextView noData; + private static final String repoOwnerF = "param1"; + private final String type = "org"; + private String repoOwner; public static OrganizationLabelsFragment newInstance(String param1) { @@ -69,9 +69,6 @@ public class OrganizationLabelsFragment extends Fragment { mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL); - mRecyclerView.addItemDecoration(dividerItemDecoration); - mProgressBar = fragmentLabelsBinding.progressBar; swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { diff --git a/app/src/main/java/org/mian/gitnex/fragments/MembersByOrgFragment.java b/app/src/main/java/org/mian/gitnex/fragments/OrganizationMembersFragment.java similarity index 78% rename from app/src/main/java/org/mian/gitnex/fragments/MembersByOrgFragment.java rename to app/src/main/java/org/mian/gitnex/fragments/OrganizationMembersFragment.java index c829b10d..4138e3e0 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/MembersByOrgFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationMembersFragment.java @@ -1,7 +1,12 @@ package org.mian.gitnex.fragments; import android.os.Bundle; -import android.view.*; +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.view.inputmethod.EditorInfo; import android.widget.GridView; import android.widget.ProgressBar; @@ -11,7 +16,7 @@ import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import org.mian.gitnex.R; import org.mian.gitnex.adapters.UserGridAdapter; -import org.mian.gitnex.databinding.FragmentMembersByOrgBinding; +import org.mian.gitnex.databinding.FragmentOrganizationMembersBinding; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.viewmodels.MembersByOrgViewModel; @@ -19,20 +24,20 @@ import org.mian.gitnex.viewmodels.MembersByOrgViewModel; * @author M M Arif */ -public class MembersByOrgFragment extends Fragment { +public class OrganizationMembersFragment extends Fragment { - private static final String orgNameF = "param2"; private TextView noDataMembers; + private static String orgNameF = "param2"; private String orgName; private UserGridAdapter adapter; private GridView mGridView; private ProgressBar progressBar; - public MembersByOrgFragment() { + public OrganizationMembersFragment() { } - public static MembersByOrgFragment newInstance(String param1) { - MembersByOrgFragment fragment = new MembersByOrgFragment(); + public static OrganizationMembersFragment newInstance(String param1) { + OrganizationMembersFragment fragment = new OrganizationMembersFragment(); Bundle args = new Bundle(); args.putString(orgNameF, param1); fragment.setArguments(args); @@ -48,9 +53,9 @@ public class MembersByOrgFragment extends Fragment { } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - FragmentMembersByOrgBinding fragmentMembersByOrgBinding = FragmentMembersByOrgBinding.inflate(inflater, container, false); + FragmentOrganizationMembersBinding fragmentMembersByOrgBinding = FragmentOrganizationMembersBinding.inflate(inflater, container, false); setHasOptionsMenu(true); noDataMembers = fragmentMembersByOrgBinding.noDataMembers; @@ -102,7 +107,6 @@ public class MembersByOrgFragment extends Fragment { } searchView.setOnQueryTextListener(new androidx.appcompat.widget.SearchView.OnQueryTextListener() { - @Override public boolean onQueryTextSubmit(String query) { return false; diff --git a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesByOrgFragment.java b/app/src/main/java/org/mian/gitnex/fragments/OrganizationRepositoriesFragment.java similarity index 88% rename from app/src/main/java/org/mian/gitnex/fragments/RepositoriesByOrgFragment.java rename to app/src/main/java/org/mian/gitnex/fragments/OrganizationRepositoriesFragment.java index c7ba4899..d1689a37 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesByOrgFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationRepositoriesFragment.java @@ -3,12 +3,16 @@ package org.mian.gitnex.fragments; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.view.*; +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.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.mian.gitnex.R; import org.mian.gitnex.activities.MainActivity; @@ -21,21 +25,21 @@ import org.mian.gitnex.viewmodels.RepositoriesViewModel; * @author M M Arif */ -public class RepositoriesByOrgFragment extends Fragment { +public class OrganizationRepositoriesFragment extends Fragment { - private static final String getOrgName = null; private RepositoriesViewModel repositoriesViewModel; private FragmentRepositoriesBinding fragmentRepositoriesBinding; private ReposListAdapter adapter; private int page = 1; private int resultLimit; + private static final String getOrgName = null; private String orgName; - public RepositoriesByOrgFragment() { + public OrganizationRepositoriesFragment() { } - public static RepositoriesByOrgFragment newInstance(String orgName) { - RepositoriesByOrgFragment fragment = new RepositoriesByOrgFragment(); + public static OrganizationRepositoriesFragment newInstance(String orgName) { + OrganizationRepositoriesFragment fragment = new OrganizationRepositoriesFragment(); Bundle args = new Bundle(); args.putString(getOrgName, orgName); fragment.setArguments(args); @@ -63,8 +67,6 @@ public class RepositoriesByOrgFragment extends Fragment { fragmentRepositoriesBinding.recyclerView.setHasFixedSize(true); fragmentRepositoriesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(fragmentRepositoriesBinding.recyclerView.getContext(), DividerItemDecoration.VERTICAL); - fragmentRepositoriesBinding.recyclerView.addItemDecoration(dividerItemDecoration); fragmentRepositoriesBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { @@ -80,6 +82,8 @@ public class RepositoriesByOrgFragment extends Fragment { return fragmentRepositoriesBinding.getRoot(); } + ; + private void fetchDataAsync() { repositoriesViewModel.getRepositories(page, resultLimit, "", "org", orgName, getContext()).observe(getViewLifecycleOwner(), reposListMain -> { @@ -140,7 +144,6 @@ public class RepositoriesByOrgFragment extends Fragment { searchView.setImeOptions(EditorInfo.IME_ACTION_DONE); searchView.setOnQueryTextListener(new androidx.appcompat.widget.SearchView.OnQueryTextListener() { - @Override public boolean onQueryTextSubmit(String query) { return false; diff --git a/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamInfoReposFragment.java b/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamInfoReposFragment.java index ef14528c..7ac646b7 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamInfoReposFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamInfoReposFragment.java @@ -6,18 +6,15 @@ import android.os.Looper; import android.view.*; import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import org.gitnex.tea4j.v2.models.Team; import org.mian.gitnex.R; import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.adapters.ReposListAdapter; import org.mian.gitnex.databinding.FragmentRepositoriesBinding; import org.mian.gitnex.helpers.Constants; -import org.mian.gitnex.helpers.DividerItemDecorator; import org.mian.gitnex.viewmodels.RepositoriesViewModel; /** @@ -61,9 +58,6 @@ public class OrganizationTeamInfoReposFragment extends Fragment { fragmentRepositoriesBinding.recyclerView.setHasFixedSize(true); fragmentRepositoriesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(requireContext(), R.drawable.shape_list_divider)); - fragmentRepositoriesBinding.recyclerView.addItemDecoration(dividerItemDecoration); - fragmentRepositoriesBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { page = 1; diff --git a/app/src/main/java/org/mian/gitnex/fragments/TeamsByOrgFragment.java b/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamsFragment.java similarity index 81% rename from app/src/main/java/org/mian/gitnex/fragments/TeamsByOrgFragment.java rename to app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamsFragment.java index b79257df..68965adf 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/TeamsByOrgFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamsFragment.java @@ -3,44 +3,49 @@ package org.mian.gitnex.fragments; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.view.*; +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.view.inputmethod.EditorInfo; import android.widget.ProgressBar; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import org.gitnex.tea4j.v2.models.OrganizationPermissions; import org.mian.gitnex.R; -import org.mian.gitnex.adapters.TeamsByOrgAdapter; -import org.mian.gitnex.databinding.FragmentTeamsByOrgBinding; +import org.mian.gitnex.adapters.OrganizationTeamsAdapter; +import org.mian.gitnex.databinding.FragmentOrganizationTeamsBinding; import org.mian.gitnex.viewmodels.TeamsByOrgViewModel; /** * @author M M Arif */ -public class TeamsByOrgFragment extends Fragment { +public class OrganizationTeamsFragment extends Fragment { - private static final String orgNameF = "param2"; - public static boolean resumeTeams = false; private TeamsByOrgViewModel teamsByOrgViewModel; + public static boolean resumeTeams = false; + private ProgressBar mProgressBar; private RecyclerView mRecyclerView; private TextView noDataTeams; + private static final String orgNameF = "param2"; private String orgName; private OrganizationPermissions permissions; - private TeamsByOrgAdapter adapter; + private OrganizationTeamsAdapter adapter; - public TeamsByOrgFragment() { + public OrganizationTeamsFragment() { } - public static TeamsByOrgFragment newInstance(String param1, OrganizationPermissions permissions) { - TeamsByOrgFragment fragment = new TeamsByOrgFragment(); + public static OrganizationTeamsFragment newInstance(String param1, OrganizationPermissions permissions) { + OrganizationTeamsFragment fragment = new OrganizationTeamsFragment(); Bundle args = new Bundle(); args.putString(orgNameF, param1); args.putSerializable("permissions", permissions); @@ -60,7 +65,7 @@ public class TeamsByOrgFragment extends Fragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - FragmentTeamsByOrgBinding fragmentTeamsByOrgBinding = FragmentTeamsByOrgBinding.inflate(inflater, container, false); + FragmentOrganizationTeamsBinding fragmentTeamsByOrgBinding = FragmentOrganizationTeamsBinding.inflate(inflater, container, false); setHasOptionsMenu(true); teamsByOrgViewModel = new ViewModelProvider(this).get(TeamsByOrgViewModel.class); @@ -72,9 +77,6 @@ public class TeamsByOrgFragment extends Fragment { mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL); - mRecyclerView.addItemDecoration(dividerItemDecoration); - mProgressBar = fragmentTeamsByOrgBinding.progressBar; swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { @@ -101,7 +103,7 @@ public class TeamsByOrgFragment extends Fragment { private void fetchDataAsync(String owner) { teamsByOrgViewModel.getTeamsByOrg(owner, getContext(), noDataTeams, mProgressBar).observe(getViewLifecycleOwner(), orgTeamsListMain -> { - adapter = new TeamsByOrgAdapter(getContext(), orgTeamsListMain, permissions, orgName); + adapter = new OrganizationTeamsAdapter(getContext(), orgTeamsListMain, permissions, orgName); if(adapter.getItemCount() > 0) { mRecyclerView.setAdapter(adapter); noDataTeams.setVisibility(View.GONE); @@ -127,7 +129,6 @@ public class TeamsByOrgFragment extends Fragment { searchView.setImeOptions(EditorInfo.IME_ACTION_DONE); searchView.setOnQueryTextListener(new androidx.appcompat.widget.SearchView.OnQueryTextListener() { - @Override public boolean onQueryTextSubmit(String query) { return false; diff --git a/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java index a0573802..5ef737b2 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java @@ -7,18 +7,15 @@ import android.os.Looper; import android.view.*; import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import org.mian.gitnex.R; import org.mian.gitnex.activities.CreateOrganizationActivity; import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.adapters.OrganizationsListAdapter; import org.mian.gitnex.databinding.FragmentOrganizationsBinding; import org.mian.gitnex.helpers.Constants; -import org.mian.gitnex.helpers.DividerItemDecorator; import org.mian.gitnex.viewmodels.OrganizationsViewModel; /** @@ -53,10 +50,7 @@ public class OrganizationsFragment extends Fragment { fragmentOrganizationsBinding.recyclerView.setHasFixedSize(true); fragmentOrganizationsBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(requireContext(), R.drawable.shape_list_divider)); - fragmentOrganizationsBinding.recyclerView.addItemDecoration(dividerItemDecoration); - - fragmentOrganizationsBinding.recyclerView.setPadding(0, 0, 0, 240); + fragmentOrganizationsBinding.recyclerView.setPadding(0, 0, 0, 220); fragmentOrganizationsBinding.recyclerView.setClipToPadding(false); fragmentOrganizationsBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { diff --git a/app/src/main/java/org/mian/gitnex/fragments/PullRequestsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/PullRequestsFragment.java index 1c41b2b2..13262dcf 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/PullRequestsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/PullRequestsFragment.java @@ -10,7 +10,6 @@ import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import org.gitnex.tea4j.v2.models.PullRequest; @@ -82,9 +81,7 @@ public class PullRequestsFragment extends Fragment { })); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(fragmentPullRequestsBinding.recyclerView.getContext(), DividerItemDecoration.VERTICAL); fragmentPullRequestsBinding.recyclerView.setHasFixedSize(true); - fragmentPullRequestsBinding.recyclerView.addItemDecoration(dividerItemDecoration); fragmentPullRequestsBinding.recyclerView.setLayoutManager(new LinearLayoutManager(context)); fragmentPullRequestsBinding.recyclerView.setAdapter(adapter); diff --git a/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java index 223d9398..8076ca70 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java @@ -8,14 +8,17 @@ import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.view.*; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.core.app.NotificationCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.auth.ApiKeyAuth; import org.gitnex.tea4j.v2.models.Release; @@ -41,7 +44,11 @@ import java.util.Objects; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.X509TrustManager; -import okhttp3.*; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; /** * @author M M Arif @@ -49,65 +56,6 @@ import okhttp3.*; public class ReleasesFragment extends Fragment { - public static String currentDownloadUrl = null; - ActivityResultLauncher downloadLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { - - if(result.getResultCode() == Activity.RESULT_OK && result.getData() != null) { - - try { - - NotificationCompat.Builder builder = new NotificationCompat.Builder(requireContext(), requireContext().getPackageName()).setContentTitle(getString(R.string.fileViewerNotificationTitleStarted)) - .setContentText(getString(R.string.fileViewerNotificationDescriptionStarted, Uri.parse(currentDownloadUrl).getLastPathSegment())).setSmallIcon(R.drawable.gitnex_transparent) - .setPriority(NotificationCompat.PRIORITY_LOW).setChannelId(Constants.downloadNotificationChannelId).setOngoing(true); - - int notificationId = Notifications.uniqueNotificationId(requireContext()); - - NotificationManager notificationManager = (NotificationManager) requireContext().getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(notificationId, builder.build()); - - SSLContext sslContext = SSLContext.getInstance("TLS"); - MemorizingTrustManager memorizingTrustManager = new MemorizingTrustManager(requireContext()); - sslContext.init(null, new X509TrustManager[]{memorizingTrustManager}, new SecureRandom()); - - ApiKeyAuth auth = new ApiKeyAuth("header", "Authorization"); - auth.setApiKey(((BaseActivity) requireActivity()).getAccount().getWebAuthorization()); - OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(auth).sslSocketFactory(sslContext.getSocketFactory(), memorizingTrustManager) - .hostnameVerifier(memorizingTrustManager.wrapHostnameVerifier(HttpsURLConnection.getDefaultHostnameVerifier())).build(); - - okHttpClient.newCall(new Request.Builder().url(currentDownloadUrl).build()).enqueue(new Callback() { - - @Override - public void onFailure(@NonNull Call call, @NonNull IOException e) { - - builder.setContentTitle(getString(R.string.fileViewerNotificationTitleFailed)) - .setContentText(getString(R.string.fileViewerNotificationDescriptionFailed, Uri.parse(currentDownloadUrl).getLastPathSegment())).setOngoing(false); - notificationManager.notify(notificationId, builder.build()); - } - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { - - if(!response.isSuccessful() || response.body() == null) { - onFailure(call, new IOException()); - return; - } - - OutputStream outputStream = requireContext().getContentResolver().openOutputStream(result.getData().getData()); - - AppUtil.copyProgress(Objects.requireNonNull(response.body()).byteStream(), outputStream, 0, p -> { - }); - builder.setContentTitle(getString(R.string.fileViewerNotificationTitleFinished)) - .setContentText(getString(R.string.fileViewerNotificationDescriptionFinished, Uri.parse(currentDownloadUrl).getLastPathSegment())).setOngoing(false); - notificationManager.notify(notificationId, builder.build()); - } - }); - } - catch(NoSuchAlgorithmException | KeyManagementException e) { - throw new RuntimeException(e); - } - } - - }); private ReleasesViewModel releasesViewModel; private ReleasesAdapter adapter; private TagsAdapter tagsAdapter; @@ -117,6 +65,8 @@ public class ReleasesFragment extends Fragment { private int page = 1; private int pageReleases = 1; + public static String currentDownloadUrl = null; + public ReleasesFragment() { } @@ -126,15 +76,6 @@ public class ReleasesFragment extends Fragment { return fragment; } - private static int getReleaseIndex(String tag, List releases) { - for(Release release : releases) { - if(release.getTagName().equals(tag)) { - return releases.indexOf(release); - } - } - return -1; - } - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -150,8 +91,6 @@ public class ReleasesFragment extends Fragment { fragmentReleasesBinding.recyclerView.setHasFixedSize(true); fragmentReleasesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(fragmentReleasesBinding.recyclerView.getContext(), DividerItemDecoration.VERTICAL); - fragmentReleasesBinding.recyclerView.addItemDecoration(dividerItemDecoration); fragmentReleasesBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { @@ -260,6 +199,15 @@ public class ReleasesFragment extends Fragment { } + private static int getReleaseIndex(String tag, List releases) { + for(Release release : releases) { + if(release.getTagName().equals(tag)) { + return releases.indexOf(release); + } + } + return -1; + } + @Override public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { if(!((BaseActivity) requireActivity()).getAccount().requiresVersion("1.15.0")) { @@ -279,4 +227,63 @@ public class ReleasesFragment extends Fragment { downloadLauncher.launch(intent); } + ActivityResultLauncher downloadLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + + if(result.getResultCode() == Activity.RESULT_OK && result.getData() != null) { + + try { + + NotificationCompat.Builder builder = new NotificationCompat.Builder(requireContext(), requireContext().getPackageName()).setContentTitle(getString(R.string.fileViewerNotificationTitleStarted)) + .setContentText(getString(R.string.fileViewerNotificationDescriptionStarted, Uri.parse(currentDownloadUrl).getLastPathSegment())).setSmallIcon(R.drawable.gitnex_transparent) + .setPriority(NotificationCompat.PRIORITY_LOW).setChannelId(Constants.downloadNotificationChannelId).setOngoing(true); + + int notificationId = Notifications.uniqueNotificationId(requireContext()); + + NotificationManager notificationManager = (NotificationManager) requireContext().getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(notificationId, builder.build()); + + SSLContext sslContext = SSLContext.getInstance("TLS"); + MemorizingTrustManager memorizingTrustManager = new MemorizingTrustManager(requireContext()); + sslContext.init(null, new X509TrustManager[]{memorizingTrustManager}, new SecureRandom()); + + ApiKeyAuth auth = new ApiKeyAuth("header", "Authorization"); + auth.setApiKey(((BaseActivity) requireActivity()).getAccount().getWebAuthorization()); + OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(auth).sslSocketFactory(sslContext.getSocketFactory(), memorizingTrustManager) + .hostnameVerifier(memorizingTrustManager.wrapHostnameVerifier(HttpsURLConnection.getDefaultHostnameVerifier())).build(); + + okHttpClient.newCall(new Request.Builder().url(currentDownloadUrl).build()).enqueue(new Callback() { + + @Override + public void onFailure(@NonNull Call call, @NonNull IOException e) { + + builder.setContentTitle(getString(R.string.fileViewerNotificationTitleFailed)) + .setContentText(getString(R.string.fileViewerNotificationDescriptionFailed, Uri.parse(currentDownloadUrl).getLastPathSegment())).setOngoing(false); + notificationManager.notify(notificationId, builder.build()); + } + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + + if(!response.isSuccessful() || response.body() == null) { + onFailure(call, new IOException()); + return; + } + + OutputStream outputStream = requireContext().getContentResolver().openOutputStream(result.getData().getData()); + + AppUtil.copyProgress(Objects.requireNonNull(response.body()).byteStream(), outputStream, 0, p -> { + }); + builder.setContentTitle(getString(R.string.fileViewerNotificationTitleFinished)) + .setContentText(getString(R.string.fileViewerNotificationDescriptionFinished, Uri.parse(currentDownloadUrl).getLastPathSegment())).setOngoing(false); + notificationManager.notify(notificationId, builder.build()); + } + }); + } + catch(NoSuchAlgorithmException | KeyManagementException e) { + throw new RuntimeException(e); + } + } + + }); + } diff --git a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java index d9a183e0..cbac8fb8 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java @@ -7,18 +7,15 @@ import android.os.Looper; import android.view.*; import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import org.mian.gitnex.R; import org.mian.gitnex.activities.CreateRepoActivity; import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.adapters.ReposListAdapter; import org.mian.gitnex.databinding.FragmentRepositoriesBinding; import org.mian.gitnex.helpers.Constants; -import org.mian.gitnex.helpers.DividerItemDecorator; import org.mian.gitnex.viewmodels.RepositoriesViewModel; /** @@ -51,10 +48,7 @@ public class RepositoriesFragment extends Fragment { fragmentRepositoriesBinding.recyclerView.setHasFixedSize(true); fragmentRepositoriesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(requireContext(), R.drawable.shape_list_divider)); - fragmentRepositoriesBinding.recyclerView.addItemDecoration(dividerItemDecoration); - - fragmentRepositoriesBinding.recyclerView.setPadding(0, 0, 0, 240); + fragmentRepositoriesBinding.recyclerView.setPadding(0, 0, 0, 220); fragmentRepositoriesBinding.recyclerView.setClipToPadding(false); fragmentRepositoriesBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { diff --git a/app/src/main/java/org/mian/gitnex/fragments/StarredRepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/StarredRepositoriesFragment.java index d2e3e00a..64d216af 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/StarredRepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/StarredRepositoriesFragment.java @@ -7,18 +7,15 @@ import android.os.Looper; import android.view.*; import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import org.mian.gitnex.R; import org.mian.gitnex.activities.CreateRepoActivity; import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.adapters.ReposListAdapter; import org.mian.gitnex.databinding.FragmentRepositoriesBinding; import org.mian.gitnex.helpers.Constants; -import org.mian.gitnex.helpers.DividerItemDecorator; import org.mian.gitnex.viewmodels.RepositoriesViewModel; /** @@ -51,10 +48,7 @@ public class StarredRepositoriesFragment extends Fragment { fragmentRepositoriesBinding.recyclerView.setHasFixedSize(true); fragmentRepositoriesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(requireContext(), R.drawable.shape_list_divider)); - fragmentRepositoriesBinding.recyclerView.addItemDecoration(dividerItemDecoration); - - fragmentRepositoriesBinding.recyclerView.setPadding(0, 0, 0, 240); + fragmentRepositoriesBinding.recyclerView.setPadding(0, 0, 0, 220); fragmentRepositoriesBinding.recyclerView.setClipToPadding(false); fragmentRepositoriesBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { diff --git a/app/src/main/java/org/mian/gitnex/fragments/WikiFragment.java b/app/src/main/java/org/mian/gitnex/fragments/WikiFragment.java index 83a0fc39..93dba59f 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/WikiFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/WikiFragment.java @@ -7,16 +7,12 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import org.mian.gitnex.R; import org.mian.gitnex.adapters.WikiListAdapter; import org.mian.gitnex.databinding.FragmentWikiBinding; import org.mian.gitnex.helpers.Constants; -import org.mian.gitnex.helpers.DividerItemDecorator; import org.mian.gitnex.helpers.contexts.RepositoryContext; import org.mian.gitnex.viewmodels.WikiViewModel; @@ -60,9 +56,6 @@ public class WikiFragment extends Fragment { fragmentWikiBinding.recyclerView.setHasFixedSize(true); fragmentWikiBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(requireContext(), R.drawable.shape_list_divider)); - fragmentWikiBinding.recyclerView.addItemDecoration(dividerItemDecoration); - fragmentWikiBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { page = 1; diff --git a/app/src/main/java/org/mian/gitnex/fragments/profile/FollowersFragment.java b/app/src/main/java/org/mian/gitnex/fragments/profile/FollowersFragment.java index e57ff285..ec99d70d 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/profile/FollowersFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/profile/FollowersFragment.java @@ -9,7 +9,6 @@ import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.User; import org.mian.gitnex.R; @@ -85,9 +84,7 @@ public class FollowersFragment extends Fragment { } })); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, DividerItemDecoration.VERTICAL); fragmentProfileFollowersFollowingBinding.recyclerView.setHasFixedSize(true); - fragmentProfileFollowersFollowingBinding.recyclerView.addItemDecoration(dividerItemDecoration); fragmentProfileFollowersFollowingBinding.recyclerView.setLayoutManager(new LinearLayoutManager(context)); fragmentProfileFollowersFollowingBinding.recyclerView.setAdapter(adapter); diff --git a/app/src/main/java/org/mian/gitnex/fragments/profile/FollowingFragment.java b/app/src/main/java/org/mian/gitnex/fragments/profile/FollowingFragment.java index 69c669b2..b910b89e 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/profile/FollowingFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/profile/FollowingFragment.java @@ -9,7 +9,6 @@ import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.User; import org.mian.gitnex.R; @@ -85,9 +84,7 @@ public class FollowingFragment extends Fragment { } })); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, DividerItemDecoration.VERTICAL); fragmentProfileFollowersFollowingBinding.recyclerView.setHasFixedSize(true); - fragmentProfileFollowersFollowingBinding.recyclerView.addItemDecoration(dividerItemDecoration); fragmentProfileFollowersFollowingBinding.recyclerView.setLayoutManager(new LinearLayoutManager(context)); fragmentProfileFollowersFollowingBinding.recyclerView.setAdapter(adapter); diff --git a/app/src/main/java/org/mian/gitnex/fragments/profile/OrganizationsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/profile/OrganizationsFragment.java index 1a513f46..4d4f3524 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/profile/OrganizationsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/profile/OrganizationsFragment.java @@ -9,7 +9,6 @@ import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.Organization; import org.mian.gitnex.R; @@ -93,9 +92,7 @@ public class OrganizationsFragment extends Fragment { } }); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, DividerItemDecoration.VERTICAL); fragmentOrganizationsBinding.recyclerView.setHasFixedSize(true); - fragmentOrganizationsBinding.recyclerView.addItemDecoration(dividerItemDecoration); fragmentOrganizationsBinding.recyclerView.setLayoutManager(new LinearLayoutManager(context)); fragmentOrganizationsBinding.recyclerView.setAdapter(adapter); diff --git a/app/src/main/java/org/mian/gitnex/fragments/profile/RepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/profile/RepositoriesFragment.java index c9da233f..fc2e93c0 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/profile/RepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/profile/RepositoriesFragment.java @@ -9,7 +9,6 @@ import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.Repository; import org.mian.gitnex.R; @@ -99,9 +98,7 @@ public class RepositoriesFragment extends Fragment { } }); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, DividerItemDecoration.VERTICAL); fragmentRepositoriesBinding.recyclerView.setHasFixedSize(true); - fragmentRepositoriesBinding.recyclerView.addItemDecoration(dividerItemDecoration); fragmentRepositoriesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(context)); fragmentRepositoriesBinding.recyclerView.setAdapter(adapter); diff --git a/app/src/main/java/org/mian/gitnex/fragments/profile/StarredRepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/profile/StarredRepositoriesFragment.java index 71f4e159..dd900df8 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/profile/StarredRepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/profile/StarredRepositoriesFragment.java @@ -9,7 +9,6 @@ import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.Repository; import org.mian.gitnex.R; @@ -98,9 +97,7 @@ public class StarredRepositoriesFragment extends Fragment { } }); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context, DividerItemDecoration.VERTICAL); fragmentRepositoriesBinding.recyclerView.setHasFixedSize(true); - fragmentRepositoriesBinding.recyclerView.addItemDecoration(dividerItemDecoration); fragmentRepositoriesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(context)); fragmentRepositoriesBinding.recyclerView.setAdapter(adapter); diff --git a/app/src/main/java/org/mian/gitnex/helpers/DividerItemDecorator.java b/app/src/main/java/org/mian/gitnex/helpers/DividerItemDecorator.java deleted file mode 100644 index d54563a6..00000000 --- a/app/src/main/java/org/mian/gitnex/helpers/DividerItemDecorator.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.mian.gitnex.helpers; - -import android.graphics.Canvas; -import android.graphics.drawable.Drawable; -import android.view.View; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -/** - * @author M M Arif - */ - -public class DividerItemDecorator extends RecyclerView.ItemDecoration { - - private final Drawable rvDivider; - - public DividerItemDecorator(Drawable divider) { - rvDivider = divider; - } - - @Override - public void onDrawOver(@NonNull Canvas canvas, RecyclerView parent, @NonNull RecyclerView.State state) { - - int dividerLeft = parent.getPaddingLeft(); - int dividerRight = parent.getWidth() - parent.getPaddingRight(); - - int childCount = parent.getChildCount(); - for(int i = 0; i <= childCount - 2; i++) { - View child = parent.getChildAt(i); - - RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); - - int dividerTop = child.getBottom() + params.bottomMargin; - int dividerBottom = dividerTop + rvDivider.getIntrinsicHeight(); - - rvDivider.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom); - rvDivider.draw(canvas); - } - } - -} diff --git a/app/src/main/java/org/mian/gitnex/helpers/codeeditor/CustomCodeViewAdapter.java b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/CustomCodeViewAdapter.java index f8d3bed7..22c26e42 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/codeeditor/CustomCodeViewAdapter.java +++ b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/CustomCodeViewAdapter.java @@ -4,12 +4,10 @@ import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import com.amrdeveloper.codeview.Code; import com.amrdeveloper.codeview.CodeViewAdapter; -import com.amrdeveloper.codeview.Snippet; import org.mian.gitnex.R; import java.util.List; @@ -33,17 +31,16 @@ public class CustomCodeViewAdapter extends CodeViewAdapter { convertView = layoutInflater.inflate(R.layout.list_items_autocomplete, parent, false); } - ImageView codeType = convertView.findViewById(R.id.code_type); + //ImageView codeType = convertView.findViewById(R.id.code_type); TextView codeTitle = convertView.findViewById(R.id.code_title); Code currentCode = (Code) getItem(position); if(currentCode != null) { codeTitle.setText(currentCode.getCodeTitle()); - if(currentCode instanceof Snippet) { - codeType.setImageResource(R.drawable.ic_snippet); - } - else { - codeType.setImageResource(R.drawable.ic_keyword); - } + /*if (currentCode instanceof Snippet) { + //codeType.setImageResource(R.drawable.ic_snippet); + } else { + //codeType.setImageResource(R.drawable.ic_keyword); + }*/ } return convertView; diff --git a/app/src/main/java/org/mian/gitnex/helpers/codeeditor/LanguageManager.java b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/LanguageManager.java index 76b6d373..d37915b0 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/codeeditor/LanguageManager.java +++ b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/LanguageManager.java @@ -4,9 +4,11 @@ import android.content.Context; import com.amrdeveloper.codeview.Code; import com.amrdeveloper.codeview.CodeView; import org.mian.gitnex.helpers.codeeditor.languages.GoLanguage; +import org.mian.gitnex.helpers.codeeditor.languages.HtmlLanguage; import org.mian.gitnex.helpers.codeeditor.languages.JavaLanguage; import org.mian.gitnex.helpers.codeeditor.languages.PhpLanguage; import org.mian.gitnex.helpers.codeeditor.languages.PythonLanguage; +import org.mian.gitnex.helpers.codeeditor.languages.XmlLanguage; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -44,6 +46,10 @@ public class LanguageManager { return GoLanguage.getKeywords(context); case PHP: return PhpLanguage.getKeywords(context); + case XML: + return XmlLanguage.getKeywords(context); + case HTML: + return HtmlLanguage.getKeywords(context); default: return new String[]{}; } @@ -59,6 +65,10 @@ public class LanguageManager { return GoLanguage.getCodeList(context); case PHP: return PhpLanguage.getCodeList(context); + case XML: + return XmlLanguage.getCodeList(context); + case HTML: + return HtmlLanguage.getCodeList(context); default: return new ArrayList<>(); } @@ -74,6 +84,10 @@ public class LanguageManager { return GoLanguage.getIndentationStarts(); case PHP: return PhpLanguage.getIndentationStarts(); + case XML: + return XmlLanguage.getIndentationStarts(); + case HTML: + return HtmlLanguage.getIndentationStarts(); default: return new HashSet<>(); } @@ -89,6 +103,10 @@ public class LanguageManager { return GoLanguage.getIndentationEnds(); case PHP: return PhpLanguage.getIndentationEnds(); + case XML: + return XmlLanguage.getIndentationEnds(); + case HTML: + return HtmlLanguage.getIndentationEnds(); default: return new HashSet<>(); } @@ -108,6 +126,12 @@ public class LanguageManager { case PHP: PhpLanguage.applyFiveColorsDarkTheme(context, codeView); break; + case XML: + XmlLanguage.applyFiveColorsDarkTheme(context, codeView); + break; + case HTML: + HtmlLanguage.applyFiveColorsDarkTheme(context, codeView); + break; } } diff --git a/app/src/main/java/org/mian/gitnex/helpers/codeeditor/LanguageName.java b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/LanguageName.java index ac7ba22b..eba0fd96 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/codeeditor/LanguageName.java +++ b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/LanguageName.java @@ -10,5 +10,7 @@ public enum LanguageName { JAVA, // java PY, // python with py extension GO, // go lang - PHP // php + PHP, // php + XML, // xml + HTML // html } diff --git a/app/src/main/java/org/mian/gitnex/helpers/codeeditor/SourcePositionListener.java b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/SourcePositionListener.java index 090cdb36..325854a4 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/codeeditor/SourcePositionListener.java +++ b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/SourcePositionListener.java @@ -12,35 +12,6 @@ import android.widget.EditText; public class SourcePositionListener { - private final EditText editText; - private OnPositionChanged onPositionChanged; - private final View.AccessibilityDelegate viewAccessibility = new View.AccessibilityDelegate() { - - @Override - public void sendAccessibilityEvent(View host, int eventType) { - super.sendAccessibilityEvent(host, eventType); - if(eventType == AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED && onPositionChanged != null) { - int selectionStart = editText.getSelectionStart(); - Layout layout = editText.getLayout(); - if(layout == null) { - return; - } - int line = editText.getLayout().getLineForOffset(selectionStart); - int column = selectionStart - editText.getLayout().getLineStart(line); - onPositionChanged.onPositionChange(line + 1, column + 1); - } - } - }; - - public SourcePositionListener(EditText editText) { - this.editText = editText; - editText.setAccessibilityDelegate(viewAccessibility); - } - - public void setOnPositionChanged(OnPositionChanged listener) { - onPositionChanged = listener; - } - @FunctionalInterface public interface OnPositionChanged { @@ -48,4 +19,31 @@ public class SourcePositionListener { } + private OnPositionChanged onPositionChanged; + + public SourcePositionListener(EditText editText) { + View.AccessibilityDelegate viewAccessibility = new View.AccessibilityDelegate() { + + @Override + public void sendAccessibilityEvent(View host, int eventType) { + super.sendAccessibilityEvent(host, eventType); + if(eventType == AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED && onPositionChanged != null) { + int selectionStart = editText.getSelectionStart(); + Layout layout = editText.getLayout(); + if(layout == null) { + return; + } + int line = editText.getLayout().getLineForOffset(selectionStart); + int column = selectionStart - editText.getLayout().getLineStart(line); + onPositionChanged.onPositionChange(line + 1, column + 1); + } + } + }; + editText.setAccessibilityDelegate(viewAccessibility); + } + + public void setOnPositionChanged(OnPositionChanged listener) { + onPositionChanged = listener; + } + } diff --git a/app/src/main/java/org/mian/gitnex/helpers/codeeditor/languages/HtmlLanguage.java b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/languages/HtmlLanguage.java new file mode 100644 index 00000000..cd419f5f --- /dev/null +++ b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/languages/HtmlLanguage.java @@ -0,0 +1,98 @@ +package org.mian.gitnex.helpers.codeeditor.languages; + +import android.content.Context; +import android.content.res.Resources; +import com.amrdeveloper.codeview.Code; +import com.amrdeveloper.codeview.CodeView; +import com.amrdeveloper.codeview.Keyword; +import org.mian.gitnex.R; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.regex.Pattern; + +/** + * @author M M Arif + */ + +public class HtmlLanguage { + + //Language Keywords + private static final Pattern PATTERN_KEYWORDS = Pattern.compile( + "\\b(]{}()]"); + + //Data + private static final Pattern PATTERN_NUMBERS = Pattern.compile("\\b(\\d*[.]?\\d+)\\b"); + private static final Pattern PATTERN_CHAR = Pattern.compile("['](.*?)[']"); + private static final Pattern PATTERN_STRING = Pattern.compile("[\"](.*?)[\"]"); + private static final Pattern PATTERN_HEX = Pattern.compile("0x[0-9a-fA-F]+"); + private static final Pattern PATTERN_SINGLE_LINE_COMMENT = Pattern.compile("//[^\\n]*"); + private static final Pattern PATTERN_MULTI_LINE_COMMENT = Pattern.compile("/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/"); + private static final Pattern PATTERN_ATTRIBUTE = Pattern.compile("\\.[a-zA-Z0-9_]+"); + private static final Pattern PATTERN_OPERATION = Pattern.compile(":|==|>|<|!=|>=|<=|->|=|>|<|%|-|-=|%=|\\+|\\-|\\-=|\\+=|\\^|\\&|\\|::|\\?|\\*"); + + public static void applyFiveColorsDarkTheme(Context context, CodeView codeView) { + codeView.resetSyntaxPatternList(); + codeView.resetHighlighter(); + + Resources resources = context.getResources(); + + //View Background + codeView.setBackgroundColor(resources.getColor(R.color.five_dark_black, null)); + + //Syntax Colors + codeView.addSyntaxPattern(PATTERN_HEX, resources.getColor(R.color.five_dark_purple, null)); + codeView.addSyntaxPattern(PATTERN_CHAR, resources.getColor(R.color.five_dark_yellow, null)); + codeView.addSyntaxPattern(PATTERN_STRING, resources.getColor(R.color.five_dark_yellow, null)); + codeView.addSyntaxPattern(PATTERN_NUMBERS, resources.getColor(R.color.five_dark_purple, null)); + codeView.addSyntaxPattern(PATTERN_KEYWORDS, resources.getColor(R.color.five_dark_purple, null)); + codeView.addSyntaxPattern(PATTERN_BUILTINS, resources.getColor(R.color.five_dark_white, null)); + codeView.addSyntaxPattern(PATTERN_SINGLE_LINE_COMMENT, resources.getColor(R.color.five_dark_grey, null)); + codeView.addSyntaxPattern(PATTERN_MULTI_LINE_COMMENT, resources.getColor(R.color.five_dark_grey, null)); + codeView.addSyntaxPattern(PATTERN_ATTRIBUTE, resources.getColor(R.color.five_dark_blue, null)); + codeView.addSyntaxPattern(PATTERN_OPERATION, resources.getColor(R.color.five_dark_purple, null)); + + //Default Color + codeView.setTextColor(resources.getColor(R.color.five_dark_white, null)); + + codeView.reHighlightSyntax(); + } + + public static String[] getKeywords(Context context) { + return context.getResources().getStringArray(R.array.html_keywords); + } + + public static List getCodeList(Context context) { + List codeList = new ArrayList<>(); + String[] keywords = getKeywords(context); + for(String keyword : keywords) { + codeList.add(new Keyword(keyword)); + } + return codeList; + } + + public static Set getIndentationStarts() { + Set characterSet = new HashSet<>(); + characterSet.add('{'); + return characterSet; + } + + public static Set getIndentationEnds() { + Set characterSet = new HashSet<>(); + characterSet.add('}'); + return characterSet; + } + + public static String getCommentStart() { + return "//"; + } + + public static String getCommentEnd() { + return ""; + } + +} diff --git a/app/src/main/java/org/mian/gitnex/helpers/codeeditor/languages/PhpLanguage.java b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/languages/PhpLanguage.java index 3145024b..131bdbd4 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/codeeditor/languages/PhpLanguage.java +++ b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/languages/PhpLanguage.java @@ -20,7 +20,7 @@ public class PhpLanguage { //Language Keywords private static final Pattern PATTERN_KEYWORDS = Pattern.compile( - "\\b(php|__construct|var_dump|define|echo|var|float|" + "int|bool|false|true|function|private|public|protected|interface|return|copy|struct|abstract|extends|" + "trait|static|namespace|implements|__set|__get|unlink|this|try|catch|Throwable|Exception|pdo|" + "str_replace|form|date|abs|min|max|strtotime|mktime|" + "foreach|require_once|include_once|hash|array|range|break|continue|preg_match|preg_match_all|preg_replace|" + "throw|new|and|or|if|else|elseif|switch|case|default|match|require|include|goto|do|while|for|map|)\\b"); + "\\b(]{}()]"); diff --git a/app/src/main/java/org/mian/gitnex/helpers/codeeditor/languages/XmlLanguage.java b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/languages/XmlLanguage.java new file mode 100644 index 00000000..8e762847 --- /dev/null +++ b/app/src/main/java/org/mian/gitnex/helpers/codeeditor/languages/XmlLanguage.java @@ -0,0 +1,97 @@ +package org.mian.gitnex.helpers.codeeditor.languages; + +import android.content.Context; +import android.content.res.Resources; +import com.amrdeveloper.codeview.Code; +import com.amrdeveloper.codeview.CodeView; +import com.amrdeveloper.codeview.Keyword; +import org.mian.gitnex.R; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.regex.Pattern; + +/** + * @author M M Arif + */ + +public class XmlLanguage { + + //Language Keywords + private static final Pattern PATTERN_KEYWORDS = Pattern.compile("\\b(]{}()]"); + + //Data + private static final Pattern PATTERN_NUMBERS = Pattern.compile("\\b(\\d*[.]?\\d+)\\b"); + private static final Pattern PATTERN_CHAR = Pattern.compile("['](.*?)[']"); + private static final Pattern PATTERN_STRING = Pattern.compile("[\"](.*?)[\"]"); + private static final Pattern PATTERN_HEX = Pattern.compile("0x[0-9a-fA-F]+"); + private static final Pattern PATTERN_SINGLE_LINE_COMMENT = Pattern.compile("//[^\\n]*"); + private static final Pattern PATTERN_MULTI_LINE_COMMENT = Pattern.compile("/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/"); + private static final Pattern PATTERN_ATTRIBUTE = Pattern.compile("\\.[a-zA-Z0-9_]+"); + private static final Pattern PATTERN_OPERATION = Pattern.compile(":|==|>|<|!=|>=|<=|->|=|>|<|%|-|-=|%=|\\+|\\-|\\-=|\\+=|\\^|\\&|\\|::|\\?|\\*"); + + public static void applyFiveColorsDarkTheme(Context context, CodeView codeView) { + codeView.resetSyntaxPatternList(); + codeView.resetHighlighter(); + + Resources resources = context.getResources(); + + //View Background + codeView.setBackgroundColor(resources.getColor(R.color.five_dark_black, null)); + + //Syntax Colors + codeView.addSyntaxPattern(PATTERN_HEX, resources.getColor(R.color.five_dark_purple, null)); + codeView.addSyntaxPattern(PATTERN_CHAR, resources.getColor(R.color.five_dark_yellow, null)); + codeView.addSyntaxPattern(PATTERN_STRING, resources.getColor(R.color.five_dark_yellow, null)); + codeView.addSyntaxPattern(PATTERN_NUMBERS, resources.getColor(R.color.five_dark_purple, null)); + codeView.addSyntaxPattern(PATTERN_KEYWORDS, resources.getColor(R.color.five_dark_purple, null)); + codeView.addSyntaxPattern(PATTERN_BUILTINS, resources.getColor(R.color.five_dark_white, null)); + codeView.addSyntaxPattern(PATTERN_SINGLE_LINE_COMMENT, resources.getColor(R.color.five_dark_grey, null)); + codeView.addSyntaxPattern(PATTERN_MULTI_LINE_COMMENT, resources.getColor(R.color.five_dark_grey, null)); + codeView.addSyntaxPattern(PATTERN_ATTRIBUTE, resources.getColor(R.color.five_dark_blue, null)); + codeView.addSyntaxPattern(PATTERN_OPERATION, resources.getColor(R.color.five_dark_purple, null)); + + //Default Color + codeView.setTextColor(resources.getColor(R.color.five_dark_white, null)); + + codeView.reHighlightSyntax(); + } + + public static String[] getKeywords(Context context) { + return context.getResources().getStringArray(R.array.xml_keywords); + } + + public static List getCodeList(Context context) { + List codeList = new ArrayList<>(); + String[] keywords = getKeywords(context); + for(String keyword : keywords) { + codeList.add(new Keyword(keyword)); + } + return codeList; + } + + public static Set getIndentationStarts() { + Set characterSet = new HashSet<>(); + characterSet.add('{'); + return characterSet; + } + + public static Set getIndentationEnds() { + Set characterSet = new HashSet<>(); + characterSet.add('}'); + return characterSet; + } + + public static String getCommentStart() { + return "//"; + } + + public static String getCommentEnd() { + return ""; + } + +} diff --git a/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingTrustManager.java b/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingTrustManager.java index 7f0609b4..fc2fd5ad 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingTrustManager.java +++ b/app/src/main/java/org/mian/gitnex/helpers/ssl/MemorizingTrustManager.java @@ -21,13 +21,23 @@ import java.security.KeyStore; import java.security.KeyStoreException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.security.cert.*; +import java.security.cert.CertPathValidatorException; +import java.security.cert.Certificate; +import java.security.cert.CertificateEncodingException; +import java.security.cert.CertificateException; +import java.security.cert.CertificateExpiredException; +import java.security.cert.CertificateParsingException; +import java.security.cert.X509Certificate; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Enumeration; import java.util.List; import java.util.Locale; -import javax.net.ssl.*; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.TrustManagerFactory; +import javax.net.ssl.X509TrustManager; /** * @author Georg Lukas, modified by opyale diff --git a/app/src/main/res/drawable/ic_keyword.xml b/app/src/main/res/drawable/ic_keyword.xml deleted file mode 100644 index 784817cf..00000000 --- a/app/src/main/res/drawable/ic_keyword.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_reset.xml b/app/src/main/res/drawable/ic_reset.xml new file mode 100644 index 00000000..409ba9b1 --- /dev/null +++ b/app/src/main/res/drawable/ic_reset.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/shape_archived.xml b/app/src/main/res/drawable/shape_archived.xml index 5deb42d8..ed571792 100644 --- a/app/src/main/res/drawable/shape_archived.xml +++ b/app/src/main/res/drawable/shape_archived.xml @@ -2,7 +2,7 @@ - + diff --git a/app/src/main/res/drawable/shape_list_divider.xml b/app/src/main/res/drawable/shape_list_divider.xml deleted file mode 100644 index ad91908a..00000000 --- a/app/src/main/res/drawable/shape_list_divider.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/app/src/main/res/layout/activity_add_collaborator_to_repository.xml b/app/src/main/res/layout/activity_add_collaborator_to_repository.xml index 285da350..b78ccd4b 100644 --- a/app/src/main/res/layout/activity_add_collaborator_to_repository.xml +++ b/app/src/main/res/layout/activity_add_collaborator_to_repository.xml @@ -1,17 +1,17 @@ - + xmlns:app="http://schemas.android.com/apk/res-auto" + android:orientation="vertical" + xmlns:android="http://schemas.android.com/apk/res/android" + android:background="?attr/primaryBackgroundColor"> + app:elevation="@dimen/dimen0dp" + android:theme="@style/Widget.AppCompat.SearchView"> @@ -48,10 +48,10 @@ @@ -59,36 +59,36 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="@dimen/dimen10dp" - android:layout_marginTop="@dimen/dimen10dp" android:layout_marginEnd="@dimen/dimen10dp" + android:layout_marginTop="@dimen/dimen10dp" android:layout_marginBottom="@dimen/dimen10dp"> + android:hint="@string/addCollaboratorSearchHint"> @@ -106,15 +106,17 @@ android:textSize="@dimen/dimen20sp" android:visibility="gone"/> - + android:padding="@dimen/dimen8dp"> + + + + diff --git a/app/src/main/res/layout/activity_add_new_team_member.xml b/app/src/main/res/layout/activity_add_new_team_member.xml index b6723e26..43a88518 100644 --- a/app/src/main/res/layout/activity_add_new_team_member.xml +++ b/app/src/main/res/layout/activity_add_new_team_member.xml @@ -1,17 +1,17 @@ - + xmlns:app="http://schemas.android.com/apk/res-auto" + android:orientation="vertical" + xmlns:android="http://schemas.android.com/apk/res/android" + android:background="?attr/primaryBackgroundColor"> + app:elevation="@dimen/dimen0dp" + android:theme="@style/Widget.AppCompat.SearchView"> @@ -48,46 +48,46 @@ + android:hint="@string/addCollaboratorSearchHint"> @@ -105,15 +105,17 @@ android:textSize="@dimen/dimen20sp" android:visibility="gone"/> - + android:padding="@dimen/dimen8dp"> + + + + diff --git a/app/src/main/res/layout/activity_admin_cron_tasks.xml b/app/src/main/res/layout/activity_admin_cron_tasks.xml index 53d06a27..2d8da196 100644 --- a/app/src/main/res/layout/activity_admin_cron_tasks.xml +++ b/app/src/main/res/layout/activity_admin_cron_tasks.xml @@ -1,18 +1,17 @@ + app:elevation="@dimen/dimen0dp" + android:theme="@style/Widget.AppCompat.SearchView"> + + + + + + + + + + - - - - - - + xmlns:app="http://schemas.android.com/apk/res-auto" + android:orientation="vertical" + android:background="?attr/primaryBackgroundColor"> + + + + + + + + + + + app:elevation="@dimen/dimen0dp" + android:theme="@style/Widget.AppCompat.SearchView"> - - - - - - + android:layout_marginTop="@dimen/dimen56dp" + android:layout_height="wrap_content"> - + android:padding="@dimen/dimen8dp"> + + + + diff --git a/app/src/main/res/layout/activity_issue_detail.xml b/app/src/main/res/layout/activity_issue_detail.xml index 66b03b5c..57202ab2 100644 --- a/app/src/main/res/layout/activity_issue_detail.xml +++ b/app/src/main/res/layout/activity_issue_detail.xml @@ -1,19 +1,19 @@ + android:orientation="vertical" + android:background="?attr/primaryBackgroundColor"> + app:elevation="@dimen/dimen0dp" + android:theme="@style/Widget.AppCompat.SearchView"> + android:visibility="gone" + android:contentDescription="@string/generalImgContentText"/> + android:id="@+id/toolbar_title"/> @@ -46,31 +46,31 @@ + android:backgroundTint="?attr/fabColor" + android:layout_gravity="bottom|end" + app:iconTint="@color/colorWhite" + app:icon="@drawable/ic_reply"/> + android:layout_marginTop="@dimen/dimen56dp" + android:layout_height="match_parent"> + android:layout_height="wrap_content" + android:padding="@dimen/dimen8dp"> - - - - - - - - - + style="?attr/materialCardViewFilledStyle" + android:layout_marginBottom="@dimen/dimen4dp" + app:cardElevation="@dimen/dimen0dp"> - + android:orientation="vertical" + android:padding="@dimen/dimen16dp"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + android:id="@+id/labelsScrollView" + android:layout_alignParentEnd="false" + android:foregroundGravity="right" + android:scrollbarThumbHorizontal="@android:color/transparent" + android:fillViewport="true"> - + + + + + + android:id="@+id/issueTimeFrame" + android:layout_below="@+id/labelsScrollView" + android:orientation="horizontal" + android:layout_marginTop="@dimen/dimen10dp"> - + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:layout_below="@+id/mainThreadCard"> + android:paddingBottom="@dimen/dimen72dp" + android:clipToPadding="false"/> - + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 12feb57f..c45abe2b 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -3,10 +3,10 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".activities.MainActivity" + android:id="@+id/drawer_layout" tools:openDrawer="start"> + android:elevation="@dimen/dimen0dp"> + android:id="@+id/toolbar_title"/> @@ -42,11 +42,12 @@ diff --git a/app/src/main/res/layout/activity_repo_forks.xml b/app/src/main/res/layout/activity_repo_forks.xml index eee49c72..7deee354 100644 --- a/app/src/main/res/layout/activity_repo_forks.xml +++ b/app/src/main/res/layout/activity_repo_forks.xml @@ -55,12 +55,18 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/dimen56dp"> - + android:padding="@dimen/dimen8dp"> + + + + diff --git a/app/src/main/res/layout/activity_repo_stargazers.xml b/app/src/main/res/layout/activity_repo_stargazers.xml index 573c01fd..dfd7ede0 100644 --- a/app/src/main/res/layout/activity_repo_stargazers.xml +++ b/app/src/main/res/layout/activity_repo_stargazers.xml @@ -1,9 +1,9 @@ @@ -11,8 +11,8 @@ android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" - android:theme="@style/Widget.AppCompat.SearchView" - app:elevation="@dimen/dimen0dp"> + app:elevation="@dimen/dimen0dp" + android:theme="@style/Widget.AppCompat.SearchView"> @@ -48,21 +48,20 @@ + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen4dp"/> @@ -11,8 +11,8 @@ android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" - android:theme="@style/Widget.AppCompat.SearchView" - app:elevation="@dimen/dimen0dp"> + app:elevation="@dimen/dimen0dp" + android:theme="@style/Widget.AppCompat.SearchView"> @@ -48,21 +48,20 @@ + android:padding="@dimen/dimen4dp" + android:scrollbars="none" + android:numColumns="2" + android:gravity="center"/> - + android:weightSum="100" + android:orientation="horizontal"> - + + + + + + + + + + android:textSize="@dimen/dimen12sp" /> diff --git a/app/src/main/res/layout/activity_settings_drafts.xml b/app/src/main/res/layout/activity_settings_drafts.xml index 9af483de..42a1dc8b 100644 --- a/app/src/main/res/layout/activity_settings_drafts.xml +++ b/app/src/main/res/layout/activity_settings_drafts.xml @@ -57,34 +57,47 @@ android:orientation="horizontal" android:padding="@dimen/dimen16dp"> - + android:weightSum="100" + android:orientation="horizontal"> - + + + + + + + + + diff --git a/app/src/main/res/layout/activity_settings_notifications.xml b/app/src/main/res/layout/activity_settings_notifications.xml index 225ea67b..a8a79d4e 100644 --- a/app/src/main/res/layout/activity_settings_notifications.xml +++ b/app/src/main/res/layout/activity_settings_notifications.xml @@ -50,38 +50,44 @@ - - + android:layout_height="wrap_content" + android:layout_weight="10" + android:gravity="center_vertical|end" + android:orientation="horizontal"> - + + + + + - - + android:layout_height="wrap_content" + android:layout_weight="10" + android:gravity="center_vertical|end" + android:orientation="horizontal"> - + + + + + diff --git a/app/src/main/res/layout/add_new_team_repository.xml b/app/src/main/res/layout/add_new_team_repository.xml index 5115e813..92fbc697 100644 --- a/app/src/main/res/layout/add_new_team_repository.xml +++ b/app/src/main/res/layout/add_new_team_repository.xml @@ -1,17 +1,16 @@ - + xmlns:app="http://schemas.android.com/apk/res-auto" + android:orientation="vertical" + xmlns:android="http://schemas.android.com/apk/res/android"> + app:elevation="@dimen/dimen0dp" + android:theme="@style/Widget.AppCompat.SearchView"> @@ -48,11 +47,11 @@ - + android:padding="@dimen/dimen8dp"> + + + + diff --git a/app/src/main/res/layout/custom_user_accounts_dialog.xml b/app/src/main/res/layout/custom_user_accounts_dialog.xml index 539f9705..3348de33 100644 --- a/app/src/main/res/layout/custom_user_accounts_dialog.xml +++ b/app/src/main/res/layout/custom_user_accounts_dialog.xml @@ -1,23 +1,23 @@ - + android:padding="@dimen/dimen16dp"> + android:layout_height="match_parent" /> @@ -25,7 +25,7 @@ android:id="@+id/divider" android:layout_width="match_parent" android:layout_height="1dp" - android:background="?attr/dividerColor"/> + android:background="?attr/dividerColor" /> + android:textStyle="bold" /> - diff --git a/app/src/main/res/layout/fragment_collaborators.xml b/app/src/main/res/layout/fragment_collaborators.xml index a8f149d0..d70a8446 100644 --- a/app/src/main/res/layout/fragment_collaborators.xml +++ b/app/src/main/res/layout/fragment_collaborators.xml @@ -1,28 +1,27 @@ + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen4dp"/> + android:textSize="@dimen/dimen18sp"/> @@ -52,10 +52,10 @@ - - - - - + style="?attr/materialCardViewFilledStyle" + android:layout_marginBottom="@dimen/dimen4dp" + app:cardElevation="@dimen/dimen0dp"> + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="vertical"> - + + + + + android:orientation="horizontal"> - - - - - + + + + + + + + + + + app:drawableLeftCompat="@drawable/ic_commit" + tools:text="357f3qd5s"/> - - - - + diff --git a/app/src/main/res/layout/fragment_diff_files.xml b/app/src/main/res/layout/fragment_diff_files.xml index f1abb70f..381b7176 100644 --- a/app/src/main/res/layout/fragment_diff_files.xml +++ b/app/src/main/res/layout/fragment_diff_files.xml @@ -1,9 +1,9 @@ + android:layout_height="match_parent"> - + android:padding="@dimen/dimen8dp"> + + + + diff --git a/app/src/main/res/layout/fragment_drafts.xml b/app/src/main/res/layout/fragment_drafts.xml index ef3c2042..e0ccca10 100644 --- a/app/src/main/res/layout/fragment_drafts.xml +++ b/app/src/main/res/layout/fragment_drafts.xml @@ -1,33 +1,39 @@ - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="wrap_content"> - + + + + + diff --git a/app/src/main/res/layout/fragment_explore_repo.xml b/app/src/main/res/layout/fragment_explore_repo.xml index e5657ebd..d08ecee9 100644 --- a/app/src/main/res/layout/fragment_explore_repo.xml +++ b/app/src/main/res/layout/fragment_explore_repo.xml @@ -1,17 +1,17 @@ - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="match_parent"> - + + + + + diff --git a/app/src/main/res/layout/fragment_explore_users.xml b/app/src/main/res/layout/fragment_explore_users.xml index acc5fd11..a3b9443b 100644 --- a/app/src/main/res/layout/fragment_explore_users.xml +++ b/app/src/main/res/layout/fragment_explore_users.xml @@ -1,17 +1,17 @@ - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="match_parent"> - + + + + + diff --git a/app/src/main/res/layout/fragment_files.xml b/app/src/main/res/layout/fragment_files.xml index c68bfe3c..d56022e1 100644 --- a/app/src/main/res/layout/fragment_files.xml +++ b/app/src/main/res/layout/fragment_files.xml @@ -15,29 +15,53 @@ android:visibility="gone" tools:visibility="visible"> - + style="?attr/materialCardViewFilledStyle" + android:layout_margin="@dimen/dimen8dp" + app:cardElevation="@dimen/dimen0dp"> - - - + android:layout_height="wrap_content" + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_issues.xml b/app/src/main/res/layout/fragment_issues.xml index d72961f3..876098a4 100644 --- a/app/src/main/res/layout/fragment_issues.xml +++ b/app/src/main/res/layout/fragment_issues.xml @@ -1,31 +1,37 @@ - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="wrap_content"> - + + + + + diff --git a/app/src/main/res/layout/fragment_labels.xml b/app/src/main/res/layout/fragment_labels.xml index 1123336c..eda8d014 100644 --- a/app/src/main/res/layout/fragment_labels.xml +++ b/app/src/main/res/layout/fragment_labels.xml @@ -1,31 +1,37 @@ - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="wrap_content"> - + + + + + - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="wrap_content"> - + + + + + - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="match_parent"> - + + + + + + app:icon="@drawable/ic_done"/> diff --git a/app/src/main/res/layout/fragment_organization_info.xml b/app/src/main/res/layout/fragment_organization_info.xml index d67951c4..7bc182f8 100644 --- a/app/src/main/res/layout/fragment_organization_info.xml +++ b/app/src/main/res/layout/fragment_organization_info.xml @@ -1,165 +1,183 @@ + android:layout_height="match_parent" + android:padding="@dimen/dimen8dp"> + android:layout_width="match_parent" + android:layout_height="match_parent"> - - - - - - - - - - - - - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - - + android:orientation="vertical" + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor"> + android:orientation="vertical" + android:padding="@dimen/dimen16dp" + android:visibility="gone" + tools:visibility="visible"> + + + + + + - - + + - - - - - - - - - - - - + + + android:layout_marginBottom="@dimen/dimen20dp" + android:orientation="horizontal" + android:paddingLeft="@dimen/dimen12dp" + android:paddingRight="@dimen/dimen12dp"> + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/app/src/main/res/layout/fragment_members_by_org.xml b/app/src/main/res/layout/fragment_organization_members.xml similarity index 75% rename from app/src/main/res/layout/fragment_members_by_org.xml rename to app/src/main/res/layout/fragment_organization_members.xml index 89066076..837cc30c 100644 --- a/app/src/main/res/layout/fragment_members_by_org.xml +++ b/app/src/main/res/layout/fragment_organization_members.xml @@ -1,28 +1,33 @@ - + android:padding="@dimen/dimen4dp"> + + + + - + android:padding="@dimen/dimen4dp"> + + + + - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="wrap_content"> - + + + + + + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto"> - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="wrap_content"> - + + + + + @@ -44,11 +50,11 @@ android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="16dp" - android:backgroundTint="?attr/fabColor" - android:contentDescription="@string/pageTitleCreateOrganization" android:text="@string/pageTitleCreateOrganization" + android:contentDescription="@string/pageTitleCreateOrganization" android:textColor="@color/colorWhite" - app:icon="@drawable/ic_add" - app:iconTint="@color/colorWhite"/> + android:backgroundTint="?attr/fabColor" + app:iconTint="@color/colorWhite" + app:icon="@drawable/ic_add"/> diff --git a/app/src/main/res/layout/fragment_profile.xml b/app/src/main/res/layout/fragment_profile.xml index f2990a2d..25569657 100644 --- a/app/src/main/res/layout/fragment_profile.xml +++ b/app/src/main/res/layout/fragment_profile.xml @@ -35,18 +35,18 @@ android:id="@+id/layoutFrameAccount" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/dimen8dp" android:gravity="center" android:orientation="vertical" + android:layout_marginTop="@dimen/dimen8dp" android:padding="@dimen/dimen16dp"> + app:cardElevation="@dimen/dimen0dp" + app:cardCornerRadius="@dimen/dimen32dp"> + style="@style/CustomMaterCardViewStyle" + app:cardBackgroundColor="?attr/primaryBackgroundColor" + app:strokeWidth="@dimen/dimen0dp" + app:strokeColor="?attr/colorPrimary"> + style="?attr/materialCardViewFilledStyle"> + android:layout_marginTop="@dimen/dimen16dp" + app:cardElevation="@dimen/dimen0dp" + app:cardCornerRadius="@dimen/dimen32dp"> + app:strokeColor="?attr/colorPrimary"> @@ -147,9 +148,9 @@ android:paddingEnd="@dimen/dimen16dp"> @@ -187,9 +188,9 @@ android:paddingEnd="@dimen/dimen16dp"> diff --git a/app/src/main/res/layout/fragment_profile_emails.xml b/app/src/main/res/layout/fragment_profile_emails.xml index b9da9b96..ed4d2bf2 100644 --- a/app/src/main/res/layout/fragment_profile_emails.xml +++ b/app/src/main/res/layout/fragment_profile_emails.xml @@ -1,28 +1,34 @@ + android:layout_height="wrap_content" + xmlns:app="http://schemas.android.com/apk/res-auto"> - + android:layout_height="match_parent" + android:padding="@dimen/dimen8dp"> - + android:layout_height="wrap_content"> - + + + + + + android:layout_height="wrap_content" + xmlns:app="http://schemas.android.com/apk/res-auto"> - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="wrap_content"> - + + + + + - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="wrap_content"> - + + + + + diff --git a/app/src/main/res/layout/fragment_releases.xml b/app/src/main/res/layout/fragment_releases.xml index 4cce780b..a4f34c85 100644 --- a/app/src/main/res/layout/fragment_releases.xml +++ b/app/src/main/res/layout/fragment_releases.xml @@ -1,31 +1,37 @@ - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="wrap_content"> - + + + + + + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto"> + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_height="wrap_content"> - - - - - - - - - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - - - - - - - - - - - - + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="vertical"> + + + + + + + + - - + android:orientation="horizontal"> - - - - - + android:textSize="@dimen/dimen22sp" + android:textStyle="bold"/> - - - - - + android:layout_marginBottom="@dimen/dimen6dp" + android:layout_marginStart="@dimen/dimen6dp" + android:layout_marginEnd="@dimen/dimen6dp" + android:text="/" + android:textSize="@dimen/dimen22sp" + android:textStyle="bold" + tools:ignore="HardcodedText"/> + android:layout_marginBottom="@dimen/dimen6dp" + android:textSize="@dimen/dimen22sp" + android:textStyle="bold"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:orientation="horizontal" + android:background="?android:attr/selectableItemBackground" + android:paddingTop="@dimen/dimen8dp" + android:paddingBottom="@dimen/dimen8dp" + android:paddingStart="@dimen/dimen16dp" + android:paddingEnd="@dimen/dimen16dp"> + + + + + + + + + app:srcCompat="@drawable/ic_download"/> - + + + + + + + + + + + + + android:contentDescription="@string/infoTabRepoCreatedAt" + app:srcCompat="@drawable/ic_calendar"/> + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + android:layout_marginBottom="@dimen/dimen20dp" + android:orientation="horizontal" + android:paddingStart="@dimen/dimen16dp" + android:paddingEnd="@dimen/dimen16dp"> - + - + - + - + - + - + + + android:layout_height="@dimen/dimen54dp" + android:layout_gravity="center_horizontal" + android:layout_marginTop="@dimen/dimen6dp" + android:layout_marginBottom="@dimen/dimen20dp" + android:text="@string/infoShowMoreInformation" + android:textColor="@color/btnTextColor"/> + - + - - - - - - - - - - - - - - - - + style="?attr/materialCardViewFilledStyle" + android:layout_marginTop="@dimen/dimen8dp" + app:cardElevation="@dimen/dimen0dp"> - - - - - - - - - + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="vertical"> - + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_repositories.xml b/app/src/main/res/layout/fragment_repositories.xml index 548c61b4..1f58c30b 100644 --- a/app/src/main/res/layout/fragment_repositories.xml +++ b/app/src/main/res/layout/fragment_repositories.xml @@ -1,32 +1,38 @@ - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="wrap_content"> - + + + + + + android:backgroundTint="?attr/fabColor" + app:iconTint="@color/colorWhite" + app:icon="@drawable/ic_add"/> diff --git a/app/src/main/res/layout/fragment_search_issues.xml b/app/src/main/res/layout/fragment_search_issues.xml index ec9fe43d..f8b639aa 100644 --- a/app/src/main/res/layout/fragment_search_issues.xml +++ b/app/src/main/res/layout/fragment_search_issues.xml @@ -1,17 +1,17 @@ - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="match_parent"> - + + + + + diff --git a/app/src/main/res/layout/fragment_wiki.xml b/app/src/main/res/layout/fragment_wiki.xml index b3996f12..d25b3f68 100644 --- a/app/src/main/res/layout/fragment_wiki.xml +++ b/app/src/main/res/layout/fragment_wiki.xml @@ -1,31 +1,37 @@ - + android:layout_height="match_parent" + android:background="?attr/primaryBackgroundColor" + android:padding="@dimen/dimen8dp"> - + android:layout_height="wrap_content"> - + + + + + - + xmlns:app="http://schemas.android.com/apk/res-auto" + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="horizontal"> - + - + - + - + + + + + + + + + diff --git a/app/src/main/res/layout/list_admin_unadopted_repos.xml b/app/src/main/res/layout/list_admin_unadopted_repos.xml index cd776e94..7250ee0f 100644 --- a/app/src/main/res/layout/list_admin_unadopted_repos.xml +++ b/app/src/main/res/layout/list_admin_unadopted_repos.xml @@ -1,17 +1,35 @@ - + xmlns:app="http://schemas.android.com/apk/res-auto" + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> + + + + + + + + diff --git a/app/src/main/res/layout/list_admin_users.xml b/app/src/main/res/layout/list_admin_users.xml index cafe7f30..b3e87921 100644 --- a/app/src/main/res/layout/list_admin_users.xml +++ b/app/src/main/res/layout/list_admin_users.xml @@ -1,81 +1,98 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - - - - - - - + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="horizontal"> - + - + - + - + - + - + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_collaborators.xml b/app/src/main/res/layout/list_collaborators.xml index 694b8cb1..1fe53c8d 100644 --- a/app/src/main/res/layout/list_collaborators.xml +++ b/app/src/main/res/layout/list_collaborators.xml @@ -4,37 +4,72 @@ android:id="@+id/gridViewData" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/primaryBackgroundColor" - android:orientation="vertical" - android:paddingStart="@dimen/dimen16dp" - android:paddingTop="@dimen/dimen16dp" - android:paddingEnd="@dimen/dimen16dp"> + android:padding="@dimen/dimen4dp" + android:orientation="vertical"> - + android:layout_height="wrap_content" + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + - - diff --git a/app/src/main/res/layout/list_collaborators_search.xml b/app/src/main/res/layout/list_collaborators_search.xml index 9e617a59..9fbea86c 100644 --- a/app/src/main/res/layout/list_collaborators_search.xml +++ b/app/src/main/res/layout/list_collaborators_search.xml @@ -1,94 +1,107 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - + android:layout_height="wrap_content" + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/list_commits.xml b/app/src/main/res/layout/list_commits.xml index b77bbc7c..8b37e041 100644 --- a/app/src/main/res/layout/list_commits.xml +++ b/app/src/main/res/layout/list_commits.xml @@ -4,87 +4,103 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?android:attr/selectableItemBackground" + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp" android:orientation="vertical"> - - - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="vertical"> - + + + android:orientation="horizontal"> - - - - - + + + + + + + + + + + + + + + android:textSize="@dimen/dimen12sp" + app:drawableLeftCompat="@drawable/ic_commit" + tools:text="357f3qd5s"/> - - - - + diff --git a/app/src/main/res/layout/list_diff_files.xml b/app/src/main/res/layout/list_diff_files.xml index f5a6f834..828f21b4 100644 --- a/app/src/main/res/layout/list_diff_files.xml +++ b/app/src/main/res/layout/list_diff_files.xml @@ -5,49 +5,67 @@ android:id="@+id/main_frame" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?android:attr/selectableItemBackground" android:gravity="center_vertical" android:orientation="horizontal" - android:padding="16dp"> + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - - - + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="horizontal"> - + - + - + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_drafts.xml b/app/src/main/res/layout/list_drafts.xml index 56bb4469..f94658e0 100644 --- a/app/src/main/res/layout/list_drafts.xml +++ b/app/src/main/res/layout/list_drafts.xml @@ -1,69 +1,86 @@ - + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="vertical"> - + - + - + - + - + - + + + + + + + + + diff --git a/app/src/main/res/layout/list_files.xml b/app/src/main/res/layout/list_files.xml index 1f7c760f..92b92d2f 100644 --- a/app/src/main/res/layout/list_files.xml +++ b/app/src/main/res/layout/list_files.xml @@ -1,69 +1,73 @@ + android:orientation="horizontal"> - - - - - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - + android:layout_marginEnd="@dimen/dimen16dp" + android:contentDescription="@string/generalImgContentText" + android:src="@drawable/ic_file"/> + + + + + + + + + + + + - - - + diff --git a/app/src/main/res/layout/list_issue_comments.xml b/app/src/main/res/layout/list_issue_comments.xml index 4149d63a..4d5333f8 100644 --- a/app/src/main/res/layout/list_issue_comments.xml +++ b/app/src/main/res/layout/list_issue_comments.xml @@ -4,91 +4,109 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/primaryBackgroundColor" android:orientation="vertical" - android:padding="16dp"> + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - - - - - - - + android:layout_height="wrap_content" + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - + android:layout_height="match_parent" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + android:layout_marginTop="12dp" + android:textColor="?attr/primaryTextColor" + android:textIsSelectable="true" + android:autoLink="web" + android:textColorLink="@color/lightBlue" + android:textSize="14sp"/> + + + - - - - - - - + diff --git a/app/src/main/res/layout/list_issues.xml b/app/src/main/res/layout/list_issues.xml index 928edd9b..c4d64de9 100644 --- a/app/src/main/res/layout/list_issues.xml +++ b/app/src/main/res/layout/list_issues.xml @@ -5,145 +5,162 @@ android:id="@+id/relativeLayoutFrameIssuesList" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?android:attr/selectableItemBackground" - android:focusable="true" - android:orientation="vertical" - android:padding="16dp"> + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp" + android:orientation="vertical"> - - - - - - - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - + android:orientation="horizontal" + tools:ignore="UseCompoundDrawables"> - + + + + + + + + + + + + + + + + + + + + + + android:orientation="horizontal" + android:layout_marginTop="10dp"/> - - - - - - - - - - - - - - - - - - - + android:orientation="horizontal"> + + + + + + + + + + + + - + diff --git a/app/src/main/res/layout/list_items_autocomplete.xml b/app/src/main/res/layout/list_items_autocomplete.xml index a5708696..a5564268 100644 --- a/app/src/main/res/layout/list_items_autocomplete.xml +++ b/app/src/main/res/layout/list_items_autocomplete.xml @@ -3,36 +3,17 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:background="@color/autocomplete_background"> - - - - - + android:background="?attr/primaryBackgroundColor"> + diff --git a/app/src/main/res/layout/list_labels.xml b/app/src/main/res/layout/list_labels.xml index 0419eeef..c54ddfff 100644 --- a/app/src/main/res/layout/list_labels.xml +++ b/app/src/main/res/layout/list_labels.xml @@ -6,63 +6,82 @@ android:layout_height="wrap_content" android:background="?attr/primaryBackgroundColor" android:orientation="horizontal" - android:padding="@dimen/dimen16dp"> + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - - - + style="?attr/materialCardViewFilledStyle" + app:cardCornerRadius="@dimen/dimen16dp" + app:cardElevation="@dimen/dimen0dp" + app:contentPaddingBottom="@dimen/dimen4dp" + app:contentPaddingLeft="@dimen/dimen12dp" + app:contentPaddingRight="@dimen/dimen12dp" + app:contentPaddingTop="@dimen/dimen4dp"> + + + + + + + + + + + + + + - - - - diff --git a/app/src/main/res/layout/list_milestones.xml b/app/src/main/res/layout/list_milestones.xml index 76aec62b..ec1e0abb 100644 --- a/app/src/main/res/layout/list_milestones.xml +++ b/app/src/main/res/layout/list_milestones.xml @@ -3,169 +3,177 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/milestoneFrame" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/primaryBackgroundColor" - android:orientation="vertical" - android:padding="16dp"> + android:id="@+id/milestoneFrame" + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="vertical"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:textSize="16sp"/> - + - + + + android:layout_marginTop="10dp" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/app/src/main/res/layout/list_most_visited_repos.xml b/app/src/main/res/layout/list_most_visited_repos.xml index 3950070d..c115c966 100644 --- a/app/src/main/res/layout/list_most_visited_repos.xml +++ b/app/src/main/res/layout/list_most_visited_repos.xml @@ -4,80 +4,117 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?android:attr/selectableItemBackground" - android:focusable="true" android:orientation="vertical" - android:padding="@dimen/dimen16dp"> + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - - - + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="vertical"> - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_notifications.xml b/app/src/main/res/layout/list_notifications.xml index b2a5cb6d..2e628f26 100644 --- a/app/src/main/res/layout/list_notifications.xml +++ b/app/src/main/res/layout/list_notifications.xml @@ -4,100 +4,105 @@ android:id="@+id/frame" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?android:attr/selectableItemBackground" - android:orientation="horizontal" - android:padding="16dp"> + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp" + android:orientation="horizontal"> - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - - - - - - + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="horizontal"> - + + + + + + + android:layout_weight="1" + android:orientation="vertical"> - + - + - - - - + - + android:layout_height="match_parent"> + + + + + + - - - + diff --git a/app/src/main/res/layout/list_members_by_org_preview.xml b/app/src/main/res/layout/list_organization_members_preview.xml similarity index 100% rename from app/src/main/res/layout/list_members_by_org_preview.xml rename to app/src/main/res/layout/list_organization_members_preview.xml diff --git a/app/src/main/res/layout/list_organization_teams.xml b/app/src/main/res/layout/list_organization_teams.xml new file mode 100644 index 00000000..ecbd6846 --- /dev/null +++ b/app/src/main/res/layout/list_organization_teams.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_organizations.xml b/app/src/main/res/layout/list_organizations.xml index 3d874cd7..e6764292 100644 --- a/app/src/main/res/layout/list_organizations.xml +++ b/app/src/main/res/layout/list_organizations.xml @@ -1,49 +1,67 @@ + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - - - + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="vertical"> - + - + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_pr.xml b/app/src/main/res/layout/list_pr.xml index 1acf6dd1..69029f8e 100644 --- a/app/src/main/res/layout/list_pr.xml +++ b/app/src/main/res/layout/list_pr.xml @@ -6,142 +6,158 @@ android:id="@+id/relativeLayoutFrame" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?android:attr/selectableItemBackground" - android:focusable="true" - android:orientation="vertical" - android:padding="16dp"> + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp" + android:orientation="vertical"> - - - - - - - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - - - + android:orientation="horizontal" + tools:ignore="UseCompoundDrawables"> + + + + + + + + + + + + + + + + + + + + + + + android:orientation="horizontal" + android:layout_marginTop="10dp"/> - - - - - - - - - - - - - - - - - - - + android:orientation="horizontal"> + + + + + + + + + + + + - + diff --git a/app/src/main/res/layout/list_profile_emails.xml b/app/src/main/res/layout/list_profile_emails.xml index d4d87f05..363cdc4f 100644 --- a/app/src/main/res/layout/list_profile_emails.xml +++ b/app/src/main/res/layout/list_profile_emails.xml @@ -1,29 +1,28 @@ + app:cardBackgroundColor="?attr/primaryBackgroundColor" + style="?attr/materialCardViewFilledStyle"> + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="horizontal"> + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - + android:layout_height="wrap_content" + app:cardElevation="@dimen/dimen0dp"> - - - - - - - - - - - - - - - - - - - - + android:background="?attr/materialCardBackgroundColor" + android:foreground="?android:attr/selectableItemBackground" + android:orientation="vertical" + android:padding="@dimen/dimen12dp"> + android:layout_weight="1" + android:singleLine="true" + android:textColor="?attr/primaryTextColor" + android:textSize="@dimen/dimen16sp" + android:textStyle="bold" /> + + + android:orientation="horizontal"> - - - + android:gravity="center_vertical" + android:orientation="horizontal" + tools:ignore="UseCompoundDrawables"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginTop="@dimen/dimen10dp" + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/app/src/main/res/layout/list_releases_downloads.xml b/app/src/main/res/layout/list_releases_downloads.xml index 6f8a14d0..6da620e6 100644 --- a/app/src/main/res/layout/list_releases_downloads.xml +++ b/app/src/main/res/layout/list_releases_downloads.xml @@ -4,25 +4,25 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="8dp" - android:layout_marginTop="8dp" android:gravity="center_vertical" android:orientation="horizontal" + android:layout_marginStart="@dimen/dimen8dp" + android:layout_marginTop="@dimen/dimen8dp" tools:ignore="UseCompoundDrawables"> + android:layout_width="@dimen/dimen16dp" + android:layout_height="@dimen/dimen16dp" + app:srcCompat="@drawable/ic_download" + android:contentDescription="@string/generalImgContentText"/> diff --git a/app/src/main/res/layout/list_repositories.xml b/app/src/main/res/layout/list_repositories.xml index a3edbda2..4a5e99e5 100644 --- a/app/src/main/res/layout/list_repositories.xml +++ b/app/src/main/res/layout/list_repositories.xml @@ -4,10 +4,9 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?android:attr/selectableItemBackground" - android:focusable="true" android:orientation="vertical" - android:padding="16dp"> + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - - - - - - - - - - - - - - - - - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="vertical"> - + + + + + + + - - + android:textSize="@dimen/dimen18sp" + android:textStyle="bold"/> + android:text="@string/noDataDescription"/> + + + + + + + + + + + + + + + + + + + + - + diff --git a/app/src/main/res/layout/list_tags.xml b/app/src/main/res/layout/list_tags.xml index 03e50a73..d714f09f 100644 --- a/app/src/main/res/layout/list_tags.xml +++ b/app/src/main/res/layout/list_tags.xml @@ -5,153 +5,172 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:padding="16dp"> + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - - - - - - - - - - - - - - - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> - - - - - - - - + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="vertical"> - - + android:textSize="16sp" + android:textStyle="bold"/> + + - - + android:layout_height="match_parent" + android:layout_marginTop="10dp" + android:orientation="vertical"> + android:textColorLink="@color/lightBlue" + android:textSize="14sp"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/app/src/main/res/layout/list_teams_by_org.xml b/app/src/main/res/layout/list_teams_by_org.xml deleted file mode 100644 index e305c03c..00000000 --- a/app/src/main/res/layout/list_teams_by_org.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/list_user_accounts.xml b/app/src/main/res/layout/list_user_accounts.xml index a77a448c..86139e57 100644 --- a/app/src/main/res/layout/list_user_accounts.xml +++ b/app/src/main/res/layout/list_user_accounts.xml @@ -1,73 +1,91 @@ + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - - - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="vertical"> - + + + android:orientation="vertical"> - + - + + + + + + + + + + + - - - + diff --git a/app/src/main/res/layout/list_users.xml b/app/src/main/res/layout/list_users.xml index 9d040c02..1b9d306b 100644 --- a/app/src/main/res/layout/list_users.xml +++ b/app/src/main/res/layout/list_users.xml @@ -1,35 +1,33 @@ + style="?attr/materialCardViewFilledStyle"> + android:padding="@dimen/dimen12dp" + android:orientation="horizontal"> + app:cardCornerRadius="@dimen/dimen12dp"> + android:padding="@dimen/dimen4dp" + android:orientation="vertical"> - + android:layout_height="wrap_content" + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + - - diff --git a/app/src/main/res/layout/list_wiki.xml b/app/src/main/res/layout/list_wiki.xml index 7fd5b30d..e6a69bf1 100644 --- a/app/src/main/res/layout/list_wiki.xml +++ b/app/src/main/res/layout/list_wiki.xml @@ -4,81 +4,98 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?android:attr/selectableItemBackground" - android:focusable="true" android:orientation="vertical" - android:padding="16dp"> + android:paddingTop="@dimen/dimen4dp" + android:paddingBottom="@dimen/dimen4dp"> - - - - - - - - - - - - - + style="?attr/materialCardViewFilledStyle" + app:cardElevation="@dimen/dimen0dp"> + android:foreground="?android:attr/selectableItemBackground" + android:background="?attr/materialCardBackgroundColor" + android:padding="@dimen/dimen12dp" + android:orientation="vertical"> - + + + + + + + + + + + + + + + + + + + + + - + diff --git a/app/src/main/res/menu/reset_menu.xml b/app/src/main/res/menu/reset_menu.xml new file mode 100644 index 00000000..0b676b25 --- /dev/null +++ b/app/src/main/res/menu/reset_menu.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/app/src/main/res/values-v23/themes.xml b/app/src/main/res/values-v23/themes.xml index 29706a0e..6fea78d8 100644 --- a/app/src/main/res/values-v23/themes.xml +++ b/app/src/main/res/values-v23/themes.xml @@ -12,6 +12,7 @@ @color/lightThemeTextColor @color/lightThemeTextColor @color/lightThemeColorSecondaryContainer + @color/lightThemeCardBackground @color/lightThemeDiffAddedColor @color/lightThemeDiffRemovedColor @@ -57,6 +58,7 @@ @color/retroThemeColorPrimary @color/retroThemeColorSecondary @color/retroThemeTextColor + @color/retroThemeCardBackground @color/retroThemeDiffAddedColor @color/retroThemeDiffRemovedColor diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 3f3c3b89..d411b094 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -15,5 +15,6 @@ + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 9e52a81e..9ef28882 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,7 +1,7 @@ - #212121 - #212121 + #1f2926 + #1f2926 #7f7e7b #7f7e7b #ffffff @@ -28,30 +28,33 @@ #1d1d1d #efd34a #dbb109 - #1f2926 + #2A322E + #1e2221 #FCEDED #EAF8ED #e0e0e0 #646565 - #f9f9f9 + #e5eae8 #EFEFEF #C9CCCC #212121 #dbdbdb - #dbe3e1 + #D9E1DF + #ffffff #fad6d6 #d0f7d9 #d8d8d8 #212f3c - #fcfcfc + #eae5f1 #f2f2f2 #D3D3D3 #6200EE #dbdbdb #6200EE #03DAC6 + #ffffff #a333c8 #db2828 @@ -60,6 +63,8 @@ #d2d2d2 #0E0E0E #151515 + #161918 + #0C0C0C #252526 @@ -69,5 +74,4 @@ #a9b1ae #ffffff #e6b121 - #0c0c0c diff --git a/app/src/main/res/values/languages.xml b/app/src/main/res/values/languages.xml index e0629fda..a181d6ba 100644 --- a/app/src/main/res/values/languages.xml +++ b/app/src/main/res/values/languages.xml @@ -1,9 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + code + strong + small + template + form + input + textarea + button + option + label + fieldset + legend + datalist + frame + map + area + canvas + picture + svg + audio + source + track + video + link + nav + ul + ol + li + table + caption + th + tr + td + thead + tbody + tfooter + col + span + main + article + aside + meta + base + noscript + object + param + src + href + + + + + + encoding + version + + - php + __construct var_dump define diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e58a8bab..f5790f9f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -492,7 +492,7 @@ Hold on ☕ File Issue - Label + Label Release Pull Request Collaborator @@ -508,6 +508,7 @@ Reopen Open in Browser Delete %s + Reset Explore users @@ -616,6 +617,10 @@ This will delete all the drafts for this account. \n\nProceed with deletion? Draft was saved automatically. + Counter is reset successfully + Do you want to reset counter for repository %s? + This will reset all the counters for this account repositories. + Themes, fonts, badges Biometric authentication, SSL certificates, cache Languages diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 8af90de6..0773cd79 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -12,6 +12,7 @@ @color/colorWhite @color/colorWhite @color/colorSecondaryContainer + @color/cardBackground @color/diffAddedColor @color/diffRemovedColor @@ -41,7 +42,6 @@ @color/inputBackground @style/inputsMaterialComponentCorner @style/WindowAnimationTransition - @drawable/shape_list_divider @style/MaterialSwitch 1 @@ -58,6 +58,7 @@ @color/lightThemeTextColor @color/lightThemeTextColor @color/lightThemeColorSecondaryContainer + @color/lightThemeCardBackground @color/lightThemeDiffAddedColor @color/lightThemeDiffRemovedColor @@ -102,6 +103,7 @@ @color/retroThemeColorPrimary @color/retroThemeColorSecondary @color/retroThemeTextColor + @color/retroThemeCardBackground @color/retroThemeDiffAddedColor @color/retroThemeDiffRemovedColor @@ -146,7 +148,8 @@ @color/darkGreen @color/pitchBlackThemeTextColor @color/pitchBlackThemeTextColor - @color/colorSecondaryContainer + @color/pitchBlackThemeColorSecondary + @color/pitchBlackThemeCardBackground @color/diffAddedColor @color/diffRemovedColor diff --git a/build.gradle b/build.gradle index c336b355..9baeb73a 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.2.1' + classpath 'com.android.tools.build:gradle:7.2.2' } }