From caa437d5e3471713bedf66b20ae1ae73d61d62c1 Mon Sep 17 00:00:00 2001 From: M M Arif Date: Sun, 12 Jul 2020 17:14:50 +0200 Subject: [PATCH] Switch branches (#571) Fix default branch Merge branch 'master' into switch-branches # Conflicts: # app/src/main/res/layout/bottom_sheet_repo.xml # app/src/main/res/values/strings.xml update icon Merge branch 'master' into switch-branches Merge branch 'master' into switch-branches update the missing parts Minor updates Merge branch 'master' into switch-branches Merge branch 'master' into switch-branches # Conflicts: # app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java # app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java # app/src/main/java/org/mian/gitnex/fragments/BottomSheetRepoFragment.java # app/src/main/java/org/mian/gitnex/fragments/FilesFragment.java Add branch to breadcrumb and dir structure fix Make change branch work clean up Merge branch 'master' into switch-branches add icon in top bar, add interface listener Merge branch 'master' into switch-branches Merge remote-tracking branch 'remotes/main/master' into switch-branches # Conflicts: # app/src/main/java/org/mian/gitnex/activities/LoginActivity.java # app/src/main/java/org/mian/gitnex/fragments/ProfileFragment.java # app/src/main/java/org/mian/gitnex/helpers/PathsHelper.java Switching between branches. Minor fixes Merge remote-tracking branch 'remotes/main/master' into login-fix URL parsing, label and other improvements. Co-authored-by: M M Arif Co-authored-by: 6543 <6543@noreply.codeberg.org> Co-authored-by: opyale Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/571 Reviewed-by: 6543 <6543@noreply.codeberg.org> --- .../AddRemoveAssigneesActivity.java | 4 +- .../activities/AddRemoveLabelsActivity.java | 4 +- .../activities/CreateIssueActivity.java | 4 +- .../gitnex/activities/FileViewActivity.java | 7 +- .../gitnex/activities/RepoDetailActivity.java | 121 +++++++++++++--- .../adapters/ExploreRepositoriesAdapter.java | 8 +- .../mian/gitnex/adapters/FilesAdapter.java | 25 ++-- .../gitnex/adapters/MutliSelectAdapter.java | 16 +-- .../gitnex/adapters/MyReposListAdapter.java | 4 + .../gitnex/adapters/ReposListAdapter.java | 4 + .../adapters/RepositoriesByOrgAdapter.java | 4 + .../adapters/StarredReposListAdapter.java | 4 + .../BottomSheetOrganizationFragment.java | 31 ++-- .../fragments/BottomSheetRepoFragment.java | 119 ++++++--------- .../mian/gitnex/fragments/FilesFragment.java | 136 +++++++++--------- .../gitnex/helpers/MultiSelectDialog.java | 43 +++--- .../java/org/mian/gitnex/helpers/TinyDB.java | 4 + .../mian/gitnex/interfaces/ApiInterface.java | 22 +-- .../gitnex/viewmodels/FilesViewModel.java | 41 +++--- app/src/main/res/drawable/ic_branch.xml | 18 +++ app/src/main/res/layout/bottom_sheet_repo.xml | 12 +- .../main/res/layout/custom_multi_select.xml | 31 ++-- app/src/main/res/layout/list_repositories.xml | 6 + .../res/menu/files_switch_branches_menu.xml | 12 ++ app/src/main/res/values/strings.xml | 3 + 25 files changed, 387 insertions(+), 296 deletions(-) create mode 100644 app/src/main/res/drawable/ic_branch.xml create mode 100644 app/src/main/res/menu/files_switch_branches_menu.xml diff --git a/app/src/main/java/org/mian/gitnex/activities/AddRemoveAssigneesActivity.java b/app/src/main/java/org/mian/gitnex/activities/AddRemoveAssigneesActivity.java index b1c6931a..c9368316 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AddRemoveAssigneesActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AddRemoveAssigneesActivity.java @@ -139,7 +139,7 @@ public class AddRemoveAssigneesActivity extends BaseActivity { .multiSelectList(listOfCollaborators) .onSubmit(new MultiSelectDialog.SubmitCallbackListener() { @Override - public void onSelected(ArrayList selectedIds, ArrayList selectedNames, String dataString) { + public void onSelected(List selectedIds, List selectedNames, String dataString) { Log.i("selectedNames", String.valueOf(selectedNames)); @@ -167,7 +167,7 @@ public class AddRemoveAssigneesActivity extends BaseActivity { .multiSelectList(listOfCollaborators) .onSubmit(new MultiSelectDialog.SubmitCallbackListener() { @Override - public void onSelected(ArrayList selectedIds, ArrayList selectedNames, String dataString) { + public void onSelected(List selectedIds, List selectedNames, String dataString) { updateIssueAssignees(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, loginUid, issueIndex, selectedNames); tinyDb.putBoolean("singleIssueUpdate", true); diff --git a/app/src/main/java/org/mian/gitnex/activities/AddRemoveLabelsActivity.java b/app/src/main/java/org/mian/gitnex/activities/AddRemoveLabelsActivity.java index c66f88f2..981fb159 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AddRemoveLabelsActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AddRemoveLabelsActivity.java @@ -128,7 +128,7 @@ public class AddRemoveLabelsActivity extends BaseActivity { .multiSelectList(listOfLabels) .onSubmit(new MultiSelectDialog.SubmitCallbackListener() { @Override - public void onSelected(ArrayList selectedIds, ArrayList selectedNames, String dataString) { + public void onSelected(List selectedIds, List selectedNames, String dataString) { String labelIds = selectedIds.toString(); int[] integers; @@ -169,7 +169,7 @@ public class AddRemoveLabelsActivity extends BaseActivity { .multiSelectList(listOfLabels) .onSubmit(new MultiSelectDialog.SubmitCallbackListener() { @Override - public void onSelected(ArrayList selectedIds, ArrayList selectedNames, String dataString) { + public void onSelected(List selectedIds, List selectedNames, String dataString) { String labelIds = selectedIds.toString(); int[] integers; 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 082f16b5..9d0b136d 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java @@ -444,7 +444,7 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis .multiSelectList(listOfAssignees) .onSubmit(new MultiSelectDialog.SubmitCallbackListener() { @Override - public void onSelected(ArrayList selectedIds, ArrayList selectedNames, String dataString) { + public void onSelected(List selectedIds, List selectedNames, String dataString) { assigneesList.setText(dataString); @@ -507,7 +507,7 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis .multiSelectList(listOfLabels) .onSubmit(new MultiSelectDialog.SubmitCallbackListener() { @Override - public void onSelected(ArrayList selectedIds, ArrayList selectedNames, String dataString) { + public void onSelected(List selectedIds, List selectedNames, String dataString) { newIssueLabels.setText(dataString.trim()); labelsIdHolder.setText(selectedIds.toString()); diff --git a/app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java b/app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java index d8848943..bc703f45 100644 --- a/app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java @@ -83,6 +83,7 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie final TinyDB tinyDb = new TinyDB(appCtx); String repoFullName = tinyDb.getString("repoFullName"); + String repoBranch = tinyDb.getString("repoBranch"); String[] parts = repoFullName.split("/"); final String repoOwner = parts[0]; final String repoName = parts[1]; @@ -125,15 +126,15 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie toolbar_title.setText(singleFileName); - getSingleFileContents(instanceUrl, instanceToken, repoOwner, repoName, singleFileName); + getSingleFileContents(instanceUrl, instanceToken, repoOwner, repoName, singleFileName, repoBranch); } - private void getSingleFileContents(String instanceUrl, String token, final String owner, String repo, final String filename) { + private void getSingleFileContents(String instanceUrl, String token, final String owner, String repo, final String filename, String ref) { final TinyDB tinyDb = new TinyDB(appCtx); - Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getSingleFileContents(token, owner, repo, filename); + Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getSingleFileContents(token, owner, repo, filename, ref); call.enqueue(new Callback() { 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 9eb17794..21a1dabc 100644 --- a/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java @@ -2,6 +2,7 @@ package org.mian.gitnex.activities; import android.annotation.SuppressLint; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.res.ColorStateList; import android.graphics.Typeface; @@ -16,6 +17,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -41,11 +43,15 @@ import org.mian.gitnex.fragments.RepoInfoFragment; import org.mian.gitnex.helpers.Authorization; import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.Version; +import org.mian.gitnex.models.Branches; import org.mian.gitnex.models.UserRepositories; import org.mian.gitnex.models.WatchInfo; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; import retrofit2.Call; import retrofit2.Callback; +import retrofit2.Response; /** * Author M M Arif @@ -61,6 +67,7 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF private FragmentRefreshListener fragmentRefreshListener; private FragmentRefreshListenerPr fragmentRefreshListenerPr; private FragmentRefreshListenerMilestone fragmentRefreshListenerMilestone; + private FragmentRefreshListenerFiles fragmentRefreshListenerFiles; private final Context ctx = this; private Context appCtx; @@ -285,6 +292,10 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF filterMilestoneBottomSheet.show(getSupportFragmentManager(), "repoFilterMenuMilestoneBottomSheet"); return true; + case R.id.switchBranches: + chooseBranch(); + return true; + default: return super.onOptionsItemSelected(item); @@ -313,6 +324,10 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF startActivity(new Intent(RepoDetailActivity.this, AddCollaboratorToRepositoryActivity.class)); break; + case "chooseBranch": + chooseBranch(); + break; + case "createRelease": startActivity(new Intent(RepoDetailActivity.this, CreateReleaseActivity.class)); break; @@ -374,6 +389,65 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF } + private void chooseBranch() { + + Call> call = RetrofitClient.getInstance(instanceUrl, ctx) + .getApiInterface() + .getBranches(instanceToken, repositoryOwner, repositoryName); + + call.enqueue(new Callback>() { + + @Override + public void onResponse(@NonNull Call> call, @NonNull Response> response) { + + if(response.code() == 200) { + + List branchesList = new ArrayList<>(); + int selectedBranch = 0; + assert response.body() != null; + + for(int i = 0; i < response.body().size(); i++) { + + Branches branches = response.body().get(i); + branchesList.add(branches.getName()); + + if(tinyDB.getString("repoBranch").equals(branches.getName())) { + + selectedBranch = i; + } + } + + AlertDialog.Builder pBuilder = new AlertDialog.Builder(ctx); + pBuilder.setTitle(R.string.pageTitleChooseBranch); + + pBuilder.setSingleChoiceItems(branchesList.toArray(new String[0]), selectedBranch, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialogInterface, int i) { + + tinyDB.putString("repoBranch", branchesList.get(i)); + if(getFragmentRefreshListenerFiles() != null) { + getFragmentRefreshListenerFiles().onRefresh(branchesList.get(i)); + } + dialogInterface.dismiss(); + } + }); + + pBuilder.create().show(); + + } + + } + + @Override + public void onFailure(@NonNull Call> call, @NonNull Throwable t) { + + Log.e("onFailure", t.toString()); + } + }); + + } + public class SectionsPagerAdapter extends FragmentStatePagerAdapter { SectionsPagerAdapter(FragmentManager fm) { @@ -393,7 +467,7 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF return RepoInfoFragment.newInstance(repositoryOwner, repositoryName); case 1: // Files - return FilesFragment.newInstance(repositoryOwner, repositoryName); + return FilesFragment.newInstance(repositoryOwner, repositoryName, tinyDB.getString("repoBranch")); case 2: // Issues fragment = new IssuesFragment(); @@ -444,32 +518,28 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF UserRepositories repoInfo = response.body(); - if(response.isSuccessful()) { + if(response.code() == 200) { - if(response.code() == 200) { + if(tinyDB.getBoolean("enableCounterBadges")) { + assert repoInfo != null; - if(tinyDB.getBoolean("enableCounterBadges")) { - assert repoInfo != null; + if(repoInfo.getOpen_issues_count() != null) { - if(repoInfo.getOpen_issues_count() != null) { - - textViewBadgeIssue.setVisibility(View.VISIBLE); - textViewBadgeIssue.setText(repoInfo.getOpen_issues_count()); - } - - if(repoInfo.getOpen_pull_count() != null) { - - textViewBadgePull.setVisibility(View.VISIBLE); - textViewBadgePull.setText(repoInfo.getOpen_pull_count()); - } - - if(repoInfo.getRelease_count() != null) { - - textViewBadgeRelease.setVisibility(View.VISIBLE); - textViewBadgeRelease.setText(repoInfo.getRelease_count()); - } + textViewBadgeIssue.setVisibility(View.VISIBLE); + textViewBadgeIssue.setText(repoInfo.getOpen_issues_count()); } + if(repoInfo.getOpen_pull_count() != null) { + + textViewBadgePull.setVisibility(View.VISIBLE); + textViewBadgePull.setText(repoInfo.getOpen_pull_count()); + } + + if(repoInfo.getRelease_count() != null) { + + textViewBadgeRelease.setVisibility(View.VISIBLE); + textViewBadgeRelease.setText(repoInfo.getRelease_count()); + } } } @@ -567,4 +637,11 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF public interface FragmentRefreshListenerMilestone { void onRefresh(String text); } + // Files interface + public FragmentRefreshListenerFiles getFragmentRefreshListenerFiles() { return fragmentRefreshListenerFiles; } + + public void setFragmentRefreshListenerFiles(FragmentRefreshListenerFiles fragmentRefreshListenerFiles) { this.fragmentRefreshListenerFiles = fragmentRefreshListenerFiles; } + + public interface FragmentRefreshListenerFiles { void onRefresh(String text); } + } diff --git a/app/src/main/java/org/mian/gitnex/adapters/ExploreRepositoriesAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/ExploreRepositoriesAdapter.java index 7a06ff43..429b5330 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/ExploreRepositoriesAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/ExploreRepositoriesAdapter.java @@ -63,6 +63,7 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter { @@ -93,6 +95,7 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter { - Context context = v.getContext(); - - if(fileType.getText().toString().equals("file")) { - filesListener.onClickFile(fileName.getText().toString()); - } - else if(fileType.getText().toString().equals("dir")) { - filesListener.onClickDir(fileName.getText().toString()); - } - else { - Toasty.info(context, context.getString(R.string.filesGenericError)); - } + Context context = v.getContext(); + if(fileType.getText().toString().equals("file")) { + filesListener.onClickFile(fileName.getText().toString()); } + else if(fileType.getText().toString().equals("dir")) { + filesListener.onClickDir(fileName.getText().toString()); + } + else { + Toasty.info(context, context.getString(R.string.filesGenericError)); + } + }); diff --git a/app/src/main/java/org/mian/gitnex/adapters/MutliSelectAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/MutliSelectAdapter.java index 8f2b02c7..3f4d41a3 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/MutliSelectAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/MutliSelectAdapter.java @@ -11,14 +11,14 @@ import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; -import org.mian.gitnex.R; -import org.mian.gitnex.helpers.MultiSelectDialog; -import org.mian.gitnex.models.MultiSelectModel; -import java.util.ArrayList; import androidx.annotation.NonNull; import androidx.appcompat.widget.AppCompatCheckBox; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.RecyclerView; +import org.mian.gitnex.R; +import org.mian.gitnex.helpers.MultiSelectDialog; +import org.mian.gitnex.models.MultiSelectModel; +import java.util.List; /** * Author com.github.abumoallim, modified by M M Arif @@ -26,11 +26,11 @@ import androidx.recyclerview.widget.RecyclerView; public class MutliSelectAdapter extends RecyclerView.Adapter { - private ArrayList mDataSet; + private List mDataSet; private String mSearchQuery = ""; private Context mContext; - public MutliSelectAdapter(ArrayList dataSet, Context context) { + public MutliSelectAdapter(List dataSet, Context context) { this.mDataSet = dataSet; this.mContext = context; } @@ -163,7 +163,7 @@ public class MutliSelectAdapter extends RecyclerView.Adapter data, String query, MutliSelectAdapter mutliSelectAdapter) { + public void setData(List data, String query, MutliSelectAdapter mutliSelectAdapter) { this.mDataSet = data; this.mSearchQuery = query; @@ -187,4 +187,4 @@ public class MutliSelectAdapter extends RecyclerView.Adapter { @@ -89,6 +91,7 @@ public class MyReposListAdapter extends RecyclerView.Adapter { @@ -91,6 +93,7 @@ public class ReposListAdapter extends RecyclerView.Adapter { @@ -88,6 +90,7 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter { @@ -88,6 +90,7 @@ public class StarredReposListAdapter extends RecyclerView.Adapter { + + bmListener.onButtonClicked("team"); + dismiss(); }); - createRepository.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - bmListener.onButtonClicked("repository"); - dismiss(); - } + createRepository.setOnClickListener(v12 -> { + + bmListener.onButtonClicked("repository"); + dismiss(); }); return v; } public interface BottomSheetListener { + void onButtonClicked(String text); } @Override public void onAttach(@NonNull Context context) { + super.onAttach(context); try { bmListener = (BottomSheetOrganizationFragment.BottomSheetListener) context; - } catch (ClassCastException e) { - throw new ClassCastException(context.toString() - + " must implement BottomSheetListener"); + } + catch (ClassCastException e) { + throw new ClassCastException(context.toString() + " must implement BottomSheetListener"); } } diff --git a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetRepoFragment.java b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetRepoFragment.java index b3f4adcb..1cf6aaf3 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetRepoFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetRepoFragment.java @@ -41,38 +41,33 @@ public class BottomSheetRepoFragment extends BottomSheetDialogFragment { TextView unWatchRepository = v.findViewById(R.id.unWatchRepository); TextView shareRepository = v.findViewById(R.id.shareRepository); - createLabel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - bmListener.onButtonClicked("label"); - dismiss(); - } + createLabel.setOnClickListener(v112 -> { + + bmListener.onButtonClicked("label"); + dismiss(); }); if(tinyDb.getBoolean("hasIssues")) { createIssue.setVisibility(View.VISIBLE); - createIssue.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - bmListener.onButtonClicked("newIssue"); - dismiss(); - } + createIssue.setOnClickListener(v12 -> { + + bmListener.onButtonClicked("newIssue"); + dismiss(); }); } else { createIssue.setVisibility(View.GONE); } - createMilestone.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - bmListener.onButtonClicked("newMilestone"); - dismiss(); - } + createMilestone.setOnClickListener(v13 -> { + + bmListener.onButtonClicked("newMilestone"); + dismiss(); }); if (tinyDb.getBoolean("isRepoAdmin")) { addCollaborator.setOnClickListener(v1 -> { + bmListener.onButtonClicked("addCollaborator"); dismiss(); }); @@ -80,67 +75,51 @@ public class BottomSheetRepoFragment extends BottomSheetDialogFragment { addCollaborator.setVisibility(View.GONE); } - createRelease.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - bmListener.onButtonClicked("createRelease"); - dismiss(); - } + createRelease.setOnClickListener(v14 -> { + + bmListener.onButtonClicked("createRelease"); + dismiss(); }); - shareRepository.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - bmListener.onButtonClicked("shareRepo"); - dismiss(); - } + shareRepository.setOnClickListener(v15 -> { + + bmListener.onButtonClicked("shareRepo"); + dismiss(); }); - openWebRepo.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - bmListener.onButtonClicked("openWebRepo"); - dismiss(); - } + openWebRepo.setOnClickListener(v16 -> { + + bmListener.onButtonClicked("openWebRepo"); + dismiss(); }); - newFile.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - bmListener.onButtonClicked("newFile"); - dismiss(); - } + newFile.setOnClickListener(v17 -> { + + bmListener.onButtonClicked("newFile"); + dismiss(); }); if(tinyDb.getInt("repositoryStarStatus") == 204) { // star a repo starRepository.setVisibility(View.GONE); + unStarRepository.setOnClickListener(v18 -> { - unStarRepository.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + RepositoryActions.unStarRepository(getContext()); + tinyDb.putInt("repositoryStarStatus", 404); + dismiss(); - RepositoryActions.unStarRepository(getContext()); - tinyDb.putInt("repositoryStarStatus", 404); - dismiss(); - - } }); } else if(tinyDb.getInt("repositoryStarStatus") == 404) { unStarRepository.setVisibility(View.GONE); + starRepository.setOnClickListener(v19 -> { - starRepository.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + RepositoryActions.starRepository(getContext()); + tinyDb.putInt("repositoryStarStatus", 204); + dismiss(); - RepositoryActions.starRepository(getContext()); - tinyDb.putInt("repositoryStarStatus", 204); - dismiss(); - - } }); } @@ -148,32 +127,24 @@ public class BottomSheetRepoFragment extends BottomSheetDialogFragment { if(tinyDb.getBoolean("repositoryWatchStatus")) { // watch a repo watchRepository.setVisibility(View.GONE); + unWatchRepository.setOnClickListener(v110 -> { - unWatchRepository.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + RepositoryActions.unWatchRepository(getContext()); + tinyDb.putBoolean("repositoryWatchStatus", false); + dismiss(); - RepositoryActions.unWatchRepository(getContext()); - tinyDb.putBoolean("repositoryWatchStatus", false); - dismiss(); - - } }); } else { unWatchRepository.setVisibility(View.GONE); + watchRepository.setOnClickListener(v111 -> { - watchRepository.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + RepositoryActions.watchRepository(getContext()); + tinyDb.putBoolean("repositoryWatchStatus", true); + dismiss(); - RepositoryActions.watchRepository(getContext()); - tinyDb.putBoolean("repositoryWatchStatus", true); - dismiss(); - - } }); } diff --git a/app/src/main/java/org/mian/gitnex/fragments/FilesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/FilesFragment.java index ddd42cd4..7c726bd0 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/FilesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/FilesFragment.java @@ -15,23 +15,21 @@ import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import org.mian.gitnex.R; import org.mian.gitnex.activities.FileViewActivity; +import org.mian.gitnex.activities.RepoDetailActivity; import org.mian.gitnex.adapters.FilesAdapter; +import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.Authorization; import org.mian.gitnex.helpers.TinyDB; -import org.mian.gitnex.models.Files; import org.mian.gitnex.viewmodels.FilesViewModel; import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.Collections; import java.util.Objects; import moe.feng.common.view.breadcrumbs.BreadcrumbsView; import moe.feng.common.view.breadcrumbs.DefaultBreadcrumbsCallback; @@ -51,10 +49,12 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter private TextView fileStructure; private static String repoNameF = "param2"; private static String repoOwnerF = "param1"; + private static String repoRefF = "param3"; private BreadcrumbsView mBreadcrumbsView; private String repoName; private String repoOwner; + private String ref; private OnFragmentInteractionListener mListener; @@ -62,12 +62,13 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter } - public static FilesFragment newInstance(String param1, String param2) { + public static FilesFragment newInstance(String param1, String param2, String param3) { FilesFragment fragment = new FilesFragment(); Bundle args = new Bundle(); args.putString(repoOwnerF, param1); args.putString(repoNameF, param2); + args.putString(repoRefF, param3); fragment.setArguments(args); return fragment; } @@ -79,6 +80,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter if(getArguments() != null) { repoName = getArguments().getString(repoNameF); repoOwner = getArguments().getString(repoOwnerF); + ref = getArguments().getString(repoRefF); } } @@ -107,9 +109,18 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter mProgressBar = v.findViewById(R.id.progress_bar); mBreadcrumbsView = v.findViewById(R.id.breadcrumbs_view); - mBreadcrumbsView.setItems(new ArrayList<>(Arrays.asList(BreadcrumbItem.createSimpleItem(getResources().getString(R.string.filesBreadcrumbRoot))))); + mBreadcrumbsView.setItems(new ArrayList<>(Collections.singletonList(BreadcrumbItem.createSimpleItem(getResources().getString(R.string.filesBreadcrumbRoot) + getResources().getString(R.string.colonDivider) + ref)))); - fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName); + ((RepoDetailActivity) Objects.requireNonNull(getActivity())).setFragmentRefreshListenerFiles(repoBranch -> { + + fileStructure.setText(""); + ref = repoBranch; + mBreadcrumbsView.setItems(new ArrayList<>(Collections.singletonList(BreadcrumbItem.createSimpleItem(getResources().getString(R.string.filesBreadcrumbRoot) + getResources().getString(R.string.colonDivider) + ref)))); + fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, repoBranch); + + }); + + fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, ref); return v; } @@ -120,13 +131,6 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter super.onResume(); } - private static BreadcrumbItem createItem(String title) { - - List list = new ArrayList<>(); - list.add(title); - return new BreadcrumbItem(list); - } - @Override public void onClickDir(String dirName) { @@ -145,7 +149,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter dirName_ = dirName_.startsWith("/") ? dirName_.substring(1) : dirName_; final String finalDirName_ = dirName_; - mBreadcrumbsView.addItem(createItem(dirName)); + mBreadcrumbsView.addItem(new BreadcrumbItem(Collections.singletonList(dirName))); //noinspection unchecked mBreadcrumbsView.setCallback(new DefaultBreadcrumbsCallback() { @@ -154,7 +158,8 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter public void onNavigateBack(BreadcrumbItem item, int position) { if(position == 0) { - fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName); + + fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, ref); fileStructure.setText(""); return; } @@ -165,7 +170,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter String currentIndex = (result + item.getSelectedItem()).substring(1); - fetchDataAsyncSub(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, currentIndex); + fetchDataAsyncSub(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, currentIndex, ref); } @@ -175,7 +180,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter } }); - fetchDataAsyncSub(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, finalDirName_); + fetchDataAsyncSub(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, finalDirName_, ref); } @@ -196,70 +201,61 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter Objects.requireNonNull(getContext()).startActivity(intent); } - private void fetchDataAsync(String instanceUrl, String instanceToken, String owner, String repo) { + private void fetchDataAsync(String instanceUrl, String instanceToken, String owner, String repo, String ref) { mRecyclerView.setVisibility(View.GONE); mProgressBar.setVisibility(View.VISIBLE); FilesViewModel filesModel = new ViewModelProvider(this).get(FilesViewModel.class); - filesModel.getFilesList(instanceUrl, instanceToken, owner, repo, getContext()).observe(getViewLifecycleOwner(), new Observer>() { + filesModel.getFilesList(instanceUrl, instanceToken, owner, repo, ref, getContext()).observe(getViewLifecycleOwner(), filesListMain -> { - @Override - public void onChanged(@Nullable List filesListMain) { + adapter = new FilesAdapter(getContext(), filesListMain, FilesFragment.this); + mBreadcrumbsView.removeItemAfter(1); - adapter = new FilesAdapter(getContext(), filesListMain, FilesFragment.this); - - mBreadcrumbsView.removeItemAfter(1); - if(adapter.getItemCount() > 0) { - mRecyclerView.setVisibility(View.VISIBLE); - mRecyclerView.setAdapter(adapter); - filesFrame.setVisibility(View.VISIBLE); - noDataFiles.setVisibility(View.GONE); - } - else { - mRecyclerView.setVisibility(View.VISIBLE); - adapter.notifyDataSetChanged(); - mRecyclerView.setAdapter(adapter); - filesFrame.setVisibility(View.VISIBLE); - noDataFiles.setVisibility(View.VISIBLE); - } - filesFrame.setVisibility(View.VISIBLE); - mProgressBar.setVisibility(View.GONE); + if(adapter.getItemCount() > 0) { + mRecyclerView.setAdapter(adapter); + AppUtil.setMultiVisibility(View.VISIBLE, mRecyclerView, filesFrame); + noDataFiles.setVisibility(View.GONE); } + else { + adapter.notifyDataSetChanged(); + mRecyclerView.setAdapter(adapter); + AppUtil.setMultiVisibility(View.VISIBLE, mRecyclerView, filesFrame, noDataFiles); + } + + filesFrame.setVisibility(View.VISIBLE); + mProgressBar.setVisibility(View.GONE); + }); } - private void fetchDataAsyncSub(String instanceUrl, String instanceToken, String owner, String repo, String filesDir) { + private void fetchDataAsyncSub(String instanceUrl, String instanceToken, String owner, String repo, String filesDir, String ref) { mRecyclerView.setVisibility(View.GONE); mProgressBar.setVisibility(View.VISIBLE); FilesViewModel filesModel2 = new ViewModelProvider(this).get(FilesViewModel.class); - filesModel2.getFilesList2(instanceUrl, instanceToken, owner, repo, filesDir, getContext()).observe(this, new Observer>() { + filesModel2.getFilesList2(instanceUrl, instanceToken, owner, repo, filesDir, ref, getContext()).observe(this, filesListMain2 -> { - @Override - public void onChanged(@Nullable List filesListMain2) { + adapter = new FilesAdapter(getContext(), filesListMain2, FilesFragment.this); - adapter = new FilesAdapter(getContext(), filesListMain2, FilesFragment.this); - if(adapter.getItemCount() > 0) { - mRecyclerView.setVisibility(View.VISIBLE); - mRecyclerView.setAdapter(adapter); - filesFrame.setVisibility(View.VISIBLE); - noDataFiles.setVisibility(View.GONE); - } - else { - mRecyclerView.setVisibility(View.VISIBLE); - adapter.notifyDataSetChanged(); - mRecyclerView.setAdapter(adapter); - filesFrame.setVisibility(View.VISIBLE); - noDataFiles.setVisibility(View.VISIBLE); - } - filesFrame.setVisibility(View.VISIBLE); - mProgressBar.setVisibility(View.GONE); + if(adapter.getItemCount() > 0) { + mRecyclerView.setAdapter(adapter); + AppUtil.setMultiVisibility(View.VISIBLE, mRecyclerView, filesFrame); + noDataFiles.setVisibility(View.GONE); } + else { + adapter.notifyDataSetChanged(); + mRecyclerView.setAdapter(adapter); + AppUtil.setMultiVisibility(View.VISIBLE, mRecyclerView, filesFrame, noDataFiles); + } + + filesFrame.setVisibility(View.VISIBLE); + mProgressBar.setVisibility(View.GONE); + }); } @@ -268,6 +264,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { inflater.inflate(R.menu.search_menu, menu); + inflater.inflate(R.menu.files_switch_branches_menu, menu); super.onCreateOptionsMenu(menu, inflater); MenuItem searchItem = menu.findItem(R.id.action_search); @@ -276,20 +273,19 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter searchView.setOnQueryTextListener(new androidx.appcompat.widget.SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextSubmit(String query) { - - return false; - } - @Override public boolean onQueryTextChange(String newText) { if(mRecyclerView.getAdapter() != null) { adapter.getFilter().filter(newText); } + return false; } + + @Override + public boolean onQueryTextSubmit(String query) { return false; } + }); } @@ -308,10 +304,6 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter mListener = null; } - public interface OnFragmentInteractionListener { - - void onFragmentInteraction(Uri uri); - - } + public interface OnFragmentInteractionListener { void onFragmentInteraction(Uri uri); } } diff --git a/app/src/main/java/org/mian/gitnex/helpers/MultiSelectDialog.java b/app/src/main/java/org/mian/gitnex/helpers/MultiSelectDialog.java index 0e4fc119..882205f9 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/MultiSelectDialog.java +++ b/app/src/main/java/org/mian/gitnex/helpers/MultiSelectDialog.java @@ -10,15 +10,16 @@ import android.view.Window; import android.view.WindowManager; import android.widget.TextView; import android.widget.Toast; -import org.mian.gitnex.R; -import org.mian.gitnex.adapters.MutliSelectAdapter; -import org.mian.gitnex.models.MultiSelectModel; -import java.util.ArrayList; -import java.util.Objects; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatDialogFragment; import androidx.appcompat.widget.SearchView; import androidx.recyclerview.widget.LinearLayoutManager; +import org.mian.gitnex.R; +import org.mian.gitnex.adapters.MutliSelectAdapter; +import org.mian.gitnex.models.MultiSelectModel; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; /** * Author com.github.abumoallim, modified by M M Arif @@ -26,9 +27,9 @@ import androidx.recyclerview.widget.LinearLayoutManager; public class MultiSelectDialog extends AppCompatDialogFragment implements SearchView.OnQueryTextListener, View.OnClickListener { - public static ArrayList selectedIdsForCallback = new ArrayList<>(); + public static List selectedIdsForCallback = new ArrayList<>(); - public ArrayList mainListOfAdapter = new ArrayList<>(); + public List mainListOfAdapter = new ArrayList<>(); private MutliSelectAdapter mutliSelectAdapter; //Default Values private String title; @@ -36,10 +37,10 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search private String positiveText = "DONE"; private String negativeText = "CANCEL"; private TextView dialogTitle, dialogSubmit, dialogCancel; - private ArrayList previouslySelectedIdsList = new ArrayList<>(); + private List previouslySelectedIdsList = new ArrayList<>(); - private ArrayList tempPreviouslySelectedIdsList = new ArrayList<>(); - private ArrayList tempMainListOfAdapter = new ArrayList<>(); + private List tempPreviouslySelectedIdsList = new ArrayList<>(); + private List tempMainListOfAdapter = new ArrayList<>(); private SubmitCallbackListener submitCallbackListener; @@ -108,13 +109,13 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search return this; } - public MultiSelectDialog preSelectIDsList(ArrayList list) { + public MultiSelectDialog preSelectIDsList(List list) { this.previouslySelectedIdsList = list; this.tempPreviouslySelectedIdsList = new ArrayList<>(previouslySelectedIdsList); return this; } - public MultiSelectDialog multiSelectList(ArrayList list) { + public MultiSelectDialog multiSelectList(List list) { this.mainListOfAdapter = list; this.tempMainListOfAdapter = new ArrayList<>(mainListOfAdapter); if(maxSelectionLimit == 0) @@ -154,7 +155,7 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search dialogCancel.setText(negativeText.toUpperCase()); } - private ArrayList setCheckedIDS(ArrayList multiselectdata, ArrayList listOfIdsSelected) { + private List setCheckedIDS(List multiselectdata, List listOfIdsSelected) { for (int i = 0; i < multiselectdata.size(); i++) { multiselectdata.get(i).setSelected(false); @@ -168,10 +169,10 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search } - private ArrayList filter(ArrayList models, String query) { + private List filter(List models, String query) { query = query.toLowerCase(); - final ArrayList filteredModelList = new ArrayList<>(); + final List filteredModelList = new ArrayList<>(); if (query.equals("") | query.isEmpty()) { filteredModelList.addAll(models); return filteredModelList; @@ -197,7 +198,7 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search selectedIdsForCallback = previouslySelectedIdsList; mainListOfAdapter = setCheckedIDS(mainListOfAdapter, selectedIdsForCallback); - ArrayList filteredlist = filter(mainListOfAdapter, newText); + List filteredlist = filter(mainListOfAdapter, newText); mutliSelectAdapter.setData(filteredlist, newText.toLowerCase(), mutliSelectAdapter); return false; @@ -207,7 +208,7 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search public void onClick(View view) { if (view.getId() == R.id.done) { - ArrayList callBackListOfIds = selectedIdsForCallback; + List callBackListOfIds = selectedIdsForCallback; if (callBackListOfIds.size() >= minSelectionLimit) { if (callBackListOfIds.size() <= maxSelectionLimit) { @@ -282,9 +283,9 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search } - private ArrayList getSelectNameList() { + private List getSelectNameList() { - ArrayList names = new ArrayList<>(); + List names = new ArrayList<>(); for(int i=0;i selectedIds, ArrayList selectedNames, String commonSeperatedData); + void onSelected(List selectedIds, List selectedNames, String commonSeperatedData); void onCancel(); } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/mian/gitnex/helpers/TinyDB.java b/app/src/main/java/org/mian/gitnex/helpers/TinyDB.java index abff7dc3..2059f17e 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/TinyDB.java +++ b/app/src/main/java/org/mian/gitnex/helpers/TinyDB.java @@ -269,6 +269,10 @@ public class TinyDB { return preferences.getString(key, ""); } + public String getString(String key, String defaultValue) { + return preferences.getString(key, defaultValue); + } + /** * Get parsed ArrayList of String from SharedPreferences at 'key' * @param key SharedPreferences key diff --git a/app/src/main/java/org/mian/gitnex/interfaces/ApiInterface.java b/app/src/main/java/org/mian/gitnex/interfaces/ApiInterface.java index 9a8bd49b..b110a898 100644 --- a/app/src/main/java/org/mian/gitnex/interfaces/ApiInterface.java +++ b/app/src/main/java/org/mian/gitnex/interfaces/ApiInterface.java @@ -3,29 +3,29 @@ package org.mian.gitnex.interfaces; import com.google.gson.JsonElement; import org.mian.gitnex.models.AddEmail; import org.mian.gitnex.models.Branches; -import org.mian.gitnex.models.Commits; -import org.mian.gitnex.models.ExploreRepositories; -import org.mian.gitnex.models.Files; -import org.mian.gitnex.models.MergePullRequest; -import org.mian.gitnex.models.NewFile; -import org.mian.gitnex.models.PullRequests; -import org.mian.gitnex.models.UpdateIssueAssignees; -import org.mian.gitnex.models.UpdateIssueState; import org.mian.gitnex.models.Collaborators; +import org.mian.gitnex.models.Commits; import org.mian.gitnex.models.CreateIssue; import org.mian.gitnex.models.CreateLabel; import org.mian.gitnex.models.Emails; +import org.mian.gitnex.models.ExploreRepositories; +import org.mian.gitnex.models.Files; import org.mian.gitnex.models.GiteaVersion; import org.mian.gitnex.models.IssueComments; import org.mian.gitnex.models.Issues; import org.mian.gitnex.models.Labels; +import org.mian.gitnex.models.MergePullRequest; import org.mian.gitnex.models.Milestones; +import org.mian.gitnex.models.NewFile; import org.mian.gitnex.models.OrgOwner; import org.mian.gitnex.models.Organization; import org.mian.gitnex.models.OrganizationRepository; import org.mian.gitnex.models.Permission; +import org.mian.gitnex.models.PullRequests; import org.mian.gitnex.models.Releases; import org.mian.gitnex.models.Teams; +import org.mian.gitnex.models.UpdateIssueAssignees; +import org.mian.gitnex.models.UpdateIssueState; import org.mian.gitnex.models.UserInfo; import org.mian.gitnex.models.UserOrganizations; import org.mian.gitnex.models.UserRepositories; @@ -229,13 +229,13 @@ public interface ApiInterface { Call createNewFile(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("file") String fileName, @Body NewFile jsonStr); @GET("repos/{owner}/{repo}/contents") // get all the files and dirs of a repository - Call> getFiles(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName); + Call> getFiles(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Query("ref") String ref); @GET("repos/{owner}/{repo}/contents/{file}") // get single file contents - Call getSingleFileContents(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("file") String file); + Call getSingleFileContents(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("file") String file, @Query("ref") String ref); @GET("repos/{owner}/{repo}/contents/{fileDir}") // get all the sub files and dirs of a repository - Call> getDirFiles(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("fileDir") String fileDir); + Call> getDirFiles(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("fileDir") String fileDir, @Query("ref") String ref); @GET("user/starred/{owner}/{repo}") // check star status of a repository Call checkRepoStarStatus(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName); 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 fb76eb1f..44067158 100644 --- a/app/src/main/java/org/mian/gitnex/viewmodels/FilesViewModel.java +++ b/app/src/main/java/org/mian/gitnex/viewmodels/FilesViewModel.java @@ -11,7 +11,6 @@ import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.models.Files; import java.util.Collections; -import java.util.Comparator; import java.util.List; import retrofit2.Call; import retrofit2.Callback; @@ -26,20 +25,20 @@ public class FilesViewModel extends ViewModel { private static MutableLiveData> filesList; private static MutableLiveData> filesList2; - public LiveData> getFilesList(String instanceUrl, String token, String owner, String repo, Context ctx) { + public LiveData> getFilesList(String instanceUrl, String token, String owner, String repo, String ref, Context ctx) { filesList = new MutableLiveData<>(); - loadFilesList(instanceUrl, token, owner, repo, ctx); + loadFilesList(instanceUrl, token, owner, repo, ref, ctx); return filesList; } - private static void loadFilesList(String instanceUrl, String token, String owner, String repo, final Context ctx) { + private static void loadFilesList(String instanceUrl, String token, String owner, String repo, String ref, final Context ctx) { Call> call = RetrofitClient .getInstance(instanceUrl, ctx) .getApiInterface() - .getFiles(token, owner, repo); + .getFiles(token, owner, repo, ref); call.enqueue(new Callback>() { @@ -47,15 +46,13 @@ public class FilesViewModel extends ViewModel { public void onResponse(@NonNull Call> call, @NonNull Response> response) { if (response.isSuccessful()) { - Collections.sort(response.body(), new Comparator() { - @Override - public int compare(Files byType1, Files byType2) { - return byType1.getType().compareTo(byType2.getType()); - } - }); + assert response.body() != null; + Collections.sort(response.body(), (byType1, byType2) -> byType1.getType().compareTo(byType2.getType())); filesList.postValue(response.body()); + } else { + Toasty.info(ctx, ctx.getString(R.string.noDataFilesTab)); Log.i("onResponse", String.valueOf(response.code())); } @@ -63,27 +60,27 @@ public class FilesViewModel extends ViewModel { } @Override - public void onFailure(@NonNull Call> call, Throwable t) { + public void onFailure(@NonNull Call> call, @NonNull Throwable t) { Log.i("onFailure", t.toString()); } }); } - public LiveData> getFilesList2(String instanceUrl, String token, String owner, String repo, String filesDir, Context ctx) { + public LiveData> getFilesList2(String instanceUrl, String token, String owner, String repo, String filesDir, String ref, Context ctx) { filesList2 = new MutableLiveData<>(); - loadFilesList2(instanceUrl, token, owner, repo, filesDir, ctx); + loadFilesList2(instanceUrl, token, owner, repo, filesDir, ref, ctx); return filesList2; } - private static void loadFilesList2(String instanceUrl, String token, String owner, String repo, String filesDir, final Context ctx) { + private static void loadFilesList2(String instanceUrl, String token, String owner, String repo, String filesDir, String ref, final Context ctx) { Call> call = RetrofitClient .getInstance(instanceUrl, ctx) .getApiInterface() - .getDirFiles(token, owner, repo, filesDir); + .getDirFiles(token, owner, repo, filesDir, ref); call.enqueue(new Callback>() { @@ -91,15 +88,13 @@ public class FilesViewModel extends ViewModel { public void onResponse(@NonNull Call> call, @NonNull Response> response) { if (response.isSuccessful()) { - Collections.sort(response.body(), new Comparator() { - @Override - public int compare(Files byType1, Files byType2) { - return byType1.getType().compareTo(byType2.getType()); - } - }); + assert response.body() != null; + Collections.sort(response.body(), (byType1, byType2) -> byType1.getType().compareTo(byType2.getType())); filesList2.postValue(response.body()); + } else { + Toasty.info(ctx, ctx.getString(R.string.noDataFilesTab)); Log.i("onResponse", String.valueOf(response.code())); } @@ -107,7 +102,7 @@ public class FilesViewModel extends ViewModel { } @Override - public void onFailure(@NonNull Call> call, Throwable t) { + public void onFailure(@NonNull Call> call, @NonNull Throwable t) { Log.i("onFailure", t.toString()); } diff --git a/app/src/main/res/drawable/ic_branch.xml b/app/src/main/res/drawable/ic_branch.xml new file mode 100644 index 00000000..683ded41 --- /dev/null +++ b/app/src/main/res/drawable/ic_branch.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_repo.xml b/app/src/main/res/layout/bottom_sheet_repo.xml index cf1890aa..3efc5900 100644 --- a/app/src/main/res/layout/bottom_sheet_repo.xml +++ b/app/src/main/res/layout/bottom_sheet_repo.xml @@ -22,24 +22,24 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:text="@string/pageTitleNewFile" android:drawableStart="@drawable/ic_file" android:drawablePadding="24dp" + android:padding="12dp" + android:text="@string/pageTitleNewFile" android:textColor="?attr/primaryTextColor" - android:textSize="16sp" - android:padding="12dp" /> + android:textSize="16sp" /> + android:textSize="16sp" /> @@ -92,28 +89,28 @@ - + android:text="@string/cancelButton" /> - + +