From c67b3c178f7d307f2e26eeb7014004bd14b1998c Mon Sep 17 00:00:00 2001 From: M M Arif Date: Fri, 22 Apr 2022 17:18:38 +0200 Subject: [PATCH] PR targeting multiple issues: #1101, #1092, #1080, #1079, #1057 (#1109) - [x] Closes #1101 - [x] Closes #1092 - [x] Closes #1080 - [x] Closes #1079 - [x] Closes #1057 - [x] Closes #1107 - [x] Closes #913 Co-authored-by: M M Arif Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/1109 Reviewed-by: 6543 <6543@noreply.codeberg.org> Reviewed-by: qwerty287 --- .../activities/AddNewAccountActivity.java | 31 +- .../activities/AddNewTeamRepoActivity.java | 5 +- .../activities/AdminCronTasksActivity.java | 6 +- .../activities/AdminGetUsersActivity.java | 8 +- .../gitnex/activities/CommitsActivity.java | 8 +- .../activities/CreateIssueActivity.java | 8 +- .../activities/CreateLabelActivity.java | 11 +- .../activities/CreatePullRequestActivity.java | 8 +- .../activities/CreateReleaseActivity.java | 5 +- .../gitnex/activities/EditIssueActivity.java | 9 +- .../activities/IssueDetailActivity.java | 31 +- .../mian/gitnex/activities/LoginActivity.java | 33 +- .../mian/gitnex/activities/MainActivity.java | 60 ++- .../OrganizationDetailActivity.java | 28 +- .../gitnex/activities/RepoDetailActivity.java | 17 +- .../gitnex/activities/RepoForksActivity.java | 8 +- .../gitnex/adapters/IssueCommentsAdapter.java | 30 +- .../org/mian/gitnex/adapters/TagsAdapter.java | 95 ++++- .../mian/gitnex/clients/RetrofitClient.java | 2 +- .../mian/gitnex/database/api/DraftsApi.java | 2 +- .../gitnex/database/api/RepositoriesApi.java | 2 +- .../gitnex/database/api/UserAccountsApi.java | 10 +- .../mian/gitnex/database/dao/DraftsDao.java | 2 +- .../gitnex/database/dao/RepositoriesDao.java | 2 +- .../gitnex/database/dao/UserAccountsDao.java | 5 +- .../gitnex/database/db/GitnexDatabase.java | 15 +- .../mian/gitnex/database/models/Draft.java | 2 +- .../database/models/DraftWithRepository.java | 2 +- .../gitnex/database/models/Repository.java | 2 +- .../gitnex/database/models/UserAccount.java | 20 +- .../BottomSheetMyIssuesFilterFragment.java | 5 + .../BottomSheetOrganizationFragment.java | 16 +- .../BottomSheetSingleIssueFragment.java | 55 +-- .../fragments/ExploreIssuesFragment.java | 8 +- .../ExploreRepositoriesFragment.java | 4 +- .../fragments/ExploreUsersFragment.java | 4 +- .../mian/gitnex/fragments/IssuesFragment.java | 61 +-- .../mian/gitnex/fragments/LabelsFragment.java | 8 +- .../gitnex/fragments/MilestonesFragment.java | 6 +- .../gitnex/fragments/MyIssuesFragment.java | 33 +- .../fragments/MyProfileEmailsFragment.java | 15 +- .../fragments/MyRepositoriesFragment.java | 14 +- .../fragments/OrganizationLabelsFragment.java | 10 +- .../OrganizationTeamInfoReposFragment.java | 14 +- .../fragments/OrganizationsFragment.java | 14 +- .../gitnex/fragments/ReleasesFragment.java | 18 +- .../fragments/RepositoriesByOrgFragment.java | 15 +- .../fragments/RepositoriesFragment.java | 13 +- .../StarredRepositoriesFragment.java | 13 +- .../gitnex/fragments/TeamsByOrgFragment.java | 10 +- .../org/mian/gitnex/helpers/AlertDialogs.java | 35 +- .../java/org/mian/gitnex/helpers/AppUtil.java | 12 +- .../org/mian/gitnex/helpers/Constants.java | 16 +- .../helpers/contexts/AccountContext.java | 8 + .../viewmodels/AdminCronTasksViewModel.java | 4 +- .../viewmodels/AdminGetUsersViewModel.java | 6 +- .../viewmodels/CollaboratorsViewModel.java | 4 +- .../gitnex/viewmodels/FilesViewModel.java | 8 +- .../gitnex/viewmodels/IssuesViewModel.java | 34 +- .../gitnex/viewmodels/LabelsViewModel.java | 4 +- .../viewmodels/MembersByOrgViewModel.java | 4 +- .../viewmodels/MilestonesViewModel.java | 10 +- .../OrganizationLabelsViewModel.java | 4 +- .../viewmodels/OrganizationsViewModel.java | 6 +- .../viewmodels/ProfileEmailsViewModel.java | 4 +- .../gitnex/viewmodels/ReleasesViewModel.java | 31 +- .../viewmodels/RepoStargazersViewModel.java | 4 +- .../viewmodels/RepoWatchersViewModel.java | 4 +- .../viewmodels/RepositoriesViewModel.java | 6 +- .../viewmodels/TeamsByOrgViewModel.java | 4 +- .../layout/activity_add_new_team_member.xml | 2 +- .../main/res/layout/activity_issue_detail.xml | 71 +++- .../res/layout/add_new_team_repository.xml | 2 +- .../res/layout/bottom_sheet_admin_users.xml | 51 ++- .../main/res/layout/bottom_sheet_drafts.xml | 51 ++- .../res/layout/bottom_sheet_file_viewer.xml | 101 +++-- .../layout/bottom_sheet_issue_comments.xml | 214 ++++++---- .../res/layout/bottom_sheet_issues_filter.xml | 102 +++-- .../layout/bottom_sheet_labels_in_list.xml | 89 ++-- .../layout/bottom_sheet_milestones_filter.xml | 75 ++-- .../bottom_sheet_milestones_in_list.xml | 75 ++-- .../layout/bottom_sheet_my_issues_filter.xml | 17 +- .../res/layout/bottom_sheet_notifications.xml | 134 +++--- .../bottom_sheet_notifications_filter.xml | 75 ++-- .../res/layout/bottom_sheet_organization.xml | 31 +- .../bottom_sheet_organization_teams.xml | 75 ++-- .../main/res/layout/bottom_sheet_profile.xml | 51 ++- .../bottom_sheet_pull_request_filter.xml | 75 ++-- .../res/layout/bottom_sheet_releases_tags.xml | 75 ++-- app/src/main/res/layout/bottom_sheet_repo.xml | 8 +- .../res/layout/bottom_sheet_single_issue.xml | 399 ++++++++++-------- .../res/layout/bottom_sheet_tag_in_list.xml | 51 ++- .../res/layout/bottom_sheet_user_profile.xml | 51 ++- .../main/res/layout/custom_pr_info_dialog.xml | 55 +++ app/src/main/res/layout/list_releases.xml | 6 +- app/src/main/res/menu/pr_info_menu.xml | 12 + app/src/main/res/values/strings.xml | 26 +- 97 files changed, 1843 insertions(+), 1142 deletions(-) create mode 100644 app/src/main/res/layout/custom_pr_info_dialog.xml create mode 100644 app/src/main/res/menu/pr_info_menu.xml diff --git a/app/src/main/java/org/mian/gitnex/activities/AddNewAccountActivity.java b/app/src/main/java/org/mian/gitnex/activities/AddNewAccountActivity.java index 5d7de0f6..e8d120f1 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AddNewAccountActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AddNewAccountActivity.java @@ -8,6 +8,7 @@ import android.view.View; import android.widget.ArrayAdapter; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; +import org.gitnex.tea4j.v2.models.GeneralAPISettings; import org.gitnex.tea4j.v2.models.ServerVersion; import org.gitnex.tea4j.v2.models.User; import org.mian.gitnex.R; @@ -39,6 +40,8 @@ public class AddNewAccountActivity extends BaseActivity { private String spinnerSelectedValue; private Version giteaVersion; + private int maxResponseItems = 50; + private int defaultPagingNumber = 30; @Override public void onCreate(Bundle savedInstanceState) { @@ -115,6 +118,7 @@ public class AddNewAccountActivity extends BaseActivity { .toUri(); versionCheck(instanceUrl.toString(), loginToken); + serverPageLimitSettings(); } catch(Exception e) { @@ -196,6 +200,31 @@ public class AddNewAccountActivity extends BaseActivity { }); } + private void serverPageLimitSettings() { + + Call generalAPISettings = RetrofitClient.getApiInterface(ctx).getGeneralAPISettings(); + generalAPISettings.enqueue(new Callback<>() { + + @Override + public void onResponse(@NonNull final Call generalAPISettings, @NonNull retrofit2.Response response) { + + if(response.code() == 200 && response.body() != null) { + + if(response.body().getMaxResponseItems() != null) { + maxResponseItems = Math.toIntExact(response.body().getMaxResponseItems()); + } + if(response.body().getDefaultPagingNum() != null) { + defaultPagingNumber = Math.toIntExact(response.body().getDefaultPagingNum()); + } + } + } + + @Override + public void onFailure(@NonNull Call generalAPISettings, @NonNull Throwable t) { + } + }); + } + private void setupNewAccountWithToken(String instanceUrl, final String loginToken) { Call call = RetrofitClient.getApiInterface(ctx, instanceUrl, "token " + loginToken).userGetCurrent(); @@ -219,7 +248,7 @@ public class AddNewAccountActivity extends BaseActivity { if(!userAccountExists) { - long id = userAccountsApi.createNewAccount(accountName, instanceUrl, userDetails.getLogin(), loginToken, giteaVersion.toString()); + long id = userAccountsApi.createNewAccount(accountName, instanceUrl, userDetails.getLogin(), loginToken, giteaVersion.toString(), maxResponseItems, defaultPagingNumber); UserAccount account = userAccountsApi.getAccountById((int) id); AppUtil.switchToAccount(AddNewAccountActivity.this, account); Toasty.success(ctx, getResources().getString(R.string.accountAddedMessage)); 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 adff8405..6c94222c 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AddNewTeamRepoActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AddNewTeamRepoActivity.java @@ -10,6 +10,7 @@ import org.mian.gitnex.R; import org.mian.gitnex.adapters.TeamRepositoriesAdapter; import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.databinding.AddNewTeamRepositoryBinding; +import org.mian.gitnex.helpers.Constants; import org.mian.gitnex.helpers.Toasty; import java.util.ArrayList; import java.util.List; @@ -27,6 +28,7 @@ public class AddNewTeamRepoActivity extends BaseActivity { private View.OnClickListener onClickListener; private List dataList; private TeamRepositoriesAdapter adapter; + private int resultLimit; private long teamId; private String teamName; @@ -39,6 +41,7 @@ public class AddNewTeamRepoActivity extends BaseActivity { addNewTeamRepositoryBinding = AddNewTeamRepositoryBinding.inflate(getLayoutInflater()); setContentView(addNewTeamRepositoryBinding.getRoot()); + resultLimit = Constants.getCurrentResultLimit(ctx); initCloseListener(); addNewTeamRepositoryBinding.close.setOnClickListener(onClickListener); @@ -58,7 +61,7 @@ public class AddNewTeamRepoActivity extends BaseActivity { public void loadRepos() { - Call> call = RetrofitClient.getApiInterface(ctx).orgListRepos(getIntent().getStringExtra("orgName"), 1, 50); + Call> call = RetrofitClient.getApiInterface(ctx).orgListRepos(getIntent().getStringExtra("orgName"), 1, resultLimit); addNewTeamRepositoryBinding.progressBar.setVisibility(View.VISIBLE); 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 273afef7..267ab464 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AdminCronTasksActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AdminCronTasksActivity.java @@ -14,11 +14,12 @@ import org.mian.gitnex.databinding.ActivityAdminCronTasksBinding; import org.mian.gitnex.viewmodels.AdminCronTasksViewModel; /** - * Author M M Arif + * @author M M Arif */ public class AdminCronTasksActivity extends BaseActivity { + private AdminCronTasksViewModel adminCronTasksViewModel; private View.OnClickListener onClickListener; private AdminCronTasksAdapter adapter; @@ -34,6 +35,7 @@ public class AdminCronTasksActivity extends BaseActivity { activityAdminCronTasksBinding = ActivityAdminCronTasksBinding.inflate(getLayoutInflater()); setContentView(activityAdminCronTasksBinding.getRoot()); + adminCronTasksViewModel = new ViewModelProvider(this).get(AdminCronTasksViewModel.class); initCloseListener(); activityAdminCronTasksBinding.close.setOnClickListener(onClickListener); @@ -51,7 +53,7 @@ public class AdminCronTasksActivity extends BaseActivity { activityAdminCronTasksBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { activityAdminCronTasksBinding.pullToRefresh.setRefreshing(false); - AdminCronTasksViewModel.loadCronTasksList(ctx, PAGE, LIMIT); + adminCronTasksViewModel.loadCronTasksList(ctx, PAGE, LIMIT); }, 500)); 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 0e2db5c3..defd9111 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AdminGetUsersActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AdminGetUsersActivity.java @@ -29,11 +29,12 @@ import org.mian.gitnex.viewmodels.AdminGetUsersViewModel; public class AdminGetUsersActivity extends BaseActivity implements BottomSheetListener { + private AdminGetUsersViewModel adminGetUsersViewModel; private View.OnClickListener onClickListener; private ActivityAdminGetUsersBinding activityAdminGetUsersBinding; private AdminGetUsersAdapter adapter; private int page = 1; - private int resultLimit = Constants.resultLimitNewGiteaInstances; + private int resultLimit; private Boolean searchFilter = false; public void onCreate(Bundle savedInstanceState) { @@ -42,6 +43,7 @@ public class AdminGetUsersActivity extends BaseActivity implements BottomSheetLi activityAdminGetUsersBinding = ActivityAdminGetUsersBinding.inflate(getLayoutInflater()); setContentView(activityAdminGetUsersBinding.getRoot()); + adminGetUsersViewModel = new ViewModelProvider(this).get(AdminGetUsersViewModel.class); Toolbar toolbar = activityAdminGetUsersBinding.toolbar; setSupportActionBar(toolbar); @@ -49,6 +51,8 @@ public class AdminGetUsersActivity extends BaseActivity implements BottomSheetLi initCloseListener(); activityAdminGetUsersBinding.close.setOnClickListener(onClickListener); + resultLimit = Constants.getCurrentResultLimit(ctx); + activityAdminGetUsersBinding.recyclerView.setHasFixedSize(true); activityAdminGetUsersBinding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(activityAdminGetUsersBinding.recyclerView.getContext(), @@ -79,7 +83,7 @@ public class AdminGetUsersActivity extends BaseActivity implements BottomSheetLi public void onLoadMore() { page += 1; - AdminGetUsersViewModel.loadMoreUsersList(page, resultLimit, ctx, adapter); + adminGetUsersViewModel.loadMoreUsersList(page, resultLimit, ctx, adapter); activityAdminGetUsersBinding.progressBar.setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/org/mian/gitnex/activities/CommitsActivity.java b/app/src/main/java/org/mian/gitnex/activities/CommitsActivity.java index 5fdba65e..e0a2ae13 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CommitsActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CommitsActivity.java @@ -42,7 +42,7 @@ public class CommitsActivity extends BaseActivity { private TextView noData; private ProgressBar progressBar; private final String TAG = "CommitsActivity"; - private int resultLimit = Constants.resultLimitOldGiteaInstances; + private int resultLimit; private int pageSize = 1; private RecyclerView recyclerView; @@ -80,11 +80,7 @@ public class CommitsActivity extends BaseActivity { initCloseListener(); closeActivity.setOnClickListener(onClickListener); - // if gitea is 1.12 or higher use the new limit (resultLimitNewGiteaInstances) - if(getAccount().requiresVersion("1.12")) { - - resultLimit = Constants.resultLimitNewGiteaInstances; - } + resultLimit = Constants.getCurrentResultLimit(ctx); recyclerView = activityCommitsBinding.recyclerView; commitsList = new ArrayList<>(); diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java index 92877f36..b0c257f1 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java @@ -53,7 +53,7 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis private CustomLabelsSelectionDialogBinding labelsBinding; private CustomAssigneesSelectionDialogBinding assigneesBinding; private View.OnClickListener onClickListener; - private int resultLimit = Constants.resultLimitOldGiteaInstances; + private int resultLimit; private Dialog dialogLabels; private Dialog dialogAssignees; private String labelsSetter; @@ -87,11 +87,7 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis repository = RepositoryContext.fromIntent(getIntent()); - // require gitea 1.12 or higher - if(getAccount().requiresVersion("1.12.0")) { - - resultLimit = Constants.resultLimitNewGiteaInstances; - } + resultLimit = Constants.getCurrentResultLimit(ctx); viewBinding.newIssueTitle.requestFocus(); assert imm != null; diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateLabelActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateLabelActivity.java index a9172d54..fe362017 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateLabelActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateLabelActivity.java @@ -12,6 +12,7 @@ import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; +import androidx.lifecycle.ViewModelProvider; import com.pes.androidmaterialcolorpickerdialog.ColorPicker; import org.gitnex.tea4j.v2.models.CreateLabelOption; import org.gitnex.tea4j.v2.models.EditLabelOption; @@ -30,13 +31,15 @@ import retrofit2.Call; import retrofit2.Callback; /** - * Author M M Arif + * @author M M Arif */ public class CreateLabelActivity extends BaseActivity { public static boolean refreshLabels = false; + private OrganizationLabelsViewModel organizationLabelsViewModel; + private LabelsViewModel labelsViewModel; private View.OnClickListener onClickListener; private TextView colorPicker; private EditText labelName; @@ -53,6 +56,8 @@ public class CreateLabelActivity extends BaseActivity { ActivityCreateLabelBinding activityCreateLabelBinding = ActivityCreateLabelBinding.inflate(getLayoutInflater()); setContentView(activityCreateLabelBinding.getRoot()); + labelsViewModel = new ViewModelProvider(this).get(LabelsViewModel.class); + organizationLabelsViewModel = new ViewModelProvider(this).get(OrganizationLabelsViewModel.class); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); @@ -345,11 +350,11 @@ public class CreateLabelActivity extends BaseActivity { Toasty.success(ctx, getString(R.string.labelDeleteText)); if(getIntent().getStringExtra("type") != null && Objects.requireNonNull(getIntent().getStringExtra("type")).equals("org")) { - OrganizationLabelsViewModel.loadOrgLabelsList(getIntent().getStringExtra("orgName"), ctx, null, null); + organizationLabelsViewModel.loadOrgLabelsList(getIntent().getStringExtra("orgName"), ctx, null, null); } else { - LabelsViewModel.loadLabelsList(repository.getOwner(), repository.getName(), ctx); + labelsViewModel.loadLabelsList(repository.getOwner(), repository.getName(), ctx); } } } diff --git a/app/src/main/java/org/mian/gitnex/activities/CreatePullRequestActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreatePullRequestActivity.java index dea1922a..66192274 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreatePullRequestActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreatePullRequestActivity.java @@ -45,7 +45,7 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis private View.OnClickListener onClickListener; private ActivityCreatePrBinding viewBinding; - private int resultLimit = Constants.resultLimitOldGiteaInstances; + private int resultLimit; private Dialog dialogLabels; private List labelsIds = new ArrayList<>(); private final List assignees = new ArrayList<>(); @@ -71,11 +71,7 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis repository = RepositoryContext.fromIntent(getIntent()); - // require gitea 1.12 or higher - if(getAccount().requiresVersion("1.12.0")) { - - resultLimit = Constants.resultLimitNewGiteaInstances; - } + resultLimit = Constants.getCurrentResultLimit(ctx); viewBinding.prBody.setOnTouchListener((touchView, motionEvent) -> { diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java index 390e7593..2498d6a6 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java @@ -111,7 +111,6 @@ public class CreateReleaseActivity extends BaseActivity { } createNewTag.setOnClickListener(v -> createNewTag()); - } private void createNewTag() { @@ -152,6 +151,10 @@ public class CreateReleaseActivity extends BaseActivity { public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { if (response.code() == 201) { + + Intent result = new Intent(); + result.putExtra("updateReleases", true); + setResult(201, result); Toasty.success(ctx, getString(R.string.tagCreated)); finish(); } diff --git a/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java b/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java index e864ebc2..98bfaf45 100644 --- a/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java @@ -49,7 +49,7 @@ import retrofit2.Callback; public class EditIssueActivity extends BaseActivity implements View.OnClickListener { private View.OnClickListener onClickListener; - private int resultLimit = Constants.resultLimitOldGiteaInstances; + private int resultLimit; private EditText editIssueTitle; private EditText editIssueDescription; @@ -76,6 +76,7 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + resultLimit = Constants.getCurrentResultLimit(ctx); issue = IssueContext.fromIntent(getIntent()); ImageView closeActivity = activityEditIssueBinding.close; @@ -85,12 +86,6 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe editIssueDescription = activityEditIssueBinding.editIssueDescription; editIssueDueDate = activityEditIssueBinding.editIssueDueDate; - // if gitea is 1.12 or higher use the new limit - if(getAccount().requiresVersion("1.12.0")) { - - resultLimit = Constants.resultLimitNewGiteaInstances; - } - editIssueTitle.requestFocus(); assert imm != null; imm.showSoftInput(editIssueTitle, InputMethodManager.SHOW_IMPLICIT); 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 8714aaf2..cfc717d7 100644 --- a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java @@ -20,9 +20,11 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.ScrollView; +import android.widget.TextView; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; import androidx.core.content.res.ResourcesCompat; import androidx.core.text.HtmlCompat; @@ -440,6 +442,9 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.generic_nav_dotted_menu, menu); + if(issue.getIssueType().equalsIgnoreCase("pull")) { + inflater.inflate(R.menu.pr_info_menu, menu); + } return true; } @@ -466,6 +471,24 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt } return true; } + else if(id == R.id.prInfo) { + + View view = LayoutInflater.from(ctx).inflate(R.layout.custom_pr_info_dialog, null); + + TextView baseBranch = view.findViewById(R.id.baseBranch); + TextView headBranch = view.findViewById(R.id.headBranch); + + baseBranch.setText(issue.getPullRequest().getHead().getRef()); + headBranch.setText(issue.getPullRequest().getHead().getRef()); + + AlertDialog.Builder alertDialog = new AlertDialog.Builder(ctx); + + alertDialog.setTitle(getResources().getString(R.string.prMergeInfo)); + alertDialog.setView(view); + alertDialog.setPositiveButton(getString(R.string.okButton), null); + alertDialog.create().show(); + return true; + } else { return super.onOptionsItemSelected(item); @@ -780,7 +803,7 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt } else { - viewBinding.issueDueDate.setVisibility(View.GONE); + viewBinding.dueDateFrame.setVisibility(View.GONE); } String edited; @@ -847,12 +870,12 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt if(issue.getIssue().getMilestone() != null) { - viewBinding.issueMilestone.setVisibility(View.VISIBLE); - viewBinding.issueMilestone.setText(getString(R.string.issueMilestone, issue.getIssue().getMilestone().getTitle())); + viewBinding.milestoneFrame.setVisibility(View.VISIBLE); + viewBinding.issueMilestone.setText(issue.getIssue().getMilestone().getTitle()); } else { - viewBinding.issueMilestone.setVisibility(View.GONE); + viewBinding.milestoneFrame.setVisibility(View.GONE); } /*if(!issue.getIssue().getUser().getFull_name().equals("")) { diff --git a/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java b/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java index d22db7eb..b1446112 100644 --- a/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java @@ -12,6 +12,7 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import org.gitnex.tea4j.v2.models.AccessToken; import org.gitnex.tea4j.v2.models.CreateAccessTokenOption; +import org.gitnex.tea4j.v2.models.GeneralAPISettings; import org.gitnex.tea4j.v2.models.ServerVersion; import org.gitnex.tea4j.v2.models.User; import org.mian.gitnex.R; @@ -53,6 +54,8 @@ public class LoginActivity extends BaseActivity { private URI instanceUrl; private Version giteaVersion; + private int maxResponseItems = 50; + private int defaultPagingNumber = 25; @Override public void onCreate(Bundle savedInstanceState) { @@ -195,6 +198,7 @@ public class LoginActivity extends BaseActivity { } versionCheck(loginUid, loginPass, 123, loginToken, loginType); + serverPageLimitSettings(); } } @@ -205,6 +209,31 @@ public class LoginActivity extends BaseActivity { } } + private void serverPageLimitSettings() { + + Call generalAPISettings = RetrofitClient.getApiInterface(ctx).getGeneralAPISettings(); + generalAPISettings.enqueue(new Callback<>() { + + @Override + public void onResponse(@NonNull final Call generalAPISettings, @NonNull retrofit2.Response response) { + + if(response.code() == 200 && response.body() != null) { + + if(response.body().getMaxResponseItems() != null) { + maxResponseItems = Math.toIntExact(response.body().getMaxResponseItems()); + } + if(response.body().getDefaultPagingNum() != null) { + defaultPagingNumber = Math.toIntExact(response.body().getDefaultPagingNum()); + } + } + } + + @Override + public void onFailure(@NonNull Call generalAPISettings, @NonNull Throwable t) { + } + }); + } + private void versionCheck(final String loginUid, final String loginPass, final int loginOTP, final String loginToken, final LoginType loginType) { @@ -333,7 +362,7 @@ public class LoginActivity extends BaseActivity { boolean userAccountExists = userAccountsApi.userAccountExists(accountName); UserAccount account; if(!userAccountExists) { - long accountId = userAccountsApi.createNewAccount(accountName, instanceUrl.toString(), userDetails.getLogin(), loginToken, giteaVersion.toString()); + long accountId = userAccountsApi.createNewAccount(accountName, instanceUrl.toString(), userDetails.getLogin(), loginToken, giteaVersion.toString(), maxResponseItems, defaultPagingNumber); account = userAccountsApi.getAccountById((int) accountId); } else { @@ -515,7 +544,7 @@ public class LoginActivity extends BaseActivity { if(!userAccountExists) { long accountId = userAccountsApi .createNewAccount(accountName, instanceUrl.toString(), userDetails.getLogin(), newToken.getSha1(), - giteaVersion.toString()); + giteaVersion.toString(), maxResponseItems, defaultPagingNumber); account = userAccountsApi.getAccountById((int) accountId); } else { 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 d9e1fd40..9a983d3f 100644 --- a/app/src/main/java/org/mian/gitnex/activities/MainActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/MainActivity.java @@ -5,7 +5,6 @@ import android.graphics.Typeface; import android.os.Bundle; import android.os.Handler; import android.text.Html; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -23,6 +22,7 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.navigation.NavigationView; +import org.gitnex.tea4j.v2.models.GeneralAPISettings; import org.gitnex.tea4j.v2.models.NotificationCount; import org.gitnex.tea4j.v2.models.ServerVersion; import org.gitnex.tea4j.v2.models.User; @@ -439,9 +439,9 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig loadUserInfo(); giteaVersion(); + serverPageLimitSettings(); noConnection = false; } - Log.e("Network status is: ", String.valueOf(connToInternet)); }, 1500); // Changelog popup @@ -520,6 +520,11 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig getFragmentRefreshListener().onRefresh("closed"); } break; + case "assignedToMe": + if(getFragmentRefreshListener() != null) { + getFragmentRefreshListener().onRefresh("assignedToMe"); + } + break; } } @@ -627,10 +632,40 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig return super.onOptionsItemSelected(item); } + private void serverPageLimitSettings() { + + Call generalAPISettings = RetrofitClient.getApiInterface(ctx).getGeneralAPISettings(); + generalAPISettings.enqueue(new Callback<>() { + + @Override + public void onResponse(@NonNull final Call generalAPISettings, @NonNull retrofit2.Response response) { + + if(response.code() == 200 && response.body() != null) { + + int maxResponseItems = 50; + int defaultPagingNumber = 25; + + if(response.body().getMaxResponseItems() != null) { + maxResponseItems = Math.toIntExact(response.body().getMaxResponseItems()); + } + if(response.body().getDefaultPagingNum() != null) { + defaultPagingNumber = Math.toIntExact(response.body().getDefaultPagingNum()); + } + + BaseApi.getInstance(ctx, UserAccountsApi.class).updateServerPagingLimit(maxResponseItems, defaultPagingNumber, tinyDB.getInt("currentActiveAccountId")); + } + } + + @Override + public void onFailure(@NonNull Call generalAPISettings, @NonNull Throwable t) { + } + }); + } + private void giteaVersion() { Call callVersion = RetrofitClient.getApiInterface(ctx).getVersion(); - callVersion.enqueue(new Callback() { + callVersion.enqueue(new Callback<>() { @Override public void onResponse(@NonNull final Call callVersion, @NonNull retrofit2.Response responseVersion) { @@ -645,7 +680,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig @Override public void onFailure(@NonNull Call callVersion, @NonNull Throwable t) { - Log.e("onFailure-version", t.toString()); } }); } @@ -653,7 +687,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig private void loadUserInfo() { Call call = RetrofitClient.getApiInterface(ctx).userGetCurrent(); - call.enqueue(new Callback() { + call.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { @@ -671,16 +705,18 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig if(!getAccount().getAccount().getUserName().equals(userDetails.getLogin())) { // user changed it's name -> update database int accountId = getAccount().getAccount().getAccountId(); - BaseApi.getInstance(MainActivity.this, UserAccountsApi.class).updateUsername(accountId, - userDetails.getLogin()); + BaseApi.getInstance(MainActivity.this, UserAccountsApi.class).updateUsername(accountId, userDetails.getLogin()); getAccount().setAccount(BaseApi.getInstance(MainActivity.this, UserAccountsApi.class).getAccountById(accountId)); } - if(profileInitListener != null) profileInitListener.onButtonClicked(null); + if(profileInitListener != null) { + profileInitListener.onButtonClicked(null); + } } } else if(response.code() == 401) { - AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle), getResources().getString(R.string.alertDialogTokenRevokedMessage), getResources().getString(R.string.cancelButton), getResources().getString(R.string.navLogout)); + AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle), getResources().getString(R.string.alertDialogTokenRevokedMessage), getResources().getString(R.string.cancelButton), + getResources().getString(R.string.navLogout)); } else { @@ -691,8 +727,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig @Override public void onFailure(@NonNull Call call, @NonNull Throwable t) { - - Log.e("onFailure", t.toString()); } }); @@ -719,8 +753,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig @Override public void onFailure(@NonNull Call call, @NonNull Throwable t) { - - Log.e("onFailure-notification", t.toString()); } }); } @@ -730,7 +762,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig this.profileInitListener = profileInitListener; } - // My issues-open-close interface + // My issues interface public FragmentRefreshListener getFragmentRefreshListener() { return fragmentRefreshListenerMyIssues; } public void setFragmentRefreshListenerMyIssues(FragmentRefreshListener fragmentRefreshListener) { this.fragmentRefreshListenerMyIssues = fragmentRefreshListener; } } 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 e18a2ee5..d257a4f4 100644 --- a/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/OrganizationDetailActivity.java @@ -1,8 +1,5 @@ package org.mian.gitnex.activities; -import android.content.ClipData; -import android.content.ClipboardManager; -import android.content.Context; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; @@ -29,7 +26,7 @@ import org.mian.gitnex.fragments.OrganizationInfoFragment; import org.mian.gitnex.fragments.OrganizationLabelsFragment; import org.mian.gitnex.fragments.RepositoriesByOrgFragment; import org.mian.gitnex.fragments.TeamsByOrgFragment; -import org.mian.gitnex.helpers.Toasty; +import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.structs.BottomSheetListener; import java.util.Objects; import io.mikael.urlbuilder.UrlBuilder; @@ -38,7 +35,7 @@ import retrofit2.Callback; import retrofit2.Response; /** - * Author M M Arif + * @author M M Arif */ public class OrganizationDetailActivity extends BaseActivity implements BottomSheetListener { @@ -200,6 +197,11 @@ public class OrganizationDetailActivity extends BaseActivity implements BottomSh @Override public void onButtonClicked(String text) { + String url = UrlBuilder.fromString(getAccount().getAccount().getInstanceUrl()) + .withPath("/") + .toString(); + url = url + getIntent().getStringExtra("orgName"); + switch (text) { case "repository": Intent intentRepo = new Intent(this, CreateRepoActivity.class); @@ -221,15 +223,13 @@ public class OrganizationDetailActivity extends BaseActivity implements BottomSh startActivity(intentTeam); break; case "copyOrgUrl": - - String url = UrlBuilder.fromString(getAccount().getAccount().getInstanceUrl()) - .withPath("/") - .toString(); - ClipboardManager clipboard = (ClipboardManager) Objects.requireNonNull(ctx).getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText("orgUrl", url + getIntent().getStringExtra("orgName")); - assert clipboard != null; - clipboard.setPrimaryClip(clip); - Toasty.info(ctx, ctx.getString(R.string.copyIssueUrlToastMsg)); + AppUtil.copyToClipboard(this, url, ctx.getString(R.string.copyIssueUrlToastMsg)); + break; + case "share": + AppUtil.sharingIntent(this, url); + break; + case "open": + AppUtil.openUrlInBrowser(this, url); break; } } diff --git a/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java index e0efffaf..9f5cc4a0 100644 --- a/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java @@ -2,9 +2,6 @@ package org.mian.gitnex.activities; import android.annotation.SuppressLint; import android.app.Dialog; -import android.content.ClipData; -import android.content.ClipboardManager; -import android.content.Context; import android.content.Intent; import android.content.res.ColorStateList; import android.graphics.Typeface; @@ -279,20 +276,10 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetListe AppUtil.openUrlInBrowser(this, repository.getRepository().getHtmlUrl()); break; case "shareRepo": - - Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); - sharingIntent.setType("text/plain"); - sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, repository.getRepository().getHtmlUrl()); - sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, repository.getRepository().getHtmlUrl()); - startActivity(Intent.createChooser(sharingIntent, repository.getRepository().getHtmlUrl())); + AppUtil.sharingIntent(this, repository.getRepository().getHtmlUrl()); break; case "copyRepoUrl": - - ClipboardManager clipboard = (ClipboardManager) Objects.requireNonNull(ctx).getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText("repoUrl", repository.getRepository().getHtmlUrl()); - assert clipboard != null; - clipboard.setPrimaryClip(clip); - Toasty.info(ctx, ctx.getString(R.string.copyIssueUrlToastMsg)); + AppUtil.copyToClipboard(this, repository.getRepository().getHtmlUrl(), ctx.getString(R.string.copyIssueUrlToastMsg)); break; case "newFile": 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 f8723c15..335a84eb 100644 --- a/app/src/main/java/org/mian/gitnex/activities/RepoForksActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/RepoForksActivity.java @@ -42,7 +42,7 @@ public class RepoForksActivity extends BaseActivity { private TextView noData; private ProgressBar progressBar; private final String TAG = "RepositoryForks"; - private int resultLimit = Constants.resultLimitOldGiteaInstances; + private int resultLimit; private int pageSize = 1; private RecyclerView recyclerView; @@ -78,11 +78,7 @@ public class RepoForksActivity extends BaseActivity { closeActivity.setOnClickListener(v -> finish()); - // if gitea is 1.12 or higher use the new limit (resultLimitNewGiteaInstances) - if(getAccount().requiresVersion("1.12")) { - - resultLimit = Constants.resultLimitNewGiteaInstances; - } + resultLimit = Constants.getCurrentResultLimit(ctx); recyclerView = activityRepoForksBinding.recyclerView; forksList = new ArrayList<>(); diff --git a/app/src/main/java/org/mian/gitnex/adapters/IssueCommentsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/IssueCommentsAdapter.java index 13eecaaa..19b87cec 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/IssueCommentsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/IssueCommentsAdapter.java @@ -43,7 +43,7 @@ import retrofit2.Call; import retrofit2.Callback; /** - * Author M M Arif + * @author M M Arif */ public class IssueCommentsAdapter extends RecyclerView.Adapter { @@ -103,6 +103,7 @@ public class IssueCommentsAdapter extends RecyclerView.Adapter { - // get comment Url - CharSequence commentUrl = issueComment.getHtmlUrl(); - - // share issue comment - Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); - sharingIntent.setType("text/plain"); - String intentHeader = issue.getIssueIndex() + context.getResources().getString(R.string.hash) + "issuecomment-" + issueComment.getId() + " " + issue.getIssue().getTitle(); - sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, intentHeader); - sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, commentUrl); - context.startActivity(Intent.createChooser(sharingIntent, intentHeader)); + AppUtil.sharingIntent(context, issueComment.getHtmlUrl()); dialog.dismiss(); }); issueCommentCopyUrl.setOnClickListener(v1 -> { - // comment Url - CharSequence commentUrl = issueComment.getHtmlUrl(); - - ClipboardManager clipboard = (ClipboardManager) Objects.requireNonNull(context).getSystemService(Context.CLIPBOARD_SERVICE); - assert clipboard != null; - - ClipData clip = ClipData.newPlainText(commentUrl, commentUrl); - clipboard.setPrimaryClip(clip); + AppUtil.copyToClipboard(context, issueComment.getHtmlUrl(), context.getString(R.string.copyIssueUrlToastMsg)); + dialog.dismiss(); + }); + + open.setOnClickListener(v1 -> { + + AppUtil.openUrlInBrowser(context, issueComment.getHtmlUrl()); dialog.dismiss(); - Toasty.success(context, context.getString(R.string.copyIssueUrlToastMsg)); }); commentMenuQuote.setOnClickListener(v1 -> { diff --git a/app/src/main/java/org/mian/gitnex/adapters/TagsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/TagsAdapter.java index b3b842e8..9664a5b9 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/TagsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/TagsAdapter.java @@ -10,32 +10,38 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.core.text.HtmlCompat; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.bottomsheet.BottomSheetDialog; import org.gitnex.tea4j.v2.models.Tag; import org.mian.gitnex.R; import org.mian.gitnex.activities.RepoDetailActivity; -import org.mian.gitnex.helpers.AlertDialogs; +import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.Markdown; +import org.mian.gitnex.helpers.Toasty; import java.util.List; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; /** - * Author qwerty287 + * @author qwerty287 */ public class TagsAdapter extends RecyclerView.Adapter { private List tags; private final Context context; - private final String repo; - private final String owner; + private static String repo; + private static String owner; private OnLoadMoreListener loadMoreListener; private boolean isLoading = false, isMoreDataAvailable = true; - static class TagsViewHolder extends RecyclerView.ViewHolder { + class TagsViewHolder extends RecyclerView.ViewHolder { + private Tag tagsHolder; private final TextView tagName; private final TextView tagBody; private final LinearLayout downloadFrame; @@ -57,6 +63,24 @@ public class TagsAdapter extends RecyclerView.Adapter { + final Context context = v.getContext(); + + @SuppressLint("InflateParams") + View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_tag_in_list, null); + + TextView delete = view.findViewById(R.id.tagMenuDelete); + + BottomSheetDialog dialog = new BottomSheetDialog(context); + dialog.setContentView(view); + dialog.show(); + + delete.setOnClickListener(v1 -> { + tagDeleteDialog(context, tagsHolder.getName(), owner, repo, getBindingAdapterPosition()); + dialog.dismiss(); + }); + }); } } @@ -78,6 +102,7 @@ public class TagsAdapter extends RecyclerView.Adapter { - final Context context = v.getContext(); - - @SuppressLint("InflateParams") - View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_tag_in_list, null); - - TextView delete = view.findViewById(R.id.tagMenuDelete); - - BottomSheetDialog dialog = new BottomSheetDialog(context); - dialog.setContentView(view); - dialog.show(); - - delete.setOnClickListener(v1 -> { - AlertDialogs.tagDeleteDialog(context, currentItem.getName(), owner, repo); - dialog.dismiss(); - }); - }); - holder.releaseZipDownload.setText( HtmlCompat.fromHtml("" + context.getResources().getString(R.string.zipArchiveDownloadReleasesTab) + " ", HtmlCompat.FROM_HTML_MODE_LEGACY)); holder.releaseZipDownload.setMovementMethod(LinkMovementMethod.getInstance()); @@ -150,6 +157,7 @@ public class TagsAdapter extends RecyclerView.Adapter RetrofitClient + .getApiInterface(context).repoDeleteTag(owner, repo, tagName).enqueue(new Callback<>() { + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + + if(response.isSuccessful()) { + updateAdapter(position); + Toasty.success(context, context.getString(R.string.tagDeleted)); + } + else if(response.code() == 403) { + Toasty.error(context, context.getString(R.string.authorizeError)); + } + else if(response.code() == 409) { + Toasty.error(context, context.getString(R.string.tagDeleteError)); + } + else { + Toasty.error(context, context.getString(R.string.genericError)); + } + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + + Toasty.error(context, context.getString(R.string.genericError)); + } + })) + .setNeutralButton(R.string.cancelButton, null).show(); + } } diff --git a/app/src/main/java/org/mian/gitnex/clients/RetrofitClient.java b/app/src/main/java/org/mian/gitnex/clients/RetrofitClient.java index 326ccf71..18c5c833 100644 --- a/app/src/main/java/org/mian/gitnex/clients/RetrofitClient.java +++ b/app/src/main/java/org/mian/gitnex/clients/RetrofitClient.java @@ -46,7 +46,7 @@ import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.converter.scalars.ScalarsConverterFactory; /** - * Author M M Arif + * @author M M Arif */ public class RetrofitClient { diff --git a/app/src/main/java/org/mian/gitnex/database/api/DraftsApi.java b/app/src/main/java/org/mian/gitnex/database/api/DraftsApi.java index 24b8b688..65297fe3 100644 --- a/app/src/main/java/org/mian/gitnex/database/api/DraftsApi.java +++ b/app/src/main/java/org/mian/gitnex/database/api/DraftsApi.java @@ -8,7 +8,7 @@ import org.mian.gitnex.database.models.DraftWithRepository; import java.util.List; /** - * Author M M Arif + * @author M M Arif */ public class DraftsApi extends BaseApi { diff --git a/app/src/main/java/org/mian/gitnex/database/api/RepositoriesApi.java b/app/src/main/java/org/mian/gitnex/database/api/RepositoriesApi.java index effc415d..018ba700 100644 --- a/app/src/main/java/org/mian/gitnex/database/api/RepositoriesApi.java +++ b/app/src/main/java/org/mian/gitnex/database/api/RepositoriesApi.java @@ -7,7 +7,7 @@ import org.mian.gitnex.database.models.Repository; import java.util.List; /** - * Author M M Arif + * @author M M Arif */ public class RepositoriesApi extends BaseApi { diff --git a/app/src/main/java/org/mian/gitnex/database/api/UserAccountsApi.java b/app/src/main/java/org/mian/gitnex/database/api/UserAccountsApi.java index f2f1a1c5..8e654320 100644 --- a/app/src/main/java/org/mian/gitnex/database/api/UserAccountsApi.java +++ b/app/src/main/java/org/mian/gitnex/database/api/UserAccountsApi.java @@ -7,7 +7,7 @@ import org.mian.gitnex.database.models.UserAccount; import java.util.List; /** - * Author M M Arif + * @author M M Arif */ public class UserAccountsApi extends BaseApi { @@ -19,7 +19,7 @@ public class UserAccountsApi extends BaseApi { userAccountsDao = gitnexDatabase.userAccountsDao(); } - public long createNewAccount(String accountName, String instanceUrl, String userName, String token, String serverVersion) { + public long createNewAccount(String accountName, String instanceUrl, String userName, String token, String serverVersion, int maxResponseItems, int defaultPagingNumber) { UserAccount userAccount = new UserAccount(); userAccount.setAccountName(accountName); @@ -28,6 +28,8 @@ public class UserAccountsApi extends BaseApi { userAccount.setToken(token); userAccount.setServerVersion(serverVersion); userAccount.setLoggedIn(true); + userAccount.setMaxResponseItems(maxResponseItems); + userAccount.setDefaultPagingNumber(defaultPagingNumber); return userAccountsDao.createAccount(userAccount); @@ -37,6 +39,10 @@ public class UserAccountsApi extends BaseApi { executorService.execute(() -> userAccountsDao.updateServerVersion(serverVersion, accountId)); } + public void updateServerPagingLimit(final int maxResponseItems, final int defaultPagingNumber, final int accountId) { + executorService.execute(() -> userAccountsDao.updateServerPagingLimit(maxResponseItems, defaultPagingNumber, accountId)); + } + public void updateToken(final int accountId, final String token) { executorService.execute(() -> userAccountsDao.updateAccountToken(accountId, token)); } diff --git a/app/src/main/java/org/mian/gitnex/database/dao/DraftsDao.java b/app/src/main/java/org/mian/gitnex/database/dao/DraftsDao.java index 2411c273..eacf1155 100644 --- a/app/src/main/java/org/mian/gitnex/database/dao/DraftsDao.java +++ b/app/src/main/java/org/mian/gitnex/database/dao/DraftsDao.java @@ -9,7 +9,7 @@ import org.mian.gitnex.database.models.DraftWithRepository; import java.util.List; /** - * Author M M Arif + * @author M M Arif */ @Dao 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 97eebed7..92ad05d6 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 @@ -8,7 +8,7 @@ import org.mian.gitnex.database.models.Repository; import java.util.List; /** - * Author M M Arif + * @author M M Arif */ @Dao diff --git a/app/src/main/java/org/mian/gitnex/database/dao/UserAccountsDao.java b/app/src/main/java/org/mian/gitnex/database/dao/UserAccountsDao.java index 51a1ef79..adf5c8b7 100644 --- a/app/src/main/java/org/mian/gitnex/database/dao/UserAccountsDao.java +++ b/app/src/main/java/org/mian/gitnex/database/dao/UserAccountsDao.java @@ -8,7 +8,7 @@ import org.mian.gitnex.database.models.UserAccount; import java.util.List; /** - * Author M M Arif + * @author M M Arif */ @Dao @@ -44,6 +44,9 @@ public interface UserAccountsDao { @Query("UPDATE UserAccounts SET serverVersion = :serverVersion WHERE accountId = :accountId") void updateServerVersion(String serverVersion, int accountId); + @Query("UPDATE UserAccounts SET maxResponseItems = :maxResponseItems, defaultPagingNumber = :defaultPagingNumber WHERE accountId = :accountId") + void updateServerPagingLimit(int maxResponseItems, int defaultPagingNumber, int accountId); + @Query("UPDATE UserAccounts SET accountName = :accountName WHERE accountId = :accountId") void updateAccountName(String accountName, int accountId); diff --git a/app/src/main/java/org/mian/gitnex/database/db/GitnexDatabase.java b/app/src/main/java/org/mian/gitnex/database/db/GitnexDatabase.java index c6747fe0..ed74a9b1 100644 --- a/app/src/main/java/org/mian/gitnex/database/db/GitnexDatabase.java +++ b/app/src/main/java/org/mian/gitnex/database/db/GitnexDatabase.java @@ -15,11 +15,11 @@ import org.mian.gitnex.database.models.Repository; import org.mian.gitnex.database.models.UserAccount; /** - * Author M M Arif + * @author M M Arif */ @Database(entities = {Draft.class, Repository.class, UserAccount.class}, - version = 4, exportSchema = false) + version = 5, exportSchema = false) public abstract class GitnexDatabase extends RoomDatabase { private static final String DB_NAME = "gitnex"; @@ -52,6 +52,15 @@ public abstract class GitnexDatabase extends RoomDatabase { } }; + private static final Migration MIGRATION_4_5 = new Migration(4, 5) { + + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE 'userAccounts' ADD COLUMN 'maxResponseItems' INTEGER NOT NULL DEFAULT 50"); + database.execSQL("ALTER TABLE 'userAccounts' ADD COLUMN 'defaultPagingNumber' INTEGER NOT NULL DEFAULT 30"); + } + }; + public static GitnexDatabase getDatabaseInstance(Context context) { if (gitnexDatabase == null) { @@ -61,7 +70,7 @@ public abstract class GitnexDatabase extends RoomDatabase { gitnexDatabase = Room.databaseBuilder(context, GitnexDatabase.class, DB_NAME) // .fallbackToDestructiveMigration() .allowMainThreadQueries() - .addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4) + .addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5) .build(); } diff --git a/app/src/main/java/org/mian/gitnex/database/models/Draft.java b/app/src/main/java/org/mian/gitnex/database/models/Draft.java index 4792354c..d0b14f45 100644 --- a/app/src/main/java/org/mian/gitnex/database/models/Draft.java +++ b/app/src/main/java/org/mian/gitnex/database/models/Draft.java @@ -9,7 +9,7 @@ import java.io.Serializable; import static androidx.room.ForeignKey.CASCADE; /** - * Author M M Arif + * @author M M Arif */ @Entity(tableName = "Drafts", foreignKeys = @ForeignKey(entity = Repository.class, parentColumns = "repositoryId", childColumns = "draftRepositoryId", onDelete = CASCADE), indices = {@Index("draftRepositoryId")}) 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 e835cb7e..c97c8fec 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 @@ -1,7 +1,7 @@ package org.mian.gitnex.database.models; /** - * Author M M Arif + * @author M M Arif */ public class DraftWithRepository { diff --git a/app/src/main/java/org/mian/gitnex/database/models/Repository.java b/app/src/main/java/org/mian/gitnex/database/models/Repository.java index 8c340818..f89c864e 100644 --- a/app/src/main/java/org/mian/gitnex/database/models/Repository.java +++ b/app/src/main/java/org/mian/gitnex/database/models/Repository.java @@ -8,7 +8,7 @@ import java.io.Serializable; import static androidx.room.ForeignKey.CASCADE; /** - * Author M M Arif + * @author M M Arif */ @Entity(tableName = "Repositories", foreignKeys = @ForeignKey(entity = UserAccount.class, diff --git a/app/src/main/java/org/mian/gitnex/database/models/UserAccount.java b/app/src/main/java/org/mian/gitnex/database/models/UserAccount.java index 8a07ef26..f69cdb31 100644 --- a/app/src/main/java/org/mian/gitnex/database/models/UserAccount.java +++ b/app/src/main/java/org/mian/gitnex/database/models/UserAccount.java @@ -6,7 +6,7 @@ import androidx.room.PrimaryKey; import java.io.Serializable; /** - * Author M M Arif + * @author M M Arif */ @Entity(tableName = "userAccounts") @@ -23,6 +23,8 @@ public class UserAccount implements Serializable { @Nullable private String serverVersion; private boolean isLoggedIn; + private int maxResponseItems; + private int defaultPagingNumber; public int getAccountId() { return accountId; @@ -82,4 +84,20 @@ public class UserAccount implements Serializable { isLoggedIn = loggedIn; } + public int getMaxResponseItems() { + return maxResponseItems; + } + + public void setMaxResponseItems(int maxResponseItems) { + this.maxResponseItems = maxResponseItems; + } + + public int getDefaultPagingNumber() { + return defaultPagingNumber; + } + + public void setDefaultPagingNumber(int defaultPagingNumber) { + this.defaultPagingNumber = defaultPagingNumber; + } + } diff --git a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetMyIssuesFilterFragment.java b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetMyIssuesFilterFragment.java index 69d0e75d..6bbcd271 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetMyIssuesFilterFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetMyIssuesFilterFragment.java @@ -35,6 +35,11 @@ public class BottomSheetMyIssuesFilterFragment extends BottomSheetDialogFragment dismiss(); }); + bottomSheetIssuesFilterBinding.assignedToMe.setOnClickListener(v12 -> { + bmListener.onButtonClicked("assignedToMe"); + dismiss(); + }); + return bottomSheetIssuesFilterBinding.getRoot(); } diff --git a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetOrganizationFragment.java b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetOrganizationFragment.java index fe4e9dd8..8cc84b5f 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetOrganizationFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetOrganizationFragment.java @@ -13,7 +13,7 @@ import org.mian.gitnex.databinding.BottomSheetOrganizationBinding; import org.mian.gitnex.structs.BottomSheetListener; /** - * Author M M Arif + * @author M M Arif */ public class BottomSheetOrganizationFragment extends BottomSheetDialogFragment { @@ -40,7 +40,7 @@ public class BottomSheetOrganizationFragment extends BottomSheetDialogFragment { bottomSheetOrganizationBinding.createTeam.setVisibility(View.GONE); } if(!permissions.isCanCreateRepository() || !permissions.isIsOwner()) { - bottomSheetOrganizationBinding.orgCreate.setVisibility(View.GONE); + bottomSheetOrganizationBinding.organizationHeadFrame.setVisibility(View.GONE); bottomSheetOrganizationBinding.orgCreateSection.setVisibility(View.GONE); bottomSheetOrganizationBinding.orgDivider.setVisibility(View.GONE); } @@ -70,6 +70,18 @@ public class BottomSheetOrganizationFragment extends BottomSheetDialogFragment { dismiss(); }); + bottomSheetOrganizationBinding.share.setOnClickListener(v1 -> { + + bmListener.onButtonClicked("share"); + dismiss(); + }); + + bottomSheetOrganizationBinding.open.setOnClickListener(v1 -> { + + bmListener.onButtonClicked("open"); + dismiss(); + }); + return bottomSheetOrganizationBinding.getRoot(); } diff --git a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java index 56a483a3..f0239d5a 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java @@ -1,9 +1,6 @@ package org.mian.gitnex.fragments; -import android.content.ClipData; -import android.content.ClipboardManager; import android.content.Context; -import android.content.Intent; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; @@ -23,7 +20,7 @@ import org.mian.gitnex.activities.IssueDetailActivity; import org.mian.gitnex.activities.MergePullRequestActivity; import org.mian.gitnex.databinding.BottomSheetSingleIssueBinding; import org.mian.gitnex.helpers.AlertDialogs; -import org.mian.gitnex.helpers.Toasty; +import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.contexts.IssueContext; import org.mian.gitnex.structs.BottomSheetListener; import org.mian.gitnex.views.ReactionSpinner; @@ -84,9 +81,7 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { if(issue.getIssueType().equalsIgnoreCase("Pull")) { - binding.editIssue.setText(R.string.editPrText); - binding.copyIssueUrl.setText(R.string.copyPrUrlText); - binding.shareIssue.setText(R.string.sharePr); + binding.editIssue.setText(R.string.menuEditText); boolean canPushPullSource = issue.getPullRequest().getHead().getRepo().getPermissions().isPush(); if(issue.getPullRequest().isMerged() || issue.getIssue().getState().equals("closed")) { @@ -176,35 +171,32 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { binding.shareIssue.setOnClickListener(v1 -> { - Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); - sharingIntent.setType("text/plain"); - sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getResources().getString(R.string.hash) + issue.getIssueIndex() + " " + issue.getIssue().getTitle()); - sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, issue.getIssue().getHtmlUrl()); - startActivity(Intent.createChooser(sharingIntent, getResources().getString(R.string.hash) + issue.getIssueIndex() + " " + issue.getIssue().getTitle())); - + AppUtil.sharingIntent(ctx, issue.getIssue().getHtmlUrl()); dismiss(); }); binding.copyIssueUrl.setOnClickListener(v12 -> { - // copy to clipboard - ClipboardManager clipboard = (ClipboardManager) Objects.requireNonNull(ctx).getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText("issueUrl", issue.getIssue().getHtmlUrl()); - assert clipboard != null; - clipboard.setPrimaryClip(clip); - - Toasty.info(ctx, ctx.getString(R.string.copyIssueUrlToastMsg)); - + AppUtil.copyToClipboard(ctx, issue.getIssue().getHtmlUrl(), ctx.getString(R.string.copyIssueUrlToastMsg)); dismiss(); }); + binding.open.setOnClickListener(v12 -> { + + AppUtil.openUrlInBrowser(ctx, issue.getIssue().getHtmlUrl()); + dismiss(); + }); + + if(issue.getIssueType().equalsIgnoreCase("pull")) { + binding.bottomSheetHeader.setText(R.string.pullRequest); + } + if(issue.getIssue().getState().equals("open")) { // close issue if(!userIsCreator && !canPush) { binding.closeIssue.setVisibility(View.GONE); - binding.dividerCloseReopenIssue.setVisibility(View.GONE); } else if(issue.getIssueType().equalsIgnoreCase("Pull")) { - binding.closeIssue.setText(R.string.closePr); + binding.closeIssue.setText(R.string.close); } binding.closeIssue.setOnClickListener(closeSingleIssue -> { IssueActions.closeReopenIssue(ctx, "closed", issue); @@ -213,16 +205,10 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { } else if(issue.getIssue().getState().equals("closed")) { if(userIsCreator || canPush) { - if(issue.getIssueType().equalsIgnoreCase("Pull")) { - binding.closeIssue.setText(R.string.reopenPr); - } - else { - binding.closeIssue.setText(R.string.reOpenIssue); - } + binding.closeIssue.setText(R.string.reopen); } else { binding.closeIssue.setVisibility(View.GONE); - binding.dividerCloseReopenIssue.setVisibility(View.GONE); } binding.closeIssue.setOnClickListener(closeSingleIssue -> { IssueActions.closeReopenIssue(ctx, "open", issue); @@ -259,10 +245,15 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { binding.editIssue.setVisibility(View.GONE); binding.editLabels.setVisibility(View.GONE); binding.closeIssue.setVisibility(View.GONE); - binding.dividerCloseReopenIssue.setVisibility(View.GONE); binding.addRemoveAssignees.setVisibility(View.GONE); binding.commentReactionButtons.setVisibility(View.GONE); - binding.shareDivider.setVisibility(View.GONE); + binding.reactionDivider.setVisibility(View.GONE); + binding.bottomSheetHeaderFrame.setVisibility(View.GONE); + binding.mergePullRequest.setVisibility(View.GONE); + binding.updatePullRequest.setVisibility(View.GONE); + if(issue.getIssueType().equalsIgnoreCase("issue")) { + binding.issuePrDivider.setVisibility(View.GONE); + } } else if(!canPush) { binding.addRemoveAssignees.setVisibility(View.GONE); 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 ea3e7862..bf826b0e 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/ExploreIssuesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/ExploreIssuesFragment.java @@ -26,6 +26,7 @@ import org.mian.gitnex.viewmodels.IssuesViewModel; public class ExploreIssuesFragment extends Fragment { + private IssuesViewModel issuesViewModel; private FragmentSearchIssuesBinding viewBinding; private ExploreIssuesAdapter adapter; private int page = 1; @@ -35,6 +36,7 @@ public class ExploreIssuesFragment extends Fragment { viewBinding = FragmentSearchIssuesBinding.inflate(inflater, container, false); setHasOptionsMenu(true); + issuesViewModel = new ViewModelProvider(this).get(IssuesViewModel.class); viewBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { @@ -55,9 +57,7 @@ public class ExploreIssuesFragment extends Fragment { private void fetchDataAsync(String searchKeyword) { - IssuesViewModel issuesModel = new ViewModelProvider(this).get(IssuesViewModel.class); - - issuesModel.getIssuesList(searchKeyword, "issues", null, "open", getContext()).observe(getViewLifecycleOwner(), issuesListMain -> { + issuesViewModel.getIssuesList(searchKeyword, "issues", null, "open", null, getContext()).observe(getViewLifecycleOwner(), issuesListMain -> { adapter = new ExploreIssuesAdapter(issuesListMain, getContext()); adapter.setLoadMoreListener(new ExploreIssuesAdapter.OnLoadMoreListener() { @@ -66,7 +66,7 @@ public class ExploreIssuesFragment extends Fragment { public void onLoadMore() { page += 1; - IssuesViewModel.loadMoreIssues(searchKeyword, "issues", null, "open", page, getContext(), adapter); + issuesViewModel.loadMoreIssues(searchKeyword, "issues", null, "open", page, null, getContext(), adapter); viewBinding.progressBar.setVisibility(View.VISIBLE); } 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 61773731..b4e12e70 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/ExploreRepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/ExploreRepositoriesFragment.java @@ -101,7 +101,7 @@ public class ExploreRepositoriesFragment extends Fragment { Call call = RetrofitClient .getApiInterface(context).repoSearch(searchKeyword, includeTopic, includeDescription, null, null, null, null, - null, null, includeTemplate, onlyArchived, null, null, null, null, 1, resultLimit); + repoTypeInclude, null, includeTemplate, onlyArchived, null, null, sort, order, 1, resultLimit); call.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { @@ -141,7 +141,7 @@ public class ExploreRepositoriesFragment extends Fragment { viewBinding.progressBar.setVisibility(View.VISIBLE); Call call = RetrofitClient.getApiInterface(context) .repoSearch(searchKeyword, includeTopic, includeDescription, null, null, null, null, - null, null, includeTemplate, onlyArchived, null, null, null, null, page, resultLimit); + repoTypeInclude, null, includeTemplate, onlyArchived, null, null, sort, order, page, resultLimit); call.enqueue(new Callback<>() { @Override 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 32d206d9..5a1d97ce 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/ExploreUsersFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/ExploreUsersFragment.java @@ -83,7 +83,7 @@ public class ExploreUsersFragment extends Fragment { private void loadInitial(String searchKeyword, int resultLimit) { Call call = RetrofitClient - .getApiInterface(context).userSearch(searchKeyword, null, resultLimit, 1); + .getApiInterface(context).userSearch(searchKeyword, null, 1, resultLimit); call.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { @@ -121,7 +121,7 @@ public class ExploreUsersFragment extends Fragment { private void loadMore(String searchKeyword, int resultLimit, int page) { viewBinding.progressBar.setVisibility(View.VISIBLE); - Call call = RetrofitClient.getApiInterface(context).userSearch(searchKeyword, null, resultLimit, page); + Call call = RetrofitClient.getApiInterface(context).userSearch(searchKeyword, null, page, resultLimit); call.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { 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 e40f7f3e..3b6cdcbd 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/IssuesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/IssuesFragment.java @@ -4,7 +4,6 @@ import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -19,13 +18,13 @@ import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import org.gitnex.tea4j.v2.models.Issue; import org.mian.gitnex.R; -import org.mian.gitnex.activities.BaseActivity; import org.mian.gitnex.activities.RepoDetailActivity; import org.mian.gitnex.adapters.IssuesAdapter; import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.databinding.FragmentIssuesBinding; import org.mian.gitnex.helpers.Constants; import org.mian.gitnex.helpers.SnackBar; +import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.contexts.RepositoryContext; import java.util.ArrayList; import java.util.List; @@ -34,7 +33,7 @@ import retrofit2.Callback; import retrofit2.Response; /** - * Author M M Arif + * @author M M Arif */ public class IssuesFragment extends Fragment { @@ -49,8 +48,7 @@ public class IssuesFragment extends Fragment { private IssuesAdapter adapter; private int pageSize = Constants.issuesPageInit; - private final String TAG = Constants.tagIssuesList; - private int resultLimit = Constants.resultLimitOldGiteaInstances; + private int resultLimit; private final String requestType = Constants.issuesRequestType; private RepositoryContext repository; @@ -71,16 +69,13 @@ public class IssuesFragment extends Fragment { repository = RepositoryContext.fromBundle(requireArguments()); - // if gitea is 1.12 or higher use the new limit - if(((BaseActivity) requireActivity()).getAccount().requiresVersion("1.12.0")) { - resultLimit = Constants.resultLimitNewGiteaInstances; - } + resultLimit = Constants.getCurrentResultLimit(context); issuesList = new ArrayList<>(); fragmentIssuesBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { fragmentIssuesBinding.pullToRefresh.setRefreshing(false); - loadInitial(repository.getOwner(), repository.getName(), resultLimit, requestType, repository.getIssueState().toString(), repository.getIssueMilestoneFilterName()); + loadInitial(repository.getOwner(), repository.getName(), resultLimit, requestType, repository.getIssueState().toString(), repository.getIssueMilestoneFilterName(), null); adapter.notifyDataChanged(); }, 200)); @@ -121,7 +116,7 @@ public class IssuesFragment extends Fragment { fragmentIssuesBinding.progressBar.setVisibility(View.VISIBLE); fragmentIssuesBinding.noDataIssues.setVisibility(View.GONE); - loadInitial(repository.getOwner(), repository.getName(), resultLimit, requestType, issueState, repository.getIssueMilestoneFilterName()); + loadInitial(repository.getOwner(), repository.getName(), resultLimit, requestType, issueState, repository.getIssueMilestoneFilterName(), null); fragmentIssuesBinding.recyclerView.setAdapter(adapter); }); @@ -141,11 +136,11 @@ public class IssuesFragment extends Fragment { fragmentIssuesBinding.progressBar.setVisibility(View.VISIBLE); fragmentIssuesBinding.noDataIssues.setVisibility(View.GONE); - loadInitial(repository.getOwner(), repository.getName(), resultLimit, requestType, repository.getIssueState().toString(), filterIssueByMilestone); + loadInitial(repository.getOwner(), repository.getName(), resultLimit, requestType, repository.getIssueState().toString(), filterIssueByMilestone, null); fragmentIssuesBinding.recyclerView.setAdapter(adapter); }); - loadInitial(repository.getOwner(), repository.getName(), resultLimit, requestType, repository.getIssueState().toString(), repository.getIssueMilestoneFilterName()); + loadInitial(repository.getOwner(), repository.getName(), resultLimit, requestType, repository.getIssueState().toString(), repository.getIssueMilestoneFilterName(), null); return fragmentIssuesBinding.getRoot(); } @@ -154,17 +149,18 @@ public class IssuesFragment extends Fragment { public void onResume() { super.onResume(); if(resumeIssues) { - loadInitial(repository.getOwner(), repository.getName(), resultLimit, requestType, repository.getIssueState().toString(), repository.getIssueMilestoneFilterName()); + loadInitial(repository.getOwner(), repository.getName(), resultLimit, requestType, repository.getIssueState().toString(), repository.getIssueMilestoneFilterName(), null); resumeIssues = false; } } - private void loadInitial(String repoOwner, String repoName, int resultLimit, String requestType, String issueState, String filterByMilestone) { + private void loadInitial(String repoOwner, String repoName, int resultLimit, String requestType, String issueState, String filterByMilestone, String query) { - Call> call = RetrofitClient.getApiInterface(context).issueListIssues(repoOwner, repoName, issueState, null, null, requestType, + Call> call = RetrofitClient.getApiInterface(context).issueListIssues(repoOwner, repoName, issueState, null, query, requestType, filterByMilestone, null, null, null, null, null, 1, resultLimit); - call.enqueue(new Callback>() { + call.enqueue(new Callback<>() { + @Override public void onResponse(@NonNull Call> call, @NonNull Response> response) { @@ -188,13 +184,13 @@ public class IssuesFragment extends Fragment { fragmentIssuesBinding.progressBar.setVisibility(View.GONE); } else { - Log.e(TAG, String.valueOf(response.code())); + Toasty.error(context, getString(R.string.genericError)); } } @Override public void onFailure(@NonNull Call> call, @NonNull Throwable t) { - Log.e(TAG, t.toString()); + Toasty.error(context, getString(R.string.genericServerResponseError)); } }); } @@ -205,10 +201,11 @@ public class IssuesFragment extends Fragment { Call> call = RetrofitClient.getApiInterface(context).issueListIssues(repoOwner, repoName, issueState, null, null, requestType, filterByMilestone, null, null, null, null, null, page, resultLimit); - call.enqueue(new Callback>() { + call.enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call> call, @NonNull Response> response) { + if(response.code() == 200) { List result = response.body(); assert result != null; @@ -224,13 +221,13 @@ public class IssuesFragment extends Fragment { fragmentIssuesBinding.progressBar.setVisibility(View.GONE); } else { - Log.e(TAG, String.valueOf(response.code())); + Toasty.error(context, getString(R.string.genericError)); } } @Override public void onFailure(@NonNull Call> call, @NonNull Throwable t) { - Log.e(TAG, t.toString()); + Toasty.error(context, getString(R.string.genericServerResponseError)); } }); } @@ -258,30 +255,16 @@ public class IssuesFragment extends Fragment { @Override public boolean onQueryTextSubmit(String query) { + loadInitial(repository.getOwner(), repository.getName(), resultLimit, requestType, repository.getIssueState().toString(), repository.getIssueMilestoneFilterName(), query); + searchView.setQuery(null, false); + searchItem.collapseActionView(); return false; } @Override public boolean onQueryTextChange(String newText) { - filter(newText); return false; } }); } - - private void filter(String text) { - - List arr = new ArrayList<>(); - - for(Issue d : issuesList) { - if(d == null || d.getTitle() == null || d.getBody() == null) { - continue; - } - if(d.getTitle().toLowerCase().contains(text) || d.getBody().toLowerCase().contains(text) || String.valueOf(d.getNumber()).startsWith(text)) { - arr.add(d); - } - } - - adapter.updateList(arr); - } } 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 468e069f..97b55a07 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/LabelsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/LabelsFragment.java @@ -22,11 +22,12 @@ import org.mian.gitnex.helpers.contexts.RepositoryContext; import org.mian.gitnex.viewmodels.LabelsViewModel; /** - * Author M M Arif + * @author M M Arif */ public class LabelsFragment extends Fragment { + private LabelsViewModel labelsViewModel; private ProgressBar mProgressBar; private RecyclerView mRecyclerView; private LabelsAdapter adapter; @@ -55,6 +56,7 @@ public class LabelsFragment extends Fragment { FragmentLabelsBinding fragmentLabelsBinding = FragmentLabelsBinding.inflate(inflater, container, false); setHasOptionsMenu(true); + labelsViewModel = new ViewModelProvider(this).get(LabelsViewModel.class); final SwipeRefreshLayout swipeRefresh = fragmentLabelsBinding.pullToRefresh; noData = fragmentLabelsBinding.noData; @@ -72,7 +74,7 @@ public class LabelsFragment extends Fragment { swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { swipeRefresh.setRefreshing(false); - LabelsViewModel.loadLabelsList(repository.getOwner(), repository.getName(), getContext()); + labelsViewModel.loadLabelsList(repository.getOwner(), repository.getName(), getContext()); }, 200)); fetchDataAsync(repository.getOwner(), repository.getName()); @@ -87,7 +89,7 @@ public class LabelsFragment extends Fragment { if(CreateLabelActivity.refreshLabels) { - LabelsViewModel.loadLabelsList(repository.getOwner(), repository.getName(), getContext()); + labelsViewModel.loadLabelsList(repository.getOwner(), repository.getName(), getContext()); CreateLabelActivity.refreshLabels = false; } } 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 79e807a1..f861efe9 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/MilestonesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/MilestonesFragment.java @@ -33,6 +33,7 @@ import java.util.List; public class MilestonesFragment extends Fragment { + private MilestonesViewModel milestonesViewModel; private FragmentMilestonesBinding viewBinding; private Menu menu; private List dataList; @@ -60,6 +61,7 @@ public class MilestonesFragment extends Fragment { viewBinding = FragmentMilestonesBinding.inflate(inflater, container, false); setHasOptionsMenu(true); Context ctx = getContext(); + milestonesViewModel = new ViewModelProvider(this).get(MilestonesViewModel.class); milestoneId = requireActivity().getIntent().getStringExtra("milestoneId"); requireActivity().getIntent().removeExtra("milestoneId"); @@ -106,8 +108,6 @@ public class MilestonesFragment extends Fragment { private void fetchDataAsync(String repoOwner, String repoName, String state) { - MilestonesViewModel milestonesViewModel = new ViewModelProvider(this).get(MilestonesViewModel.class); - milestonesViewModel.getMilestonesList(repoOwner, repoName, state, getContext()).observe(getViewLifecycleOwner(), milestonesListMain -> { adapter = new MilestonesAdapter(getContext(), milestonesListMain, repository); @@ -117,7 +117,7 @@ public class MilestonesFragment extends Fragment { public void onLoadMore() { page += 1; - MilestonesViewModel.loadMoreMilestones(repoOwner, repoName, page, state, getContext(), adapter); + milestonesViewModel.loadMoreMilestones(repoOwner, repoName, page, state, getContext(), adapter); viewBinding.progressBar.setVisibility(View.VISIBLE); } 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 86e99d9a..357fdac2 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/MyIssuesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/MyIssuesFragment.java @@ -27,17 +27,20 @@ import org.mian.gitnex.viewmodels.IssuesViewModel; public class MyIssuesFragment extends Fragment { + 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) { fragmentIssuesBinding = FragmentIssuesBinding.inflate(inflater, container, false); setHasOptionsMenu(true); + issuesViewModel = new ViewModelProvider(this).get(IssuesViewModel.class); fragmentIssuesBinding.recyclerView.setHasFixedSize(true); fragmentIssuesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); @@ -45,40 +48,40 @@ public class MyIssuesFragment extends Fragment { DividerItemDecoration.VERTICAL); fragmentIssuesBinding.recyclerView.addItemDecoration(dividerItemDecoration); - ((MainActivity) requireActivity()).setFragmentRefreshListenerMyIssues(myIssuesState -> { + ((MainActivity) requireActivity()).setFragmentRefreshListenerMyIssues(myIssues -> { - state = myIssuesState; - if(myIssuesState.equals("open")) { - menu.getItem(1).setIcon(R.drawable.ic_filter); - } - else { + state = myIssues; + if(state.equals("closed")) { menu.getItem(1).setIcon(R.drawable.ic_filter_closed); } + else { + menu.getItem(1).setIcon(R.drawable.ic_filter); + } + + assignedToMe = state.equals("assignedToMe"); fragmentIssuesBinding.progressBar.setVisibility(View.VISIBLE); fragmentIssuesBinding.noDataIssues.setVisibility(View.GONE); - fetchDataAsync(null, myIssuesState); + fetchDataAsync(null, state, assignedToMe); }); fragmentIssuesBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { page = 1; fragmentIssuesBinding.pullToRefresh.setRefreshing(false); - IssuesViewModel.loadIssuesList(null, "issues", true, state, getContext()); + issuesViewModel.loadIssuesList(null, "issues", true, state, assignedToMe, getContext()); fragmentIssuesBinding.progressBar.setVisibility(View.VISIBLE); }, 50)); - fetchDataAsync(null, state); + fetchDataAsync(null, state, assignedToMe); return fragmentIssuesBinding.getRoot(); }; - private void fetchDataAsync(String query, String state) { + private void fetchDataAsync(String query, String state, boolean assignedToMe) { - IssuesViewModel issuesModel = new ViewModelProvider(this).get(IssuesViewModel.class); - - issuesModel.getIssuesList(query, "issues", true, state, getContext()).observe(getViewLifecycleOwner(), issuesListMain -> { + issuesViewModel.getIssuesList(query, "issues", true, state, assignedToMe, getContext()).observe(getViewLifecycleOwner(), issuesListMain -> { adapter = new ExploreIssuesAdapter(issuesListMain, getContext()); adapter.setLoadMoreListener(new ExploreIssuesAdapter.OnLoadMoreListener() { @@ -87,7 +90,7 @@ public class MyIssuesFragment extends Fragment { public void onLoadMore() { page += 1; - IssuesViewModel.loadMoreIssues(query, "issues", true, state, page, getContext(), adapter); + issuesViewModel.loadMoreIssues(query, "issues", true, state, page, assignedToMe, getContext(), adapter); fragmentIssuesBinding.progressBar.setVisibility(View.VISIBLE); } @@ -128,7 +131,7 @@ public class MyIssuesFragment extends Fragment { @Override public boolean onQueryTextSubmit(String query) { - fetchDataAsync(query, state); + fetchDataAsync(query, state, assignedToMe); searchView.setQuery(null, false); searchItem.collapseActionView(); return false; diff --git a/app/src/main/java/org/mian/gitnex/fragments/MyProfileEmailsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/MyProfileEmailsFragment.java index 2a4c5b08..388de758 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/MyProfileEmailsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/MyProfileEmailsFragment.java @@ -20,11 +20,12 @@ import org.mian.gitnex.databinding.FragmentProfileEmailsBinding; import org.mian.gitnex.viewmodels.ProfileEmailsViewModel; /** - * Author M M Arif + * @author M M Arif */ public class MyProfileEmailsFragment extends Fragment { + private ProfileEmailsViewModel profileEmailsViewModel; public static boolean refreshEmails = false; private ProgressBar mProgressBar; @@ -40,6 +41,7 @@ public class MyProfileEmailsFragment extends Fragment { Bundle savedInstanceState) { FragmentProfileEmailsBinding fragmentProfileEmailsBinding = FragmentProfileEmailsBinding.inflate(inflater, container, false); + profileEmailsViewModel = new ViewModelProvider(this).get(ProfileEmailsViewModel.class); final SwipeRefreshLayout swipeRefresh = fragmentProfileEmailsBinding.pullToRefresh; @@ -57,21 +59,18 @@ public class MyProfileEmailsFragment extends Fragment { swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { swipeRefresh.setRefreshing(false); - ProfileEmailsViewModel.loadEmailsList(getContext()); + profileEmailsViewModel.loadEmailsList(getContext()); }, 200)); fetchDataAsync(); return fragmentProfileEmailsBinding.getRoot(); - } private void fetchDataAsync() { - ProfileEmailsViewModel profileEmailModel = new ViewModelProvider(this).get(ProfileEmailsViewModel.class); - - profileEmailModel.getEmailsList(getContext()).observe(getViewLifecycleOwner(), emailsListMain -> { + profileEmailsViewModel.getEmailsList(getContext()).observe(getViewLifecycleOwner(), emailsListMain -> { adapter = new MyProfileEmailsAdapter(getContext(), emailsListMain); if(adapter.getItemCount() > 0) { mRecyclerView.setAdapter(adapter); @@ -89,13 +88,11 @@ public class MyProfileEmailsFragment extends Fragment { @Override public void onResume() { - super.onResume(); if(refreshEmails) { - ProfileEmailsViewModel.loadEmailsList(getContext()); + profileEmailsViewModel.loadEmailsList(getContext()); refreshEmails = false; } } - } 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 ac460138..06a628cf 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java @@ -31,20 +31,24 @@ import org.mian.gitnex.viewmodels.RepositoriesViewModel; public class MyRepositoriesFragment extends Fragment { + private RepositoriesViewModel repositoriesViewModel; private FragmentRepositoriesBinding fragmentRepositoriesBinding; private ReposListAdapter adapter; private int page = 1; - private final int resultLimit = Constants.resultLimitNewGiteaInstances; + private int resultLimit; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { fragmentRepositoriesBinding = FragmentRepositoriesBinding.inflate(inflater, container, false); - setHasOptionsMenu(true); ((MainActivity) requireActivity()).setActionBarTitle(getResources().getString(R.string.navMyRepos)); + repositoriesViewModel = new ViewModelProvider(this).get(RepositoriesViewModel.class); + final String userLogin = ((BaseActivity) requireActivity()).getAccount().getAccount().getUserName(); + resultLimit = Constants.getCurrentResultLimit(getContext()); + fragmentRepositoriesBinding.addNewRepo.setOnClickListener(view -> { Intent intent = new Intent(view.getContext(), CreateRepoActivity.class); startActivity(intent); @@ -71,9 +75,7 @@ public class MyRepositoriesFragment extends Fragment { private void fetchDataAsync(String userLogin) { - RepositoriesViewModel reposModel = new ViewModelProvider(this).get(RepositoriesViewModel.class); - - reposModel.getRepositories(page, resultLimit, userLogin, "myRepos", null, getContext()).observe(getViewLifecycleOwner(), reposListMain -> { + repositoriesViewModel.getRepositories(page, resultLimit, userLogin, "myRepos", null, getContext()).observe(getViewLifecycleOwner(), reposListMain -> { adapter = new ReposListAdapter(reposListMain, getContext()); adapter.setLoadMoreListener(new ReposListAdapter.OnLoadMoreListener() { @@ -82,7 +84,7 @@ public class MyRepositoriesFragment extends Fragment { public void onLoadMore() { page += 1; - RepositoriesViewModel.loadMoreRepos(page, resultLimit, userLogin, "myRepos", null, getContext(), adapter); + repositoriesViewModel.loadMoreRepos(page, resultLimit, userLogin, "myRepos", null, getContext(), adapter); fragmentRepositoriesBinding.progressBar.setVisibility(View.VISIBLE); } 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 7650a6ce..088d286a 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/OrganizationLabelsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationLabelsFragment.java @@ -21,11 +21,12 @@ import org.mian.gitnex.databinding.FragmentLabelsBinding; import org.mian.gitnex.viewmodels.OrganizationLabelsViewModel; /** - * Author M M Arif + * @author M M Arif */ public class OrganizationLabelsFragment extends Fragment { + private OrganizationLabelsViewModel organizationLabelsViewModel; private ProgressBar mProgressBar; private RecyclerView mRecyclerView; private LabelsAdapter adapter; @@ -60,6 +61,7 @@ public class OrganizationLabelsFragment extends Fragment { FragmentLabelsBinding fragmentLabelsBinding = FragmentLabelsBinding.inflate(inflater, container, false); setHasOptionsMenu(true); + organizationLabelsViewModel = new ViewModelProvider(this).get(OrganizationLabelsViewModel.class); final SwipeRefreshLayout swipeRefresh = fragmentLabelsBinding.pullToRefresh; noData = fragmentLabelsBinding.noData; @@ -77,7 +79,7 @@ public class OrganizationLabelsFragment extends Fragment { swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { swipeRefresh.setRefreshing(false); - OrganizationLabelsViewModel.loadOrgLabelsList(repoOwner, getContext(), mProgressBar, noData); + organizationLabelsViewModel.loadOrgLabelsList(repoOwner, getContext(), mProgressBar, noData); }, 200)); @@ -94,15 +96,13 @@ public class OrganizationLabelsFragment extends Fragment { if(CreateLabelActivity.refreshLabels) { - OrganizationLabelsViewModel.loadOrgLabelsList(repoOwner, getContext(), mProgressBar, noData); + organizationLabelsViewModel.loadOrgLabelsList(repoOwner, getContext(), mProgressBar, noData); CreateLabelActivity.refreshLabels = false; } } private void fetchDataAsync(String owner) { - OrganizationLabelsViewModel organizationLabelsViewModel = new ViewModelProvider(this).get(OrganizationLabelsViewModel.class); - organizationLabelsViewModel.getOrgLabelsList(owner, getContext(), mProgressBar, noData).observe(getViewLifecycleOwner(), labelsListMain -> { adapter = new LabelsAdapter(getContext(), labelsListMain, type, owner); 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 4b4a8f1b..5611800f 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamInfoReposFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamInfoReposFragment.java @@ -1,6 +1,5 @@ package org.mian.gitnex.fragments; -import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -19,7 +18,6 @@ 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.CreateRepoActivity; import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.adapters.ReposListAdapter; import org.mian.gitnex.databinding.FragmentRepositoriesBinding; @@ -33,12 +31,13 @@ import org.mian.gitnex.viewmodels.RepositoriesViewModel; public class OrganizationTeamInfoReposFragment extends Fragment { + private RepositoriesViewModel repositoriesViewModel; public static boolean repoAdded = false; private FragmentRepositoriesBinding fragmentRepositoriesBinding; private ReposListAdapter adapter; private int page = 1; - private final int resultLimit = Constants.resultLimitNewGiteaInstances; + private int resultLimit; private Team team; @@ -57,9 +56,12 @@ public class OrganizationTeamInfoReposFragment extends Fragment { fragmentRepositoriesBinding = FragmentRepositoriesBinding.inflate(inflater, container, false); + resultLimit = Constants.getCurrentResultLimit(getContext()); setHasOptionsMenu(true); team = (Team) requireArguments().getSerializable("team"); + repositoriesViewModel = new ViewModelProvider(this).get(RepositoriesViewModel.class); + fragmentRepositoriesBinding.addNewRepo.setVisibility(View.GONE); fragmentRepositoriesBinding.recyclerView.setHasFixedSize(true); @@ -83,9 +85,7 @@ public class OrganizationTeamInfoReposFragment extends Fragment { private void fetchDataAsync() { - RepositoriesViewModel reposModel = new ViewModelProvider(this).get(RepositoriesViewModel.class); - - reposModel.getRepositories(page, resultLimit, String.valueOf(team.getId()), "team", null, getContext()).observe(getViewLifecycleOwner(), reposListMain -> { + repositoriesViewModel.getRepositories(page, resultLimit, String.valueOf(team.getId()), "team", null, getContext()).observe(getViewLifecycleOwner(), reposListMain -> { adapter = new ReposListAdapter(reposListMain, getContext()); adapter.setLoadMoreListener(new ReposListAdapter.OnLoadMoreListener() { @@ -94,7 +94,7 @@ public class OrganizationTeamInfoReposFragment extends Fragment { public void onLoadMore() { page += 1; - RepositoriesViewModel.loadMoreRepos(page, resultLimit, String.valueOf(team.getId()), "team", null, getContext(), adapter); + repositoriesViewModel.loadMoreRepos(page, resultLimit, String.valueOf(team.getId()), "team", null, getContext(), adapter); fragmentRepositoriesBinding.progressBar.setVisibility(View.VISIBLE); } 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 92878895..480fe5d7 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java @@ -32,11 +32,12 @@ import org.mian.gitnex.viewmodels.OrganizationsViewModel; public class OrganizationsFragment extends Fragment { + private OrganizationsViewModel organizationsViewModel; public static boolean orgCreated = false; private FragmentOrganizationsBinding fragmentOrganizationsBinding; private OrganizationsListAdapter adapter; private int page = 1; - private final int resultLimit = Constants.resultLimitNewGiteaInstances; + private int resultLimit; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -45,6 +46,9 @@ public class OrganizationsFragment extends Fragment { setHasOptionsMenu(true); ((MainActivity) requireActivity()).setActionBarTitle(getResources().getString(R.string.navOrg)); + organizationsViewModel = new ViewModelProvider(this).get(OrganizationsViewModel.class); + + resultLimit = Constants.getCurrentResultLimit(getContext()); fragmentOrganizationsBinding.addNewOrganization.setOnClickListener(view -> { Intent intent = new Intent(view.getContext(), CreateOrganizationActivity.class); @@ -72,9 +76,7 @@ public class OrganizationsFragment extends Fragment { private void fetchDataAsync() { - OrganizationsViewModel orgModel = new ViewModelProvider(this).get(OrganizationsViewModel.class); - - orgModel.getUserOrg(page, resultLimit, getContext()).observe(getViewLifecycleOwner(), orgListMain -> { + organizationsViewModel.getUserOrg(page, resultLimit, getContext()).observe(getViewLifecycleOwner(), orgListMain -> { adapter = new OrganizationsListAdapter(orgListMain, getContext()); adapter.setLoadMoreListener(new OrganizationsListAdapter.OnLoadMoreListener() { @@ -83,7 +85,7 @@ public class OrganizationsFragment extends Fragment { public void onLoadMore() { page += 1; - OrganizationsViewModel.loadMoreOrgList(page, resultLimit, getContext(), adapter); + organizationsViewModel.loadMoreOrgList(page, resultLimit, getContext(), adapter); fragmentOrganizationsBinding.progressBar.setVisibility(View.VISIBLE); } @@ -113,7 +115,7 @@ public class OrganizationsFragment extends Fragment { super.onResume(); if(orgCreated) { - OrganizationsViewModel.loadOrgList(page, resultLimit, getContext()); + organizationsViewModel.loadOrgList(page, resultLimit, getContext()); orgCreated = false; } } 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 3fc12e9e..17491776 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java @@ -25,11 +25,12 @@ import org.mian.gitnex.viewmodels.ReleasesViewModel; import java.util.List; /** - * Author M M Arif + * @author M M Arif */ public class ReleasesFragment extends Fragment { + private ReleasesViewModel releasesViewModel; private ReleasesAdapter adapter; private TagsAdapter tagsAdapter; private RepositoryContext repository; @@ -38,7 +39,7 @@ public class ReleasesFragment extends Fragment { private int page = 1; private int pageReleases = 1; - public ReleasesFragment() { + public ReleasesFragment() { } public static ReleasesFragment newInstance(RepositoryContext repository) { @@ -59,6 +60,7 @@ public class ReleasesFragment extends Fragment { Bundle savedInstanceState) { fragmentReleasesBinding = FragmentReleasesBinding.inflate(inflater, container, false); + releasesViewModel = new ViewModelProvider(this).get(ReleasesViewModel.class); fragmentReleasesBinding.recyclerView.setHasFixedSize(true); fragmentReleasesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); @@ -70,9 +72,9 @@ public class ReleasesFragment extends Fragment { fragmentReleasesBinding.pullToRefresh.setRefreshing(false); if(repository.isReleasesViewTypeIsTag()) { - ReleasesViewModel.loadTagsList(repository.getOwner(), repository.getName(), getContext()); + releasesViewModel.loadTagsList(repository.getOwner(), repository.getName(), getContext()); } else { - ReleasesViewModel.loadReleasesList(repository.getOwner(), repository.getName(), getContext()); + releasesViewModel.loadReleasesList(repository.getOwner(), repository.getName(), getContext()); } fragmentReleasesBinding.progressBar.setVisibility(View.VISIBLE); @@ -86,9 +88,9 @@ public class ReleasesFragment extends Fragment { page = 1; pageReleases = 1; if(repository.isReleasesViewTypeIsTag()) { - ReleasesViewModel.loadTagsList(repository.getOwner(), repository.getName(), getContext()); + releasesViewModel.loadTagsList(repository.getOwner(), repository.getName(), getContext()); } else { - ReleasesViewModel.loadReleasesList(repository.getOwner(), repository.getName(), getContext()); + releasesViewModel.loadReleasesList(repository.getOwner(), repository.getName(), getContext()); } fragmentReleasesBinding.progressBar.setVisibility(View.VISIBLE); }); @@ -108,7 +110,7 @@ public class ReleasesFragment extends Fragment { @Override public void onLoadMore() { pageReleases += 1; - ReleasesViewModel.loadMoreReleases(owner, repo, pageReleases, getContext(), adapter); + releasesViewModel.loadMoreReleases(owner, repo, pageReleases, getContext(), adapter); fragmentReleasesBinding.progressBar.setVisibility(View.VISIBLE); } @@ -145,7 +147,7 @@ public class ReleasesFragment extends Fragment { @Override public void onLoadMore() { page += 1; - ReleasesViewModel.loadMoreTags(owner, repo , page, getContext(), tagsAdapter); + releasesViewModel.loadMoreTags(owner, repo , page, getContext(), tagsAdapter); fragmentReleasesBinding.progressBar.setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesByOrgFragment.java b/app/src/main/java/org/mian/gitnex/fragments/RepositoriesByOrgFragment.java index d4b2ad7b..f3722d65 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesByOrgFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/RepositoriesByOrgFragment.java @@ -28,10 +28,11 @@ import org.mian.gitnex.viewmodels.RepositoriesViewModel; public class RepositoriesByOrgFragment extends Fragment { + private RepositoriesViewModel repositoriesViewModel; private FragmentRepositoriesBinding fragmentRepositoriesBinding; private ReposListAdapter adapter; private int page = 1; - private final int resultLimit = Constants.resultLimitNewGiteaInstances; + private int resultLimit; private static final String getOrgName = null; private String orgName; @@ -57,8 +58,10 @@ public class RepositoriesByOrgFragment extends Fragment { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { fragmentRepositoriesBinding = FragmentRepositoriesBinding.inflate(inflater, container, false); - setHasOptionsMenu(true); + repositoriesViewModel = new ViewModelProvider(this).get(RepositoriesViewModel.class); + + resultLimit = Constants.getCurrentResultLimit(getContext()); fragmentRepositoriesBinding.addNewRepo.setVisibility(View.GONE); @@ -84,9 +87,7 @@ public class RepositoriesByOrgFragment extends Fragment { private void fetchDataAsync() { - RepositoriesViewModel reposModel = new ViewModelProvider(this).get(RepositoriesViewModel.class); - - reposModel.getRepositories(page, resultLimit, "", "org", orgName, getContext()).observe(getViewLifecycleOwner(), reposListMain -> { + repositoriesViewModel.getRepositories(page, resultLimit, "", "org", orgName, getContext()).observe(getViewLifecycleOwner(), reposListMain -> { adapter = new ReposListAdapter(reposListMain, getContext()); adapter.setLoadMoreListener(new ReposListAdapter.OnLoadMoreListener() { @@ -95,7 +96,7 @@ public class RepositoriesByOrgFragment extends Fragment { public void onLoadMore() { page += 1; - RepositoriesViewModel.loadMoreRepos(page, resultLimit, "", "org", orgName, getContext(), adapter); + repositoriesViewModel.loadMoreRepos(page, resultLimit, "", "org", orgName, getContext(), adapter); fragmentRepositoriesBinding.progressBar.setVisibility(View.VISIBLE); } @@ -126,7 +127,7 @@ public class RepositoriesByOrgFragment extends Fragment { super.onResume(); if(MainActivity.repoCreated) { - RepositoriesViewModel.loadReposList(page, resultLimit, null, "org", orgName, getContext()); + repositoriesViewModel.loadReposList(page, resultLimit, null, "org", orgName, getContext()); MainActivity.repoCreated = false; } 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 f5ab2e1c..30d2f42d 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java @@ -32,18 +32,21 @@ import org.mian.gitnex.viewmodels.RepositoriesViewModel; public class RepositoriesFragment extends Fragment { + private RepositoriesViewModel repositoriesViewModel; private FragmentRepositoriesBinding fragmentRepositoriesBinding; private ReposListAdapter adapter; private int page = 1; - private final int resultLimit = Constants.resultLimitNewGiteaInstances; + private int resultLimit; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { fragmentRepositoriesBinding = FragmentRepositoriesBinding.inflate(inflater, container, false); - setHasOptionsMenu(true); ((MainActivity) requireActivity()).setActionBarTitle(getResources().getString(R.string.navRepos)); + repositoriesViewModel = new ViewModelProvider(this).get(RepositoriesViewModel.class); + + resultLimit = Constants.getCurrentResultLimit(getContext()); fragmentRepositoriesBinding.addNewRepo.setOnClickListener(view -> { Intent intent = new Intent(view.getContext(), CreateRepoActivity.class); @@ -71,9 +74,7 @@ public class RepositoriesFragment extends Fragment { private void fetchDataAsync() { - RepositoriesViewModel reposModel = new ViewModelProvider(this).get(RepositoriesViewModel.class); - - reposModel.getRepositories(page, resultLimit, null, "repos", null, getContext()).observe(getViewLifecycleOwner(), reposListMain -> { + repositoriesViewModel.getRepositories(page, resultLimit, null, "repos", null, getContext()).observe(getViewLifecycleOwner(), reposListMain -> { adapter = new ReposListAdapter(reposListMain, getContext()); adapter.setLoadMoreListener(new ReposListAdapter.OnLoadMoreListener() { @@ -82,7 +83,7 @@ public class RepositoriesFragment extends Fragment { public void onLoadMore() { page += 1; - RepositoriesViewModel.loadMoreRepos(page, resultLimit, null, "repos", null, getContext(), adapter); + repositoriesViewModel.loadMoreRepos(page, resultLimit, null, "repos", null, getContext(), adapter); fragmentRepositoriesBinding.progressBar.setVisibility(View.VISIBLE); } 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 95da5a62..4d4fc2bf 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/StarredRepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/StarredRepositoriesFragment.java @@ -30,18 +30,21 @@ import org.mian.gitnex.viewmodels.RepositoriesViewModel; public class StarredRepositoriesFragment extends Fragment { + private RepositoriesViewModel repositoriesViewModel; private FragmentRepositoriesBinding fragmentRepositoriesBinding; private ReposListAdapter adapter; private int page = 1; - private final int resultLimit = Constants.resultLimitNewGiteaInstances; + private int resultLimit; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { fragmentRepositoriesBinding = FragmentRepositoriesBinding.inflate(inflater, container, false); - setHasOptionsMenu(true); ((MainActivity) requireActivity()).setActionBarTitle(getResources().getString(R.string.navStarredRepos)); + repositoriesViewModel = new ViewModelProvider(this).get(RepositoriesViewModel.class); + + resultLimit = Constants.getCurrentResultLimit(getContext()); fragmentRepositoriesBinding.addNewRepo.setOnClickListener(view -> { Intent intent = new Intent(view.getContext(), CreateRepoActivity.class); @@ -69,9 +72,7 @@ public class StarredRepositoriesFragment extends Fragment { private void fetchDataAsync() { - RepositoriesViewModel reposModel = new ViewModelProvider(this).get(RepositoriesViewModel.class); - - reposModel.getRepositories(page, resultLimit, "", "starredRepos", null, getContext()).observe(getViewLifecycleOwner(), reposListMain -> { + repositoriesViewModel.getRepositories(page, resultLimit, "", "starredRepos", null, getContext()).observe(getViewLifecycleOwner(), reposListMain -> { adapter = new ReposListAdapter(reposListMain, getContext()); adapter.setLoadMoreListener(new ReposListAdapter.OnLoadMoreListener() { @@ -80,7 +81,7 @@ public class StarredRepositoriesFragment extends Fragment { public void onLoadMore() { page += 1; - RepositoriesViewModel.loadMoreRepos(page, resultLimit, "", "starredRepos", null, getContext(), adapter); + repositoriesViewModel.loadMoreRepos(page, resultLimit, "", "starredRepos", null, getContext(), adapter); fragmentRepositoriesBinding.progressBar.setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/org/mian/gitnex/fragments/TeamsByOrgFragment.java b/app/src/main/java/org/mian/gitnex/fragments/TeamsByOrgFragment.java index 078f3678..17884a7c 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/TeamsByOrgFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/TeamsByOrgFragment.java @@ -31,6 +31,7 @@ import org.mian.gitnex.viewmodels.TeamsByOrgViewModel; public class TeamsByOrgFragment extends Fragment { + private TeamsByOrgViewModel teamsByOrgViewModel; public static boolean resumeTeams = false; private ProgressBar mProgressBar; @@ -68,6 +69,7 @@ public class TeamsByOrgFragment extends Fragment { FragmentTeamsByOrgBinding fragmentTeamsByOrgBinding = FragmentTeamsByOrgBinding.inflate(inflater, container, false); setHasOptionsMenu(true); + teamsByOrgViewModel = new ViewModelProvider(this).get(TeamsByOrgViewModel.class); noDataTeams = fragmentTeamsByOrgBinding.noDataTeams; @@ -86,7 +88,7 @@ public class TeamsByOrgFragment extends Fragment { swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { swipeRefresh.setRefreshing(false); - TeamsByOrgViewModel.loadTeamsByOrgList(orgName, getContext(), noDataTeams, mProgressBar); + teamsByOrgViewModel.loadTeamsByOrgList(orgName, getContext(), noDataTeams, mProgressBar); }, 200)); @@ -99,16 +101,14 @@ public class TeamsByOrgFragment extends Fragment { public void onResume() { super.onResume(); if(resumeTeams) { - TeamsByOrgViewModel.loadTeamsByOrgList(orgName, getContext(), noDataTeams, mProgressBar); + teamsByOrgViewModel.loadTeamsByOrgList(orgName, getContext(), noDataTeams, mProgressBar); resumeTeams = false; } } private void fetchDataAsync(String owner) { - TeamsByOrgViewModel teamModel = new ViewModelProvider(this).get(TeamsByOrgViewModel.class); - - teamModel.getTeamsByOrg(owner, getContext(), noDataTeams, mProgressBar).observe(getViewLifecycleOwner(), orgTeamsListMain -> { + teamsByOrgViewModel.getTeamsByOrg(owner, getContext(), noDataTeams, mProgressBar).observe(getViewLifecycleOwner(), orgTeamsListMain -> { adapter = new TeamsByOrgAdapter(getContext(), orgTeamsListMain, permissions, orgName); if(adapter.getItemCount() > 0) { mRecyclerView.setAdapter(adapter); diff --git a/app/src/main/java/org/mian/gitnex/helpers/AlertDialogs.java b/app/src/main/java/org/mian/gitnex/helpers/AlertDialogs.java index ace9f449..b5a2d7f6 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/AlertDialogs.java +++ b/app/src/main/java/org/mian/gitnex/helpers/AlertDialogs.java @@ -6,21 +6,16 @@ import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.widget.Button; -import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import org.mian.gitnex.R; import org.mian.gitnex.actions.CollaboratorActions; import org.mian.gitnex.actions.PullRequestActions; import org.mian.gitnex.actions.TeamActions; import org.mian.gitnex.activities.CreateLabelActivity; -import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.contexts.RepositoryContext; -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; /** - * Author M M Arif + * @author M M Arif */ public class AlertDialogs { @@ -80,34 +75,6 @@ public class AlertDialogs { } - public static void tagDeleteDialog(final Context context, final String tagName, final String owner, final String repo) { - new AlertDialog.Builder(context) - .setTitle(String.format(context.getString(R.string.deleteTagTitle), tagName)) - .setMessage(R.string.deleteTagConfirmation) - .setIcon(R.drawable.ic_delete) - .setPositiveButton(R.string.menuDeleteText, (dialog, whichButton) -> RetrofitClient.getApiInterface(context).repoDeleteTag(owner, repo, tagName).enqueue(new Callback() { - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) { - if(response.isSuccessful()) { - Toasty.success(context, context.getString(R.string.tagDeleted)); - } - else if(response.code() == 403) { - Toasty.error(context, context.getString(R.string.authorizeError)); - } - else { - Toasty.error(context, context.getString(R.string.genericError)); - } - } - - @Override - public void onFailure(@NonNull Call call, @NonNull Throwable t) { - Toasty.error(context, context.getString(R.string.genericError)); - } - })) - .setNeutralButton(R.string.cancelButton, null).show(); - } - public static void collaboratorRemoveDialog(final Context context, final String userNameMain, RepositoryContext repository) { new AlertDialog.Builder(context) diff --git a/app/src/main/java/org/mian/gitnex/helpers/AppUtil.java b/app/src/main/java/org/mian/gitnex/helpers/AppUtil.java index b74347d3..d06979c4 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/AppUtil.java +++ b/app/src/main/java/org/mian/gitnex/helpers/AppUtil.java @@ -43,7 +43,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * Author M M Arif + * @author M M Arif */ public class AppUtil { @@ -363,7 +363,6 @@ public class AppUtil { clipboard.setPrimaryClip(clip); Toasty.info(ctx, message); - } public static boolean switchToAccount(Context context, UserAccount userAccount) { @@ -374,6 +373,15 @@ public class AppUtil { return ((MainApplication) context.getApplicationContext()).switchToAccount(userAccount, tmp); } + public static void sharingIntent(Context ctx, String url) { + + Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); + sharingIntent.setType("text/plain"); + sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, url); + sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, url); + ctx.startActivity(Intent.createChooser(sharingIntent, url)); + } + public static void openUrlInBrowser(Context context, String url) { TinyDB tinyDB = TinyDB.getInstance(context); diff --git a/app/src/main/java/org/mian/gitnex/helpers/Constants.java b/app/src/main/java/org/mian/gitnex/helpers/Constants.java index f1d8bb2a..e72fd366 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/Constants.java +++ b/app/src/main/java/org/mian/gitnex/helpers/Constants.java @@ -4,22 +4,16 @@ import android.content.Context; import org.mian.gitnex.activities.BaseActivity; /** - * Author M M Arif + * @author M M Arif */ public class Constants { - // generic values - public static final int resultLimitNewGiteaInstances = 25; // Gitea 1.12 and above - public static final int resultLimitOldGiteaInstances = 10; // Gitea 1.11 and below - public static final String defaultOldestTimestamp = "1970-01-01T00:00:00+00:00"; - public static int getCurrentResultLimit(Context context) { - return ((BaseActivity) context).getAccount().requiresVersion("1.12") ? resultLimitNewGiteaInstances : resultLimitOldGiteaInstances; + return ((BaseActivity) context).getAccount().requiresVersion("1.15") ? ((BaseActivity) context).getAccount().getDefaultPageLimit() : ((BaseActivity) context).getAccount().getMaxPageLimit(); } // tags - public static final String tagMilestonesFragment = "MilestonesFragment"; public static final String tagPullRequestsList = "PullRequestFragment"; public static final String tagIssuesList = "IssuesListFragment"; public static final String tagMilestonesAdapter = "MilestonesAdapter"; @@ -30,8 +24,6 @@ public class Constants { public static final String publicOrganizations = "PublicOrganizations"; public static final String exploreUsers = "ExploreUsers"; public static final String exploreIssues = "ExploreIssues"; - public static final String exploreRepositories = "ExploreRepositories"; - public static final String tagNotifications = "TagNotifications"; public static final String tagFollowers = "TagFollowers"; public static final String tagFollowing = "TagFollowing"; @@ -42,9 +34,6 @@ public class Constants { // pull request public static final int prPageInit = 1; - // milestone - public static final int milestonesPageInit = 1; - // drafts public static final String draftTypeComment = "comment"; public static final String draftTypeIssue = "Issue"; @@ -69,5 +58,4 @@ public class Constants { // work managers public static final String notificationsWorkerId = "notifications_worker"; - } diff --git a/app/src/main/java/org/mian/gitnex/helpers/contexts/AccountContext.java b/app/src/main/java/org/mian/gitnex/helpers/contexts/AccountContext.java index 4418f7a4..f75ca7ba 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/contexts/AccountContext.java +++ b/app/src/main/java/org/mian/gitnex/helpers/contexts/AccountContext.java @@ -48,6 +48,14 @@ public class AccountContext implements Serializable { return getServerVersion().higherOrEqual(version); } + public int getDefaultPageLimit() { + return getAccount().getDefaultPagingNumber(); + } + + public int getMaxPageLimit() { + return getAccount().getMaxResponseItems(); + } + public User getUserInfo() { return userInfo; diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/AdminCronTasksViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/AdminCronTasksViewModel.java index 03cd444d..7b420aae 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/AdminCronTasksViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/AdminCronTasksViewModel.java @@ -21,7 +21,7 @@ import retrofit2.Response; public class AdminCronTasksViewModel extends ViewModel { - private static MutableLiveData> tasksList; + private MutableLiveData> tasksList; public LiveData> getCronTasksList(Context ctx, int page, int limit) { @@ -31,7 +31,7 @@ public class AdminCronTasksViewModel extends ViewModel { return tasksList; } - public static void loadCronTasksList(final Context ctx, int page, int limit) { + public void loadCronTasksList(final Context ctx, int page, int limit) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/AdminGetUsersViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/AdminGetUsersViewModel.java index 7ff0e51d..adeacaab 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/AdminGetUsersViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/AdminGetUsersViewModel.java @@ -21,7 +21,7 @@ import retrofit2.Response; public class AdminGetUsersViewModel extends ViewModel { - private static MutableLiveData> usersList; + private MutableLiveData> usersList; public LiveData> getUsersList(int page, int resultLimit, Context ctx) { @@ -31,7 +31,7 @@ public class AdminGetUsersViewModel extends ViewModel { return usersList; } - public static void loadUsersList(int page, int resultLimit, Context ctx) { + public void loadUsersList(int page, int resultLimit, Context ctx) { Call> call = RetrofitClient .getApiInterface(ctx) @@ -57,7 +57,7 @@ public class AdminGetUsersViewModel extends ViewModel { }); } - public static void loadMoreUsersList(int page, int resultLimit, Context ctx, AdminGetUsersAdapter adapter) { + public void loadMoreUsersList(int page, int resultLimit, Context ctx, AdminGetUsersAdapter adapter) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/CollaboratorsViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/CollaboratorsViewModel.java index 3270d7ec..7f752f9e 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/CollaboratorsViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/CollaboratorsViewModel.java @@ -20,7 +20,7 @@ import retrofit2.Response; public class CollaboratorsViewModel extends ViewModel { - private static MutableLiveData> collaboratorsList; + private MutableLiveData> collaboratorsList; public LiveData> getCollaboratorsList(String owner, String repo, Context ctx) { @@ -30,7 +30,7 @@ public class CollaboratorsViewModel extends ViewModel { return collaboratorsList; } - private static void loadCollaboratorsListList(String owner, String repo, Context ctx) { + private void loadCollaboratorsListList(String owner, String repo, Context ctx) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/FilesViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/FilesViewModel.java index e36da3e3..02e04d9e 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/FilesViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/FilesViewModel.java @@ -25,8 +25,8 @@ import retrofit2.Response; public class FilesViewModel extends ViewModel { - private static MutableLiveData> filesList; - private static MutableLiveData> filesList2; + private MutableLiveData> filesList; + private MutableLiveData> filesList2; public LiveData> getFilesList(String owner, String repo, String ref, Context ctx, ProgressBar progressBar, TextView noDataFiles) { @@ -36,7 +36,7 @@ public class FilesViewModel extends ViewModel { return filesList; } - private static void loadFilesList(String owner, String repo, String ref, final Context ctx, ProgressBar progressBar, TextView noDataFiles) { + private void loadFilesList(String owner, String repo, String ref, final Context ctx, ProgressBar progressBar, TextView noDataFiles) { Call> call = RetrofitClient .getApiInterface(ctx) @@ -73,7 +73,7 @@ public class FilesViewModel extends ViewModel { return filesList2; } - private static void loadFilesList2(String owner, String repo, String filesDir, String ref, final Context ctx, ProgressBar progressBar, TextView noDataFiles) { + private void loadFilesList2(String owner, String repo, String filesDir, String ref, final Context ctx, ProgressBar progressBar, TextView noDataFiles) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/IssuesViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/IssuesViewModel.java index 1d0f20b1..ed9ff244 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/IssuesViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/IssuesViewModel.java @@ -7,7 +7,6 @@ import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import org.gitnex.tea4j.v2.models.Issue; import org.mian.gitnex.R; -import org.mian.gitnex.activities.BaseActivity; import org.mian.gitnex.adapters.ExploreIssuesAdapter; import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.Constants; @@ -23,29 +22,22 @@ import retrofit2.Response; public class IssuesViewModel extends ViewModel { - private static MutableLiveData> issuesList; - private static int resultLimit = Constants.resultLimitOldGiteaInstances; + private MutableLiveData> issuesList; + private int resultLimit; - public LiveData> getIssuesList(String searchKeyword, String type, Boolean created, String state, Context ctx) { + public LiveData> getIssuesList(String searchKeyword, String type, Boolean created, String state, Boolean assignedToMe, Context ctx) { issuesList = new MutableLiveData<>(); - - // if gitea is 1.12 or higher use the new limit - if(((BaseActivity) ctx).getAccount().requiresVersion("1.12.0")) { - resultLimit = Constants.resultLimitNewGiteaInstances; - } - - loadIssuesList(searchKeyword, type, created, state, ctx); - + resultLimit = Constants.getCurrentResultLimit(ctx); + loadIssuesList(searchKeyword, type, created, state, assignedToMe, ctx); return issuesList; } - public static void loadIssuesList(String searchKeyword, String type, Boolean created, String state, Context ctx) { + public void loadIssuesList(String searchKeyword, String type, Boolean created, String state, Boolean assignedToMe, Context ctx) { - Call> call = RetrofitClient - .getApiInterface(ctx) - .issueSearchIssues(state, null, null, searchKeyword, null, type, null, null, - null, created, null, null, null, null, 1, resultLimit); + Call> call = RetrofitClient.getApiInterface(ctx) + .issueSearchIssues(state, null, null, searchKeyword, null, type, null, null, assignedToMe, created, null, null, null, null, 1, + resultLimit); call.enqueue(new Callback<>() { @@ -68,12 +60,10 @@ public class IssuesViewModel extends ViewModel { }); } - public static void loadMoreIssues(String searchKeyword, String type, Boolean created, String state, int page, Context ctx, ExploreIssuesAdapter adapter) { + public void loadMoreIssues(String searchKeyword, String type, Boolean created, String state, int page, Boolean assignedToMe, Context ctx, ExploreIssuesAdapter adapter) { - Call> call = RetrofitClient - .getApiInterface(ctx) - .issueSearchIssues(state, null, null, searchKeyword, null, type, null, null, - null, created, null, null, null, null, page, resultLimit); + Call> call = RetrofitClient.getApiInterface(ctx) + .issueSearchIssues(state, null, null, searchKeyword, null, type, null, null, assignedToMe, created, null, null, null, null, page, resultLimit); call.enqueue(new Callback<>() { diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/LabelsViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/LabelsViewModel.java index 3e8bde11..9e0b69b6 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/LabelsViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/LabelsViewModel.java @@ -20,7 +20,7 @@ import retrofit2.Response; public class LabelsViewModel extends ViewModel { - private static MutableLiveData> labelsList; + private MutableLiveData> labelsList; public LiveData> getLabelsList(String owner, String repo, Context ctx) { @@ -30,7 +30,7 @@ public class LabelsViewModel extends ViewModel { return labelsList; } - public static void loadLabelsList(String owner, String repo, Context ctx) { + public void loadLabelsList(String owner, String repo, Context ctx) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/MembersByOrgViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/MembersByOrgViewModel.java index 82d6c126..2fdf6017 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/MembersByOrgViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/MembersByOrgViewModel.java @@ -20,7 +20,7 @@ import retrofit2.Response; public class MembersByOrgViewModel extends ViewModel { - private static MutableLiveData> membersList; + private MutableLiveData> membersList; public LiveData> getMembersList(String owner, Context ctx) { @@ -30,7 +30,7 @@ public class MembersByOrgViewModel extends ViewModel { return membersList; } - private static void loadMembersList(String owner, Context ctx) { + private void loadMembersList(String owner, Context ctx) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/MilestonesViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/MilestonesViewModel.java index 5a1aacd1..5a70a5ab 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/MilestonesViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/MilestonesViewModel.java @@ -22,18 +22,18 @@ import retrofit2.Response; public class MilestonesViewModel extends ViewModel { - private static MutableLiveData> milestonesList; - private static final int resultLimit = Constants.resultLimitNewGiteaInstances; + private MutableLiveData> milestonesList; + private int resultLimit; public LiveData> getMilestonesList(String repoOwner, String repoName, String milestoneState, Context ctx) { milestonesList = new MutableLiveData<>(); loadMilestonesList(repoOwner, repoName, milestoneState, ctx); - + resultLimit = Constants.getCurrentResultLimit(ctx); return milestonesList; } - public static void loadMilestonesList(String repoOwner, String repoName, String milestoneState, Context ctx) { + public void loadMilestonesList(String repoOwner, String repoName, String milestoneState, Context ctx) { Call> call = RetrofitClient.getApiInterface(ctx).issueGetMilestonesList(repoOwner, repoName, milestoneState, null, 1, resultLimit); @@ -58,7 +58,7 @@ public class MilestonesViewModel extends ViewModel { }); } - public static void loadMoreMilestones(String repoOwner, String repoName, int page, String milestoneState, Context ctx, MilestonesAdapter adapter) { + public void loadMoreMilestones(String repoOwner, String repoName, int page, String milestoneState, Context ctx, MilestonesAdapter adapter) { Call> call = RetrofitClient.getApiInterface(ctx).issueGetMilestonesList(repoOwner, repoName, milestoneState, null, page, resultLimit); diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/OrganizationLabelsViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/OrganizationLabelsViewModel.java index 2466c5c7..100e8d1e 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/OrganizationLabelsViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/OrganizationLabelsViewModel.java @@ -23,7 +23,7 @@ import retrofit2.Response; public class OrganizationLabelsViewModel extends ViewModel { - private static MutableLiveData> orgLabelsList; + private MutableLiveData> orgLabelsList; public LiveData> getOrgLabelsList(String owner, Context ctx, ProgressBar progressBar, TextView noData) { @@ -33,7 +33,7 @@ public class OrganizationLabelsViewModel extends ViewModel { return orgLabelsList; } - public static void loadOrgLabelsList(String owner, Context ctx, ProgressBar progressBar, TextView noData) { + public void loadOrgLabelsList(String owner, Context ctx, ProgressBar progressBar, TextView noData) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/OrganizationsViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/OrganizationsViewModel.java index 4a98e1ee..ddaace39 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/OrganizationsViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/OrganizationsViewModel.java @@ -21,7 +21,7 @@ import retrofit2.Response; public class OrganizationsViewModel extends ViewModel { - private static MutableLiveData> orgList; + private MutableLiveData> orgList; public LiveData> getUserOrg(int page, int resultLimit, Context ctx) { @@ -31,7 +31,7 @@ public class OrganizationsViewModel extends ViewModel { return orgList; } - public static void loadOrgList(int page, int resultLimit, Context ctx) { + public void loadOrgList(int page, int resultLimit, Context ctx) { Call> call = RetrofitClient .getApiInterface(ctx) @@ -58,7 +58,7 @@ public class OrganizationsViewModel extends ViewModel { }); } - public static void loadMoreOrgList(int page, int resultLimit, Context ctx, OrganizationsListAdapter adapter) { + public void loadMoreOrgList(int page, int resultLimit, Context ctx, OrganizationsListAdapter adapter) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/ProfileEmailsViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/ProfileEmailsViewModel.java index e6d9a9ad..140c8c90 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/ProfileEmailsViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/ProfileEmailsViewModel.java @@ -20,7 +20,7 @@ import retrofit2.Response; public class ProfileEmailsViewModel extends ViewModel { - private static MutableLiveData> emailsList; + private MutableLiveData> emailsList; public LiveData> getEmailsList(Context ctx) { @@ -30,7 +30,7 @@ public class ProfileEmailsViewModel extends ViewModel { return emailsList; } - public static void loadEmailsList(Context ctx) { + public void loadEmailsList(Context ctx) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/ReleasesViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/ReleasesViewModel.java index fbcc3e40..bf0917ab 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/ReleasesViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/ReleasesViewModel.java @@ -8,7 +8,6 @@ import androidx.lifecycle.ViewModel; import org.gitnex.tea4j.v2.models.Release; import org.gitnex.tea4j.v2.models.Tag; import org.mian.gitnex.R; -import org.mian.gitnex.activities.BaseActivity; import org.mian.gitnex.adapters.ReleasesAdapter; import org.mian.gitnex.adapters.TagsAdapter; import org.mian.gitnex.clients.RetrofitClient; @@ -25,24 +24,18 @@ import retrofit2.Response; public class ReleasesViewModel extends ViewModel { - private static MutableLiveData> releasesList; - private static int resultLimit = Constants.resultLimitOldGiteaInstances; + private MutableLiveData> releasesList; + private int resultLimit; public LiveData> getReleasesList(String owner, String repo, Context ctx) { releasesList = new MutableLiveData<>(); - - // if gitea is 1.12 or higher use the new limit - if(((BaseActivity) ctx).getAccount().requiresVersion("1.12.0")) { - resultLimit = Constants.resultLimitNewGiteaInstances; - } - + resultLimit = Constants.getCurrentResultLimit(ctx); loadReleasesList(owner, repo, ctx); - return releasesList; } - public static void loadReleasesList(String owner, String repo, Context ctx) { + public void loadReleasesList(String owner, String repo, Context ctx) { Call> call = RetrofitClient .getApiInterface(ctx) @@ -69,7 +62,7 @@ public class ReleasesViewModel extends ViewModel { }); } - public static void loadMoreReleases(String owner, String repo, int page, Context ctx, ReleasesAdapter adapter) { + public void loadMoreReleases(String owner, String repo, int page, Context ctx, ReleasesAdapter adapter) { Call> call = RetrofitClient .getApiInterface(ctx) @@ -106,23 +99,17 @@ public class ReleasesViewModel extends ViewModel { }); } - private static MutableLiveData> tagsList; + private MutableLiveData> tagsList; public LiveData> getTagsList(String owner, String repo, Context ctx) { tagsList = new MutableLiveData<>(); - - // if gitea is 1.12 or higher use the new limit - if(((BaseActivity) ctx).getAccount().requiresVersion("1.12.0")) { - resultLimit = Constants.resultLimitNewGiteaInstances; - } - + resultLimit = Constants.getCurrentResultLimit(ctx); loadTagsList(owner, repo, ctx); - return tagsList; } - public static void loadTagsList(String owner, String repo, Context ctx) { + public void loadTagsList(String owner, String repo, Context ctx) { Call> call = RetrofitClient .getApiInterface(ctx) @@ -149,7 +136,7 @@ public class ReleasesViewModel extends ViewModel { }); } - public static void loadMoreTags(String owner, String repo, int page, Context ctx, TagsAdapter adapter) { + public void loadMoreTags(String owner, String repo, int page, Context ctx, TagsAdapter adapter) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/RepoStargazersViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/RepoStargazersViewModel.java index eab1c6a5..9aff0caf 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/RepoStargazersViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/RepoStargazersViewModel.java @@ -20,7 +20,7 @@ import retrofit2.Response; public class RepoStargazersViewModel extends ViewModel { - private static MutableLiveData> stargazersList; + private MutableLiveData> stargazersList; public LiveData> getRepoStargazers(String repoOwner, String repoName, Context ctx) { @@ -30,7 +30,7 @@ public class RepoStargazersViewModel extends ViewModel { return stargazersList; } - private static void loadRepoStargazers(String repoOwner, String repoName, Context ctx) { + private void loadRepoStargazers(String repoOwner, String repoName, Context ctx) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/RepoWatchersViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/RepoWatchersViewModel.java index ae1bd304..4992838a 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/RepoWatchersViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/RepoWatchersViewModel.java @@ -20,7 +20,7 @@ import retrofit2.Response; public class RepoWatchersViewModel extends ViewModel { - private static MutableLiveData> watchersList; + private MutableLiveData> watchersList; public LiveData> getRepoWatchers(String repoOwner, String repoName, Context ctx) { @@ -30,7 +30,7 @@ public class RepoWatchersViewModel extends ViewModel { return watchersList; } - private static void loadRepoWatchers(String repoOwner, String repoName, Context ctx) { + private void loadRepoWatchers(String repoOwner, String repoName, Context ctx) { Call> call = RetrofitClient .getApiInterface(ctx) diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/RepositoriesViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/RepositoriesViewModel.java index ee80ba16..7d6bf805 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/RepositoriesViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/RepositoriesViewModel.java @@ -21,7 +21,7 @@ import retrofit2.Response; public class RepositoriesViewModel extends ViewModel { - private static MutableLiveData> reposList; + private MutableLiveData> reposList; public LiveData> getRepositories(int page, int resultLimit, String userLogin, String type, String orgName, Context ctx) { @@ -31,7 +31,7 @@ public class RepositoriesViewModel extends ViewModel { return reposList; } - public static void loadReposList(int page, int resultLimit, String userLogin, String type, String orgName, Context ctx) { + public void loadReposList(int page, int resultLimit, String userLogin, String type, String orgName, Context ctx) { Call> call; @@ -77,7 +77,7 @@ public class RepositoriesViewModel extends ViewModel { }); } - public static void loadMoreRepos(int page, int resultLimit, String userLogin, String type, String orgName, Context ctx, ReposListAdapter adapter) { + public void loadMoreRepos(int page, int resultLimit, String userLogin, String type, String orgName, Context ctx, ReposListAdapter adapter) { Call> call; diff --git a/app/src/main/java/org/mian/gitnex/viewmodels/TeamsByOrgViewModel.java b/app/src/main/java/org/mian/gitnex/viewmodels/TeamsByOrgViewModel.java index a4e0122c..9f80c964 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/TeamsByOrgViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/TeamsByOrgViewModel.java @@ -23,7 +23,7 @@ import retrofit2.Response; public class TeamsByOrgViewModel extends ViewModel { - private static MutableLiveData> teamsList; + private MutableLiveData> teamsList; public LiveData> getTeamsByOrg(String orgName, Context ctx, TextView noDataTeams, ProgressBar mProgressBar) { @@ -33,7 +33,7 @@ public class TeamsByOrgViewModel extends ViewModel { return teamsList; } - public static void loadTeamsByOrgList(String orgName, Context ctx, TextView noDataTeams, ProgressBar mProgressBar) { + public void loadTeamsByOrgList(String orgName, Context ctx, TextView noDataTeams, ProgressBar mProgressBar) { Call> call = RetrofitClient .getApiInterface(ctx) 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 ff8cad40..d5530436 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 @@ -37,7 +37,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:text="@string/addNewMember" + android:text="@string/addRemove" android:textColor="?attr/primaryTextColor" android:maxLines="1" android:textSize="20sp" /> diff --git a/app/src/main/res/layout/activity_issue_detail.xml b/app/src/main/res/layout/activity_issue_detail.xml index 804d17c3..acb10a7b 100644 --- a/app/src/main/res/layout/activity_issue_detail.xml +++ b/app/src/main/res/layout/activity_issue_detail.xml @@ -2,6 +2,7 @@ - + android:layout_marginTop="10dp" + android:orientation="vertical"> - + android:gravity="end|center_vertical" + android:orientation="horizontal" + tools:ignore="UseCompoundDrawables"> - + + + + + + + android:gravity="end|center_vertical" + android:orientation="horizontal" + tools:ignore="UseCompoundDrawables"> - + + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_admin_users.xml b/app/src/main/res/layout/bottom_sheet_admin_users.xml index acc6473c..912c5625 100644 --- a/app/src/main/res/layout/bottom_sheet_admin_users.xml +++ b/app/src/main/res/layout/bottom_sheet_admin_users.xml @@ -18,20 +18,47 @@ android:layout_height="wrap_content" android:orientation="vertical"> - + android:padding="8dp" + android:orientation="vertical"> + + + + + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_drafts.xml b/app/src/main/res/layout/bottom_sheet_drafts.xml index 1ab7ece5..1964229a 100644 --- a/app/src/main/res/layout/bottom_sheet_drafts.xml +++ b/app/src/main/res/layout/bottom_sheet_drafts.xml @@ -18,20 +18,47 @@ android:layout_height="wrap_content" android:orientation="vertical"> - + android:padding="8dp" + android:orientation="vertical"> + + + + + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_file_viewer.xml b/app/src/main/res/layout/bottom_sheet_file_viewer.xml index a3390604..725f02dc 100644 --- a/app/src/main/res/layout/bottom_sheet_file_viewer.xml +++ b/app/src/main/res/layout/bottom_sheet_file_viewer.xml @@ -18,50 +18,73 @@ android:orientation="vertical" android:layout_height="wrap_content"> - + android:padding="8dp" + android:orientation="vertical"> - + - + + + android:layout_height="match_parent" + app:flexWrap="wrap" + app:alignItems="stretch" + android:padding="8dp" + app:alignContent="stretch" > + + + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_issue_comments.xml b/app/src/main/res/layout/bottom_sheet_issue_comments.xml index a1635002..418f5e90 100644 --- a/app/src/main/res/layout/bottom_sheet_issue_comments.xml +++ b/app/src/main/res/layout/bottom_sheet_issue_comments.xml @@ -25,95 +25,151 @@ android:layout_marginBottom="5dp" android:orientation="horizontal" /> - + android:layout_height="4dp" + android:id="@+id/reactionDivider" + android:layout_marginTop="12dp" + android:layout_marginBottom="16dp" + android:background="?attr/dividerColor" /> - + android:padding="8dp" + android:orientation="vertical"> - + - + - + android:layout_height="match_parent" + app:flexWrap="wrap" + app:alignItems="stretch" + android:padding="8dp" + app:alignContent="stretch" > - + + + + + + + + + + + android:layout_height="4dp" + android:layout_marginBottom="16dp" + android:background="?attr/dividerColor" /> + + + + + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_issues_filter.xml b/app/src/main/res/layout/bottom_sheet_issues_filter.xml index afc6c265..8da5c398 100644 --- a/app/src/main/res/layout/bottom_sheet_issues_filter.xml +++ b/app/src/main/res/layout/bottom_sheet_issues_filter.xml @@ -18,51 +18,73 @@ android:orientation="vertical" android:layout_height="wrap_content"> - + android:padding="8dp" + android:orientation="vertical"> - + - + + + android:layout_height="match_parent" + app:flexWrap="wrap" + app:alignItems="stretch" + android:padding="8dp" + app:alignContent="stretch" > + + + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_labels_in_list.xml b/app/src/main/res/layout/bottom_sheet_labels_in_list.xml index b4a167bb..3978fc6a 100644 --- a/app/src/main/res/layout/bottom_sheet_labels_in_list.xml +++ b/app/src/main/res/layout/bottom_sheet_labels_in_list.xml @@ -18,53 +18,60 @@ android:orientation="vertical" android:layout_height="wrap_content"> - + android:padding="8dp" + android:orientation="vertical"> - + - + - + android:layout_height="match_parent" + app:flexWrap="wrap" + app:alignItems="stretch" + android:padding="8dp" + app:alignContent="stretch" > + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_milestones_filter.xml b/app/src/main/res/layout/bottom_sheet_milestones_filter.xml index 4d208a8c..fae951eb 100644 --- a/app/src/main/res/layout/bottom_sheet_milestones_filter.xml +++ b/app/src/main/res/layout/bottom_sheet_milestones_filter.xml @@ -18,35 +18,60 @@ android:orientation="vertical" android:layout_height="wrap_content"> - + android:padding="8dp" + android:orientation="vertical"> - + + + + + android:layout_height="match_parent" + app:flexWrap="wrap" + app:alignItems="stretch" + android:padding="8dp" + app:alignContent="stretch" > + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_milestones_in_list.xml b/app/src/main/res/layout/bottom_sheet_milestones_in_list.xml index 5f8bcc0f..427c5e89 100644 --- a/app/src/main/res/layout/bottom_sheet_milestones_in_list.xml +++ b/app/src/main/res/layout/bottom_sheet_milestones_in_list.xml @@ -18,35 +18,60 @@ android:orientation="vertical" android:layout_height="wrap_content"> - + android:padding="8dp" + android:orientation="vertical"> - + + + + + android:layout_height="match_parent" + app:flexWrap="wrap" + app:alignItems="stretch" + android:padding="8dp" + app:alignContent="stretch" > + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_my_issues_filter.xml b/app/src/main/res/layout/bottom_sheet_my_issues_filter.xml index c859fc1d..8fa725d5 100644 --- a/app/src/main/res/layout/bottom_sheet_my_issues_filter.xml +++ b/app/src/main/res/layout/bottom_sheet_my_issues_filter.xml @@ -19,9 +19,9 @@ android:layout_height="wrap_content"> @@ -37,9 +37,9 @@ + + diff --git a/app/src/main/res/layout/bottom_sheet_notifications.xml b/app/src/main/res/layout/bottom_sheet_notifications.xml index adadfdda..912582e3 100644 --- a/app/src/main/res/layout/bottom_sheet_notifications.xml +++ b/app/src/main/res/layout/bottom_sheet_notifications.xml @@ -1,70 +1,92 @@ - + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingTop="6dp" + android:paddingBottom="12dp" + android:background="?attr/primaryBackgroundColor"> - - - - + android:orientation="vertical" + android:layout_height="wrap_content"> - + - + - + - + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_notifications_filter.xml b/app/src/main/res/layout/bottom_sheet_notifications_filter.xml index 42f13c43..15f762d4 100644 --- a/app/src/main/res/layout/bottom_sheet_notifications_filter.xml +++ b/app/src/main/res/layout/bottom_sheet_notifications_filter.xml @@ -18,35 +18,60 @@ android:orientation="vertical" android:layout_height="wrap_content"> - + android:padding="8dp" + android:orientation="vertical"> - + + + + + android:layout_height="match_parent" + app:flexWrap="wrap" + app:alignItems="stretch" + android:padding="8dp" + app:alignContent="stretch" > + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_organization.xml b/app/src/main/res/layout/bottom_sheet_organization.xml index 575aeea1..718d8a37 100644 --- a/app/src/main/res/layout/bottom_sheet_organization.xml +++ b/app/src/main/res/layout/bottom_sheet_organization.xml @@ -19,9 +19,9 @@ android:layout_height="wrap_content"> @@ -37,9 +37,9 @@ + + + + diff --git a/app/src/main/res/layout/bottom_sheet_organization_teams.xml b/app/src/main/res/layout/bottom_sheet_organization_teams.xml index a3d80fdd..223f6c40 100644 --- a/app/src/main/res/layout/bottom_sheet_organization_teams.xml +++ b/app/src/main/res/layout/bottom_sheet_organization_teams.xml @@ -18,35 +18,60 @@ android:orientation="vertical" android:layout_height="wrap_content"> - + android:padding="8dp" + android:orientation="vertical"> - + + + + + android:layout_height="match_parent" + app:flexWrap="wrap" + app:alignItems="stretch" + android:padding="8dp" + app:alignContent="stretch" > + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_profile.xml b/app/src/main/res/layout/bottom_sheet_profile.xml index 0ef6cafd..33f33f6e 100644 --- a/app/src/main/res/layout/bottom_sheet_profile.xml +++ b/app/src/main/res/layout/bottom_sheet_profile.xml @@ -18,20 +18,47 @@ android:orientation="vertical" android:layout_height="wrap_content"> - + android:padding="8dp" + android:orientation="vertical"> + + + + + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_pull_request_filter.xml b/app/src/main/res/layout/bottom_sheet_pull_request_filter.xml index f628855f..5d059360 100644 --- a/app/src/main/res/layout/bottom_sheet_pull_request_filter.xml +++ b/app/src/main/res/layout/bottom_sheet_pull_request_filter.xml @@ -18,35 +18,60 @@ android:orientation="vertical" android:layout_height="wrap_content"> - + android:padding="8dp" + android:orientation="vertical"> - + + + + + android:layout_height="match_parent" + app:flexWrap="wrap" + app:alignItems="stretch" + android:padding="8dp" + app:alignContent="stretch" > + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_releases_tags.xml b/app/src/main/res/layout/bottom_sheet_releases_tags.xml index 115746fa..83d9092e 100644 --- a/app/src/main/res/layout/bottom_sheet_releases_tags.xml +++ b/app/src/main/res/layout/bottom_sheet_releases_tags.xml @@ -18,35 +18,60 @@ android:orientation="vertical" android:layout_height="wrap_content"> - + android:padding="8dp" + android:orientation="vertical"> - + + + + + android:layout_height="match_parent" + app:flexWrap="wrap" + app:alignItems="stretch" + android:padding="8dp" + app:alignContent="stretch" > + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_repo.xml b/app/src/main/res/layout/bottom_sheet_repo.xml index 13785094..53348845 100644 --- a/app/src/main/res/layout/bottom_sheet_repo.xml +++ b/app/src/main/res/layout/bottom_sheet_repo.xml @@ -19,9 +19,9 @@ android:layout_height="wrap_content"> @@ -37,9 +37,9 @@ diff --git a/app/src/main/res/layout/bottom_sheet_single_issue.xml b/app/src/main/res/layout/bottom_sheet_single_issue.xml index 44f5cf94..48f68b24 100644 --- a/app/src/main/res/layout/bottom_sheet_single_issue.xml +++ b/app/src/main/res/layout/bottom_sheet_single_issue.xml @@ -2,7 +2,6 @@ - - - - - - - - - - - - - - - - - - - + android:padding="8dp" + android:orientation="vertical"> - + + + + + android:layout_height="match_parent" + app:flexWrap="wrap" + app:alignItems="stretch" + android:padding="8dp" + app:alignContent="stretch" > + + + + + + + + + + + + + + + + + + + + + + - + android:layout_height="match_parent" + app:flexWrap="wrap" + app:alignItems="stretch" + android:padding="8dp" + app:alignContent="stretch" > + + + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_tag_in_list.xml b/app/src/main/res/layout/bottom_sheet_tag_in_list.xml index d189f996..f0d95994 100644 --- a/app/src/main/res/layout/bottom_sheet_tag_in_list.xml +++ b/app/src/main/res/layout/bottom_sheet_tag_in_list.xml @@ -18,20 +18,47 @@ android:orientation="vertical" android:layout_height="wrap_content"> - + android:padding="8dp" + android:orientation="vertical"> + + + + + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_user_profile.xml b/app/src/main/res/layout/bottom_sheet_user_profile.xml index 28a9be1e..8867f485 100644 --- a/app/src/main/res/layout/bottom_sheet_user_profile.xml +++ b/app/src/main/res/layout/bottom_sheet_user_profile.xml @@ -18,20 +18,47 @@ android:layout_height="wrap_content" android:orientation="vertical"> - + android:padding="8dp" + android:orientation="vertical"> + + + + + + + + + + diff --git a/app/src/main/res/layout/custom_pr_info_dialog.xml b/app/src/main/res/layout/custom_pr_info_dialog.xml new file mode 100644 index 00000000..2b7e5cf7 --- /dev/null +++ b/app/src/main/res/layout/custom_pr_info_dialog.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_releases.xml b/app/src/main/res/layout/list_releases.xml index 3c3dd394..066203a3 100644 --- a/app/src/main/res/layout/list_releases.xml +++ b/app/src/main/res/layout/list_releases.xml @@ -94,7 +94,7 @@ android:id="@+id/releaseTag" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="5dp" + android:layout_marginStart="8dp" android:singleLine="true" android:textColor="?attr/primaryTextColor" android:textSize="14sp" /> @@ -119,7 +119,7 @@ android:id="@+id/releaseCommitSha" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="5dp" + android:layout_marginStart="8dp" android:singleLine="true" android:textColor="?attr/primaryTextColor" android:textSize="14sp" /> @@ -143,7 +143,7 @@ android:id="@+id/releaseDate" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="5dp" + android:layout_marginStart="8dp" android:singleLine="true" android:textColor="?attr/primaryTextColor" android:textSize="14sp" /> diff --git a/app/src/main/res/menu/pr_info_menu.xml b/app/src/main/res/menu/pr_info_menu.xml new file mode 100644 index 00000000..cad29daf --- /dev/null +++ b/app/src/main/res/menu/pr_info_menu.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bc991ddf..90908b6c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -123,6 +123,7 @@ Branches Collaborators Pull Requests + Pull Request Size Default Branch @@ -145,6 +146,7 @@ Milestone %1$s Due on %1$s Assigned to: %1$s + Assigned to Me Comment Please write your comment Comment posted @@ -285,8 +287,6 @@ show all Org members Organization team members - Add / Remove New Member - Add Repository Remove\u0020 Add\u0020 Do you want to add this user to the team? @@ -365,7 +365,7 @@ Repository Meta - Add New User + New User System Users Admin Cron Tasks @@ -502,6 +502,10 @@ Repository Team Organization + Add / Remove + Download + Reopen + Open in Browser Explore users @@ -525,8 +529,6 @@ Token is required Deleted Fork - Edit Pull Request - Copy Pull Request URL Edit Pull Request #%1$s Pull Request updated %1$s Files Changed @@ -534,7 +536,6 @@ Update Pull Request Show Changed Files Merge Pull Request - Delete head branch Branch deleted successfully Could not delete branch Branch does not exist @@ -553,8 +554,8 @@ Merge Strategy Select merge strategy Not allowed to merge [Reason: Does not have enough approvals] + Delete Branch - Download This File Please wait for the file to load to memory File saved successfully This file type/size is not supported in file viewer. You can download it from the menu. @@ -567,7 +568,6 @@ Size Share Issue - Share Pull Request Share Repository Create Repository Commits @@ -641,9 +641,9 @@ %d Minutes Select Polling Delay Choose a minutely delay in which GitNex tries to poll new notifications - Mark as Read - Mark as Unread - Pin Notification + Mark Read + Mark Unread + Pin Successfully marked all notifications as read Polling delay, light, vibration Enable Notifications @@ -704,6 +704,7 @@ A pull request between these branches already exists Pull Request closed Pull Request reopened + Pull Request Info It seems that account for URI %1$s does not exists in the app. You can add one by tapping on the Add New Account button. Go to App @@ -742,8 +743,6 @@ Rebase Select Update Strategy - Close Pull Request - Reopen Pull Request Avatar Tags Releases/Tags @@ -753,6 +752,7 @@ Do you really want to delete this tag? Delete tag %s Tag deleted + A tag attached to a release cannot be deleted directly Use Custom Tabs No application found to open this link. SSH URLs and URLs with another prefix the http:// or https:// are not supported by most browser Log in again