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 <mmarif@swatian.com> Co-authored-by: 6543 <6543@noreply.codeberg.org> Co-authored-by: opyale <opyale@noreply.gitea.io> Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/571 Reviewed-by: 6543 <6543@noreply.codeberg.org>
This commit is contained in:
parent
25036ce5d2
commit
caa437d5e3
@ -139,7 +139,7 @@ public class AddRemoveAssigneesActivity extends BaseActivity {
|
|||||||
.multiSelectList(listOfCollaborators)
|
.multiSelectList(listOfCollaborators)
|
||||||
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
|
public void onSelected(List<Integer> selectedIds, List<String> selectedNames, String dataString) {
|
||||||
|
|
||||||
Log.i("selectedNames", String.valueOf(selectedNames));
|
Log.i("selectedNames", String.valueOf(selectedNames));
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ public class AddRemoveAssigneesActivity extends BaseActivity {
|
|||||||
.multiSelectList(listOfCollaborators)
|
.multiSelectList(listOfCollaborators)
|
||||||
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
|
public void onSelected(List<Integer> selectedIds, List<String> selectedNames, String dataString) {
|
||||||
|
|
||||||
updateIssueAssignees(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, loginUid, issueIndex, selectedNames);
|
updateIssueAssignees(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, loginUid, issueIndex, selectedNames);
|
||||||
tinyDb.putBoolean("singleIssueUpdate", true);
|
tinyDb.putBoolean("singleIssueUpdate", true);
|
||||||
|
@ -128,7 +128,7 @@ public class AddRemoveLabelsActivity extends BaseActivity {
|
|||||||
.multiSelectList(listOfLabels)
|
.multiSelectList(listOfLabels)
|
||||||
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
|
public void onSelected(List<Integer> selectedIds, List<String> selectedNames, String dataString) {
|
||||||
|
|
||||||
String labelIds = selectedIds.toString();
|
String labelIds = selectedIds.toString();
|
||||||
int[] integers;
|
int[] integers;
|
||||||
@ -169,7 +169,7 @@ public class AddRemoveLabelsActivity extends BaseActivity {
|
|||||||
.multiSelectList(listOfLabels)
|
.multiSelectList(listOfLabels)
|
||||||
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
|
public void onSelected(List<Integer> selectedIds, List<String> selectedNames, String dataString) {
|
||||||
|
|
||||||
String labelIds = selectedIds.toString();
|
String labelIds = selectedIds.toString();
|
||||||
int[] integers;
|
int[] integers;
|
||||||
|
@ -444,7 +444,7 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
|
|||||||
.multiSelectList(listOfAssignees)
|
.multiSelectList(listOfAssignees)
|
||||||
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
|
public void onSelected(List<Integer> selectedIds, List<String> selectedNames, String dataString) {
|
||||||
|
|
||||||
assigneesList.setText(dataString);
|
assigneesList.setText(dataString);
|
||||||
|
|
||||||
@ -507,7 +507,7 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
|
|||||||
.multiSelectList(listOfLabels)
|
.multiSelectList(listOfLabels)
|
||||||
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
|
public void onSelected(List<Integer> selectedIds, List<String> selectedNames, String dataString) {
|
||||||
|
|
||||||
newIssueLabels.setText(dataString.trim());
|
newIssueLabels.setText(dataString.trim());
|
||||||
labelsIdHolder.setText(selectedIds.toString());
|
labelsIdHolder.setText(selectedIds.toString());
|
||||||
|
@ -83,6 +83,7 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
|
|||||||
|
|
||||||
final TinyDB tinyDb = new TinyDB(appCtx);
|
final TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
String repoFullName = tinyDb.getString("repoFullName");
|
String repoFullName = tinyDb.getString("repoFullName");
|
||||||
|
String repoBranch = tinyDb.getString("repoBranch");
|
||||||
String[] parts = repoFullName.split("/");
|
String[] parts = repoFullName.split("/");
|
||||||
final String repoOwner = parts[0];
|
final String repoOwner = parts[0];
|
||||||
final String repoName = parts[1];
|
final String repoName = parts[1];
|
||||||
@ -125,15 +126,15 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
|
|||||||
|
|
||||||
toolbar_title.setText(singleFileName);
|
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);
|
final TinyDB tinyDb = new TinyDB(appCtx);
|
||||||
|
|
||||||
Call<Files> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getSingleFileContents(token, owner, repo, filename);
|
Call<Files> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getSingleFileContents(token, owner, repo, filename, ref);
|
||||||
|
|
||||||
call.enqueue(new Callback<Files>() {
|
call.enqueue(new Callback<Files>() {
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package org.mian.gitnex.activities;
|
|||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
@ -16,6 +17,7 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentManager;
|
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.Authorization;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Version;
|
import org.mian.gitnex.helpers.Version;
|
||||||
|
import org.mian.gitnex.models.Branches;
|
||||||
import org.mian.gitnex.models.UserRepositories;
|
import org.mian.gitnex.models.UserRepositories;
|
||||||
import org.mian.gitnex.models.WatchInfo;
|
import org.mian.gitnex.models.WatchInfo;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
@ -61,6 +67,7 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
private FragmentRefreshListener fragmentRefreshListener;
|
private FragmentRefreshListener fragmentRefreshListener;
|
||||||
private FragmentRefreshListenerPr fragmentRefreshListenerPr;
|
private FragmentRefreshListenerPr fragmentRefreshListenerPr;
|
||||||
private FragmentRefreshListenerMilestone fragmentRefreshListenerMilestone;
|
private FragmentRefreshListenerMilestone fragmentRefreshListenerMilestone;
|
||||||
|
private FragmentRefreshListenerFiles fragmentRefreshListenerFiles;
|
||||||
|
|
||||||
private final Context ctx = this;
|
private final Context ctx = this;
|
||||||
private Context appCtx;
|
private Context appCtx;
|
||||||
@ -285,6 +292,10 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
filterMilestoneBottomSheet.show(getSupportFragmentManager(), "repoFilterMenuMilestoneBottomSheet");
|
filterMilestoneBottomSheet.show(getSupportFragmentManager(), "repoFilterMenuMilestoneBottomSheet");
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case R.id.switchBranches:
|
||||||
|
chooseBranch();
|
||||||
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
|
|
||||||
@ -313,6 +324,10 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
startActivity(new Intent(RepoDetailActivity.this, AddCollaboratorToRepositoryActivity.class));
|
startActivity(new Intent(RepoDetailActivity.this, AddCollaboratorToRepositoryActivity.class));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "chooseBranch":
|
||||||
|
chooseBranch();
|
||||||
|
break;
|
||||||
|
|
||||||
case "createRelease":
|
case "createRelease":
|
||||||
startActivity(new Intent(RepoDetailActivity.this, CreateReleaseActivity.class));
|
startActivity(new Intent(RepoDetailActivity.this, CreateReleaseActivity.class));
|
||||||
break;
|
break;
|
||||||
@ -374,6 +389,65 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void chooseBranch() {
|
||||||
|
|
||||||
|
Call<List<Branches>> call = RetrofitClient.getInstance(instanceUrl, ctx)
|
||||||
|
.getApiInterface()
|
||||||
|
.getBranches(instanceToken, repositoryOwner, repositoryName);
|
||||||
|
|
||||||
|
call.enqueue(new Callback<List<Branches>>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<List<Branches>> call, @NonNull Response<List<Branches>> response) {
|
||||||
|
|
||||||
|
if(response.code() == 200) {
|
||||||
|
|
||||||
|
List<String> 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<List<Branches>> call, @NonNull Throwable t) {
|
||||||
|
|
||||||
|
Log.e("onFailure", t.toString());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
|
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
|
||||||
|
|
||||||
SectionsPagerAdapter(FragmentManager fm) {
|
SectionsPagerAdapter(FragmentManager fm) {
|
||||||
@ -393,7 +467,7 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
return RepoInfoFragment.newInstance(repositoryOwner, repositoryName);
|
return RepoInfoFragment.newInstance(repositoryOwner, repositoryName);
|
||||||
|
|
||||||
case 1: // Files
|
case 1: // Files
|
||||||
return FilesFragment.newInstance(repositoryOwner, repositoryName);
|
return FilesFragment.newInstance(repositoryOwner, repositoryName, tinyDB.getString("repoBranch"));
|
||||||
|
|
||||||
case 2: // Issues
|
case 2: // Issues
|
||||||
fragment = new IssuesFragment();
|
fragment = new IssuesFragment();
|
||||||
@ -444,32 +518,28 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
|
|||||||
|
|
||||||
UserRepositories repoInfo = response.body();
|
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")) {
|
if(repoInfo.getOpen_issues_count() != null) {
|
||||||
assert repoInfo != null;
|
|
||||||
|
|
||||||
if(repoInfo.getOpen_issues_count() != null) {
|
textViewBadgeIssue.setVisibility(View.VISIBLE);
|
||||||
|
textViewBadgeIssue.setText(repoInfo.getOpen_issues_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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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); }
|
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); }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -63,6 +63,7 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
|
|||||||
private TextView repoOpenIssuesCount;
|
private TextView repoOpenIssuesCount;
|
||||||
private TextView repoType;
|
private TextView repoType;
|
||||||
private LinearLayout archiveRepo;
|
private LinearLayout archiveRepo;
|
||||||
|
private TextView repoBranch;
|
||||||
|
|
||||||
private ReposSearchViewHolder(View itemView) {
|
private ReposSearchViewHolder(View itemView) {
|
||||||
|
|
||||||
@ -80,6 +81,7 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
|
|||||||
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
||||||
repoType = itemView.findViewById(R.id.repoType);
|
repoType = itemView.findViewById(R.id.repoType);
|
||||||
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
||||||
|
repoBranch = itemView.findViewById(R.id.repoBranch);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> {
|
itemView.setOnClickListener(v -> {
|
||||||
|
|
||||||
@ -93,6 +95,7 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
|
|||||||
tinyDb.putString("repoFullName", repoFullName.getText().toString());
|
tinyDb.putString("repoFullName", repoFullName.getText().toString());
|
||||||
tinyDb.putBoolean("resumeIssues", true);
|
tinyDb.putBoolean("resumeIssues", true);
|
||||||
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
||||||
|
tinyDb.putString("repoBranch", repoBranch.getText().toString());
|
||||||
|
|
||||||
String[] parts = fullName.getText().toString().split("/");
|
String[] parts = fullName.getText().toString().split("/");
|
||||||
final String repoOwner = parts[0];
|
final String repoOwner = parts[0];
|
||||||
@ -228,10 +231,9 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
|
|||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull final ExploreRepositoriesAdapter.ReposSearchViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull final ExploreRepositoriesAdapter.ReposSearchViewHolder holder, int position) {
|
||||||
|
|
||||||
final UserRepositories currentItem = searchedReposList.get(position);
|
UserRepositories currentItem = searchedReposList.get(position);
|
||||||
|
|
||||||
|
|
||||||
holder.repoDescription.setVisibility(View.GONE);
|
holder.repoDescription.setVisibility(View.GONE);
|
||||||
|
holder.repoBranch.setText(currentItem.getDefault_branch());
|
||||||
|
|
||||||
ColorGenerator generator = ColorGenerator.MATERIAL;
|
ColorGenerator generator = ColorGenerator.MATERIAL;
|
||||||
int color = generator.getColor(currentItem.getName());
|
int color = generator.getColor(currentItem.getName());
|
||||||
|
@ -51,23 +51,20 @@ public class FilesAdapter extends RecyclerView.Adapter<FilesAdapter.FilesViewHol
|
|||||||
|
|
||||||
//ImageView filesDropdownMenu = itemView.findViewById(R.id.filesDropdownMenu);
|
//ImageView filesDropdownMenu = itemView.findViewById(R.id.filesDropdownMenu);
|
||||||
|
|
||||||
fileName.setOnClickListener(new View.OnClickListener() {
|
fileName.setOnClickListener(v -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
|
|
||||||
Context context = v.getContext();
|
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,14 +11,14 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
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.annotation.NonNull;
|
||||||
import androidx.appcompat.widget.AppCompatCheckBox;
|
import androidx.appcompat.widget.AppCompatCheckBox;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
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
|
* Author com.github.abumoallim, modified by M M Arif
|
||||||
@ -26,11 +26,11 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
|
|
||||||
public class MutliSelectAdapter extends RecyclerView.Adapter<MutliSelectAdapter.MultiSelectDialogViewHolder> {
|
public class MutliSelectAdapter extends RecyclerView.Adapter<MutliSelectAdapter.MultiSelectDialogViewHolder> {
|
||||||
|
|
||||||
private ArrayList<MultiSelectModel> mDataSet;
|
private List<MultiSelectModel> mDataSet;
|
||||||
private String mSearchQuery = "";
|
private String mSearchQuery = "";
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
public MutliSelectAdapter(ArrayList<MultiSelectModel> dataSet, Context context) {
|
public MutliSelectAdapter(List<MultiSelectModel> dataSet, Context context) {
|
||||||
this.mDataSet = dataSet;
|
this.mDataSet = dataSet;
|
||||||
this.mContext = context;
|
this.mContext = context;
|
||||||
}
|
}
|
||||||
@ -163,7 +163,7 @@ public class MutliSelectAdapter extends RecyclerView.Adapter<MutliSelectAdapter.
|
|||||||
return mDataSet.size();
|
return mDataSet.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setData(ArrayList<MultiSelectModel> data, String query, MutliSelectAdapter mutliSelectAdapter) {
|
public void setData(List<MultiSelectModel> data, String query, MutliSelectAdapter mutliSelectAdapter) {
|
||||||
|
|
||||||
this.mDataSet = data;
|
this.mDataSet = data;
|
||||||
this.mSearchQuery = query;
|
this.mSearchQuery = query;
|
||||||
|
@ -60,6 +60,7 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
private TextView repoType;
|
private TextView repoType;
|
||||||
private CheckBox isRepoAdmin;
|
private CheckBox isRepoAdmin;
|
||||||
private LinearLayout archiveRepo;
|
private LinearLayout archiveRepo;
|
||||||
|
private TextView repoBranch;
|
||||||
|
|
||||||
private MyReposViewHolder(View itemView) {
|
private MyReposViewHolder(View itemView) {
|
||||||
|
|
||||||
@ -76,6 +77,7 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
repoType = itemView.findViewById(R.id.repoType);
|
repoType = itemView.findViewById(R.id.repoType);
|
||||||
isRepoAdmin = itemView.findViewById(R.id.repoIsAdmin);
|
isRepoAdmin = itemView.findViewById(R.id.repoIsAdmin);
|
||||||
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
||||||
|
repoBranch = itemView.findViewById(R.id.repoBranch);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> {
|
itemView.setOnClickListener(v -> {
|
||||||
|
|
||||||
@ -89,6 +91,7 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
tinyDb.putString("repoType", repoType.getText().toString());
|
tinyDb.putString("repoType", repoType.getText().toString());
|
||||||
//tinyDb.putBoolean("resumeIssues", true);
|
//tinyDb.putBoolean("resumeIssues", true);
|
||||||
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
||||||
|
tinyDb.putString("repoBranch", repoBranch.getText().toString());
|
||||||
|
|
||||||
String[] parts = repoFullName.getText().toString().split("/");
|
String[] parts = repoFullName.getText().toString().split("/");
|
||||||
final String repoOwner = parts[0];
|
final String repoOwner = parts[0];
|
||||||
@ -234,6 +237,7 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
|||||||
|
|
||||||
UserRepositories currentItem = reposList.get(position);
|
UserRepositories currentItem = reposList.get(position);
|
||||||
holder.repoDescription.setVisibility(View.GONE);
|
holder.repoDescription.setVisibility(View.GONE);
|
||||||
|
holder.repoBranch.setText(currentItem.getDefault_branch());
|
||||||
|
|
||||||
ColorGenerator generator = ColorGenerator.MATERIAL;
|
ColorGenerator generator = ColorGenerator.MATERIAL;
|
||||||
int color = generator.getColor(currentItem.getName());
|
int color = generator.getColor(currentItem.getName());
|
||||||
|
@ -60,6 +60,7 @@ public class ReposListAdapter extends RecyclerView.Adapter<ReposListAdapter.Repo
|
|||||||
private TextView repoOpenIssuesCount;
|
private TextView repoOpenIssuesCount;
|
||||||
private TextView repoType;
|
private TextView repoType;
|
||||||
private LinearLayout archiveRepo;
|
private LinearLayout archiveRepo;
|
||||||
|
private TextView repoBranch;
|
||||||
|
|
||||||
private ReposViewHolder(View itemView) {
|
private ReposViewHolder(View itemView) {
|
||||||
|
|
||||||
@ -76,6 +77,7 @@ public class ReposListAdapter extends RecyclerView.Adapter<ReposListAdapter.Repo
|
|||||||
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
||||||
repoType = itemView.findViewById(R.id.repoType);
|
repoType = itemView.findViewById(R.id.repoType);
|
||||||
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
||||||
|
repoBranch = itemView.findViewById(R.id.repoBranch);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> {
|
itemView.setOnClickListener(v -> {
|
||||||
|
|
||||||
@ -91,6 +93,7 @@ public class ReposListAdapter extends RecyclerView.Adapter<ReposListAdapter.Repo
|
|||||||
tinyDb.putString("repoType", repoType_.getText().toString());
|
tinyDb.putString("repoType", repoType_.getText().toString());
|
||||||
//tinyDb.putBoolean("resumeIssues", true);
|
//tinyDb.putBoolean("resumeIssues", true);
|
||||||
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
||||||
|
tinyDb.putString("repoBranch", repoBranch.getText().toString());
|
||||||
|
|
||||||
String[] parts = repoFullName.getText().toString().split("/");
|
String[] parts = repoFullName.getText().toString().split("/");
|
||||||
final String repoOwner = parts[0];
|
final String repoOwner = parts[0];
|
||||||
@ -235,6 +238,7 @@ public class ReposListAdapter extends RecyclerView.Adapter<ReposListAdapter.Repo
|
|||||||
|
|
||||||
UserRepositories currentItem = reposList.get(position);
|
UserRepositories currentItem = reposList.get(position);
|
||||||
holder.repoDescription.setVisibility(View.GONE);
|
holder.repoDescription.setVisibility(View.GONE);
|
||||||
|
holder.repoBranch.setText(currentItem.getDefault_branch());
|
||||||
|
|
||||||
ColorGenerator generator = ColorGenerator.MATERIAL;
|
ColorGenerator generator = ColorGenerator.MATERIAL;
|
||||||
int color = generator.getColor(currentItem.getName());
|
int color = generator.getColor(currentItem.getName());
|
||||||
|
@ -60,6 +60,7 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter<RepositoriesB
|
|||||||
private TextView repoOpenIssuesCount;
|
private TextView repoOpenIssuesCount;
|
||||||
private TextView repoType;
|
private TextView repoType;
|
||||||
private LinearLayout archiveRepo;
|
private LinearLayout archiveRepo;
|
||||||
|
private TextView repoBranch;
|
||||||
|
|
||||||
private OrgReposViewHolder(View itemView) {
|
private OrgReposViewHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
@ -75,6 +76,7 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter<RepositoriesB
|
|||||||
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
||||||
repoType = itemView.findViewById(R.id.repoType);
|
repoType = itemView.findViewById(R.id.repoType);
|
||||||
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
||||||
|
repoBranch = itemView.findViewById(R.id.repoBranch);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> {
|
itemView.setOnClickListener(v -> {
|
||||||
|
|
||||||
@ -88,6 +90,7 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter<RepositoriesB
|
|||||||
tinyDb.putString("repoType", repoType.getText().toString());
|
tinyDb.putString("repoType", repoType.getText().toString());
|
||||||
//tinyDb.putBoolean("resumeIssues", true);
|
//tinyDb.putBoolean("resumeIssues", true);
|
||||||
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
||||||
|
tinyDb.putString("repoBranch", repoBranch.getText().toString());
|
||||||
|
|
||||||
String[] parts = fullName.getText().toString().split("/");
|
String[] parts = fullName.getText().toString().split("/");
|
||||||
final String repoOwner = parts[0];
|
final String repoOwner = parts[0];
|
||||||
@ -230,6 +233,7 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter<RepositoriesB
|
|||||||
|
|
||||||
UserRepositories currentItem = reposList.get(position);
|
UserRepositories currentItem = reposList.get(position);
|
||||||
holder.repoDescription.setVisibility(View.GONE);
|
holder.repoDescription.setVisibility(View.GONE);
|
||||||
|
holder.repoBranch.setText(currentItem.getDefault_branch());
|
||||||
|
|
||||||
ColorGenerator generator = ColorGenerator.MATERIAL;
|
ColorGenerator generator = ColorGenerator.MATERIAL;
|
||||||
int color = generator.getColor(currentItem.getName());
|
int color = generator.getColor(currentItem.getName());
|
||||||
|
@ -60,6 +60,7 @@ public class StarredReposListAdapter extends RecyclerView.Adapter<StarredReposLi
|
|||||||
private TextView repoOpenIssuesCount;
|
private TextView repoOpenIssuesCount;
|
||||||
private TextView repoType;
|
private TextView repoType;
|
||||||
private LinearLayout archiveRepo;
|
private LinearLayout archiveRepo;
|
||||||
|
private TextView repoBranch;
|
||||||
|
|
||||||
private StarredReposViewHolder(View itemView) {
|
private StarredReposViewHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
@ -75,6 +76,7 @@ public class StarredReposListAdapter extends RecyclerView.Adapter<StarredReposLi
|
|||||||
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
ImageView reposDropdownMenu = itemView.findViewById(R.id.reposDropdownMenu);
|
||||||
repoType = itemView.findViewById(R.id.repoType);
|
repoType = itemView.findViewById(R.id.repoType);
|
||||||
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
archiveRepo = itemView.findViewById(R.id.archiveRepoFrame);
|
||||||
|
repoBranch = itemView.findViewById(R.id.repoBranch);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> {
|
itemView.setOnClickListener(v -> {
|
||||||
|
|
||||||
@ -88,6 +90,7 @@ public class StarredReposListAdapter extends RecyclerView.Adapter<StarredReposLi
|
|||||||
tinyDb.putString("repoType", repoType.getText().toString());
|
tinyDb.putString("repoType", repoType.getText().toString());
|
||||||
//tinyDb.putBoolean("resumeIssues", true);
|
//tinyDb.putBoolean("resumeIssues", true);
|
||||||
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
tinyDb.putBoolean("isRepoAdmin", isRepoAdmin.isChecked());
|
||||||
|
tinyDb.putString("repoBranch", repoBranch.getText().toString());
|
||||||
|
|
||||||
String[] parts = fullName.getText().toString().split("/");
|
String[] parts = fullName.getText().toString().split("/");
|
||||||
final String repoOwner = parts[0];
|
final String repoOwner = parts[0];
|
||||||
@ -231,6 +234,7 @@ public class StarredReposListAdapter extends RecyclerView.Adapter<StarredReposLi
|
|||||||
|
|
||||||
UserRepositories currentItem = reposList.get(position);
|
UserRepositories currentItem = reposList.get(position);
|
||||||
holder.repoDescription.setVisibility(View.GONE);
|
holder.repoDescription.setVisibility(View.GONE);
|
||||||
|
holder.repoBranch.setText(currentItem.getDefault_branch());
|
||||||
|
|
||||||
ColorGenerator generator = ColorGenerator.MATERIAL;
|
ColorGenerator generator = ColorGenerator.MATERIAL;
|
||||||
int color = generator.getColor(currentItem.getName());
|
int color = generator.getColor(currentItem.getName());
|
||||||
|
@ -22,43 +22,42 @@ public class BottomSheetOrganizationFragment extends BottomSheetDialogFragment {
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
View v = inflater.inflate(R.layout.bottom_sheet_organization, container, false);
|
|
||||||
|
View v = inflater.inflate(R.layout.bottom_sheet_organization, container, false);
|
||||||
|
|
||||||
TextView createTeam = v.findViewById(R.id.createTeam);
|
TextView createTeam = v.findViewById(R.id.createTeam);
|
||||||
TextView createRepository = v.findViewById(R.id.createRepository);
|
TextView createRepository = v.findViewById(R.id.createRepository);
|
||||||
|
|
||||||
createTeam.setOnClickListener(new View.OnClickListener() {
|
createTeam.setOnClickListener(v1 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
bmListener.onButtonClicked("team");
|
||||||
bmListener.onButtonClicked("team");
|
dismiss();
|
||||||
dismiss();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
createRepository.setOnClickListener(new View.OnClickListener() {
|
createRepository.setOnClickListener(v12 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
bmListener.onButtonClicked("repository");
|
||||||
bmListener.onButtonClicked("repository");
|
dismiss();
|
||||||
dismiss();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface BottomSheetListener {
|
public interface BottomSheetListener {
|
||||||
|
|
||||||
void onButtonClicked(String text);
|
void onButtonClicked(String text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(@NonNull Context context) {
|
public void onAttach(@NonNull Context context) {
|
||||||
|
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
bmListener = (BottomSheetOrganizationFragment.BottomSheetListener) context;
|
bmListener = (BottomSheetOrganizationFragment.BottomSheetListener) context;
|
||||||
} catch (ClassCastException e) {
|
}
|
||||||
throw new ClassCastException(context.toString()
|
catch (ClassCastException e) {
|
||||||
+ " must implement BottomSheetListener");
|
throw new ClassCastException(context.toString() + " must implement BottomSheetListener");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,38 +41,33 @@ public class BottomSheetRepoFragment extends BottomSheetDialogFragment {
|
|||||||
TextView unWatchRepository = v.findViewById(R.id.unWatchRepository);
|
TextView unWatchRepository = v.findViewById(R.id.unWatchRepository);
|
||||||
TextView shareRepository = v.findViewById(R.id.shareRepository);
|
TextView shareRepository = v.findViewById(R.id.shareRepository);
|
||||||
|
|
||||||
createLabel.setOnClickListener(new View.OnClickListener() {
|
createLabel.setOnClickListener(v112 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
bmListener.onButtonClicked("label");
|
||||||
bmListener.onButtonClicked("label");
|
dismiss();
|
||||||
dismiss();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if(tinyDb.getBoolean("hasIssues")) {
|
if(tinyDb.getBoolean("hasIssues")) {
|
||||||
createIssue.setVisibility(View.VISIBLE);
|
createIssue.setVisibility(View.VISIBLE);
|
||||||
createIssue.setOnClickListener(new View.OnClickListener() {
|
createIssue.setOnClickListener(v12 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
bmListener.onButtonClicked("newIssue");
|
||||||
bmListener.onButtonClicked("newIssue");
|
dismiss();
|
||||||
dismiss();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
createIssue.setVisibility(View.GONE);
|
createIssue.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
createMilestone.setOnClickListener(new View.OnClickListener() {
|
createMilestone.setOnClickListener(v13 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
bmListener.onButtonClicked("newMilestone");
|
||||||
bmListener.onButtonClicked("newMilestone");
|
dismiss();
|
||||||
dismiss();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (tinyDb.getBoolean("isRepoAdmin")) {
|
if (tinyDb.getBoolean("isRepoAdmin")) {
|
||||||
addCollaborator.setOnClickListener(v1 -> {
|
addCollaborator.setOnClickListener(v1 -> {
|
||||||
|
|
||||||
bmListener.onButtonClicked("addCollaborator");
|
bmListener.onButtonClicked("addCollaborator");
|
||||||
dismiss();
|
dismiss();
|
||||||
});
|
});
|
||||||
@ -80,67 +75,51 @@ public class BottomSheetRepoFragment extends BottomSheetDialogFragment {
|
|||||||
addCollaborator.setVisibility(View.GONE);
|
addCollaborator.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
createRelease.setOnClickListener(new View.OnClickListener() {
|
createRelease.setOnClickListener(v14 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
bmListener.onButtonClicked("createRelease");
|
||||||
bmListener.onButtonClicked("createRelease");
|
dismiss();
|
||||||
dismiss();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shareRepository.setOnClickListener(new View.OnClickListener() {
|
shareRepository.setOnClickListener(v15 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
bmListener.onButtonClicked("shareRepo");
|
||||||
bmListener.onButtonClicked("shareRepo");
|
dismiss();
|
||||||
dismiss();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
openWebRepo.setOnClickListener(new View.OnClickListener() {
|
openWebRepo.setOnClickListener(v16 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
bmListener.onButtonClicked("openWebRepo");
|
||||||
bmListener.onButtonClicked("openWebRepo");
|
dismiss();
|
||||||
dismiss();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
newFile.setOnClickListener(new View.OnClickListener() {
|
newFile.setOnClickListener(v17 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
bmListener.onButtonClicked("newFile");
|
||||||
bmListener.onButtonClicked("newFile");
|
dismiss();
|
||||||
dismiss();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if(tinyDb.getInt("repositoryStarStatus") == 204) { // star a repo
|
if(tinyDb.getInt("repositoryStarStatus") == 204) { // star a repo
|
||||||
|
|
||||||
starRepository.setVisibility(View.GONE);
|
starRepository.setVisibility(View.GONE);
|
||||||
|
unStarRepository.setOnClickListener(v18 -> {
|
||||||
|
|
||||||
unStarRepository.setOnClickListener(new View.OnClickListener() {
|
RepositoryActions.unStarRepository(getContext());
|
||||||
@Override
|
tinyDb.putInt("repositoryStarStatus", 404);
|
||||||
public void onClick(View v) {
|
dismiss();
|
||||||
|
|
||||||
RepositoryActions.unStarRepository(getContext());
|
|
||||||
tinyDb.putInt("repositoryStarStatus", 404);
|
|
||||||
dismiss();
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(tinyDb.getInt("repositoryStarStatus") == 404) {
|
else if(tinyDb.getInt("repositoryStarStatus") == 404) {
|
||||||
|
|
||||||
unStarRepository.setVisibility(View.GONE);
|
unStarRepository.setVisibility(View.GONE);
|
||||||
|
starRepository.setOnClickListener(v19 -> {
|
||||||
|
|
||||||
starRepository.setOnClickListener(new View.OnClickListener() {
|
RepositoryActions.starRepository(getContext());
|
||||||
@Override
|
tinyDb.putInt("repositoryStarStatus", 204);
|
||||||
public void onClick(View v) {
|
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
|
if(tinyDb.getBoolean("repositoryWatchStatus")) { // watch a repo
|
||||||
|
|
||||||
watchRepository.setVisibility(View.GONE);
|
watchRepository.setVisibility(View.GONE);
|
||||||
|
unWatchRepository.setOnClickListener(v110 -> {
|
||||||
|
|
||||||
unWatchRepository.setOnClickListener(new View.OnClickListener() {
|
RepositoryActions.unWatchRepository(getContext());
|
||||||
@Override
|
tinyDb.putBoolean("repositoryWatchStatus", false);
|
||||||
public void onClick(View v) {
|
dismiss();
|
||||||
|
|
||||||
RepositoryActions.unWatchRepository(getContext());
|
|
||||||
tinyDb.putBoolean("repositoryWatchStatus", false);
|
|
||||||
dismiss();
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
unWatchRepository.setVisibility(View.GONE);
|
unWatchRepository.setVisibility(View.GONE);
|
||||||
|
watchRepository.setOnClickListener(v111 -> {
|
||||||
|
|
||||||
watchRepository.setOnClickListener(new View.OnClickListener() {
|
RepositoryActions.watchRepository(getContext());
|
||||||
@Override
|
tinyDb.putBoolean("repositoryWatchStatus", true);
|
||||||
public void onClick(View v) {
|
dismiss();
|
||||||
|
|
||||||
RepositoryActions.watchRepository(getContext());
|
|
||||||
tinyDb.putBoolean("repositoryWatchStatus", true);
|
|
||||||
dismiss();
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,23 +15,21 @@ import android.widget.LinearLayout;
|
|||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.lifecycle.Observer;
|
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration;
|
import androidx.recyclerview.widget.DividerItemDecoration;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.activities.FileViewActivity;
|
import org.mian.gitnex.activities.FileViewActivity;
|
||||||
|
import org.mian.gitnex.activities.RepoDetailActivity;
|
||||||
import org.mian.gitnex.adapters.FilesAdapter;
|
import org.mian.gitnex.adapters.FilesAdapter;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.models.Files;
|
|
||||||
import org.mian.gitnex.viewmodels.FilesViewModel;
|
import org.mian.gitnex.viewmodels.FilesViewModel;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import moe.feng.common.view.breadcrumbs.BreadcrumbsView;
|
import moe.feng.common.view.breadcrumbs.BreadcrumbsView;
|
||||||
import moe.feng.common.view.breadcrumbs.DefaultBreadcrumbsCallback;
|
import moe.feng.common.view.breadcrumbs.DefaultBreadcrumbsCallback;
|
||||||
@ -51,10 +49,12 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
private TextView fileStructure;
|
private TextView fileStructure;
|
||||||
private static String repoNameF = "param2";
|
private static String repoNameF = "param2";
|
||||||
private static String repoOwnerF = "param1";
|
private static String repoOwnerF = "param1";
|
||||||
|
private static String repoRefF = "param3";
|
||||||
private BreadcrumbsView mBreadcrumbsView;
|
private BreadcrumbsView mBreadcrumbsView;
|
||||||
|
|
||||||
private String repoName;
|
private String repoName;
|
||||||
private String repoOwner;
|
private String repoOwner;
|
||||||
|
private String ref;
|
||||||
|
|
||||||
private OnFragmentInteractionListener mListener;
|
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();
|
FilesFragment fragment = new FilesFragment();
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putString(repoOwnerF, param1);
|
args.putString(repoOwnerF, param1);
|
||||||
args.putString(repoNameF, param2);
|
args.putString(repoNameF, param2);
|
||||||
|
args.putString(repoRefF, param3);
|
||||||
fragment.setArguments(args);
|
fragment.setArguments(args);
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
@ -79,6 +80,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
if(getArguments() != null) {
|
if(getArguments() != null) {
|
||||||
repoName = getArguments().getString(repoNameF);
|
repoName = getArguments().getString(repoNameF);
|
||||||
repoOwner = getArguments().getString(repoOwnerF);
|
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);
|
mProgressBar = v.findViewById(R.id.progress_bar);
|
||||||
|
|
||||||
mBreadcrumbsView = v.findViewById(R.id.breadcrumbs_view);
|
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;
|
return v;
|
||||||
}
|
}
|
||||||
@ -120,13 +131,6 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
super.onResume();
|
super.onResume();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static BreadcrumbItem createItem(String title) {
|
|
||||||
|
|
||||||
List<String> list = new ArrayList<>();
|
|
||||||
list.add(title);
|
|
||||||
return new BreadcrumbItem(list);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClickDir(String dirName) {
|
public void onClickDir(String dirName) {
|
||||||
|
|
||||||
@ -145,7 +149,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
dirName_ = dirName_.startsWith("/") ? dirName_.substring(1) : dirName_;
|
dirName_ = dirName_.startsWith("/") ? dirName_.substring(1) : dirName_;
|
||||||
final String finalDirName_ = dirName_;
|
final String finalDirName_ = dirName_;
|
||||||
|
|
||||||
mBreadcrumbsView.addItem(createItem(dirName));
|
mBreadcrumbsView.addItem(new BreadcrumbItem(Collections.singletonList(dirName)));
|
||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
mBreadcrumbsView.setCallback(new DefaultBreadcrumbsCallback<BreadcrumbItem>() {
|
mBreadcrumbsView.setCallback(new DefaultBreadcrumbsCallback<BreadcrumbItem>() {
|
||||||
|
|
||||||
@ -154,7 +158,8 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
public void onNavigateBack(BreadcrumbItem item, int position) {
|
public void onNavigateBack(BreadcrumbItem item, int position) {
|
||||||
|
|
||||||
if(position == 0) {
|
if(position == 0) {
|
||||||
fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName);
|
|
||||||
|
fetchDataAsync(instanceUrl, Authorization.returnAuthentication(getContext(), loginUid, instanceToken), repoOwner, repoName, ref);
|
||||||
fileStructure.setText("");
|
fileStructure.setText("");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -165,7 +170,7 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
|
|
||||||
String currentIndex = (result + item.getSelectedItem()).substring(1);
|
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);
|
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);
|
mRecyclerView.setVisibility(View.GONE);
|
||||||
mProgressBar.setVisibility(View.VISIBLE);
|
mProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
FilesViewModel filesModel = new ViewModelProvider(this).get(FilesViewModel.class);
|
FilesViewModel filesModel = new ViewModelProvider(this).get(FilesViewModel.class);
|
||||||
|
|
||||||
filesModel.getFilesList(instanceUrl, instanceToken, owner, repo, getContext()).observe(getViewLifecycleOwner(), new Observer<List<Files>>() {
|
filesModel.getFilesList(instanceUrl, instanceToken, owner, repo, ref, getContext()).observe(getViewLifecycleOwner(), filesListMain -> {
|
||||||
|
|
||||||
@Override
|
adapter = new FilesAdapter(getContext(), filesListMain, FilesFragment.this);
|
||||||
public void onChanged(@Nullable List<Files> filesListMain) {
|
mBreadcrumbsView.removeItemAfter(1);
|
||||||
|
|
||||||
adapter = new FilesAdapter(getContext(), filesListMain, FilesFragment.this);
|
if(adapter.getItemCount() > 0) {
|
||||||
|
mRecyclerView.setAdapter(adapter);
|
||||||
mBreadcrumbsView.removeItemAfter(1);
|
AppUtil.setMultiVisibility(View.VISIBLE, mRecyclerView, filesFrame);
|
||||||
if(adapter.getItemCount() > 0) {
|
noDataFiles.setVisibility(View.GONE);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
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);
|
mRecyclerView.setVisibility(View.GONE);
|
||||||
mProgressBar.setVisibility(View.VISIBLE);
|
mProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
FilesViewModel filesModel2 = new ViewModelProvider(this).get(FilesViewModel.class);
|
FilesViewModel filesModel2 = new ViewModelProvider(this).get(FilesViewModel.class);
|
||||||
|
|
||||||
filesModel2.getFilesList2(instanceUrl, instanceToken, owner, repo, filesDir, getContext()).observe(this, new Observer<List<Files>>() {
|
filesModel2.getFilesList2(instanceUrl, instanceToken, owner, repo, filesDir, ref, getContext()).observe(this, filesListMain2 -> {
|
||||||
|
|
||||||
@Override
|
adapter = new FilesAdapter(getContext(), filesListMain2, FilesFragment.this);
|
||||||
public void onChanged(@Nullable List<Files> filesListMain2) {
|
|
||||||
|
|
||||||
adapter = new FilesAdapter(getContext(), filesListMain2, FilesFragment.this);
|
if(adapter.getItemCount() > 0) {
|
||||||
if(adapter.getItemCount() > 0) {
|
mRecyclerView.setAdapter(adapter);
|
||||||
mRecyclerView.setVisibility(View.VISIBLE);
|
AppUtil.setMultiVisibility(View.VISIBLE, mRecyclerView, filesFrame);
|
||||||
mRecyclerView.setAdapter(adapter);
|
noDataFiles.setVisibility(View.GONE);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
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) {
|
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
|
||||||
|
|
||||||
inflater.inflate(R.menu.search_menu, menu);
|
inflater.inflate(R.menu.search_menu, menu);
|
||||||
|
inflater.inflate(R.menu.files_switch_branches_menu, menu);
|
||||||
super.onCreateOptionsMenu(menu, inflater);
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
|
|
||||||
MenuItem searchItem = menu.findItem(R.id.action_search);
|
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() {
|
searchView.setOnQueryTextListener(new androidx.appcompat.widget.SearchView.OnQueryTextListener() {
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onQueryTextSubmit(String query) {
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onQueryTextChange(String newText) {
|
public boolean onQueryTextChange(String newText) {
|
||||||
|
|
||||||
if(mRecyclerView.getAdapter() != null) {
|
if(mRecyclerView.getAdapter() != null) {
|
||||||
adapter.getFilter().filter(newText);
|
adapter.getFilter().filter(newText);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onQueryTextSubmit(String query) { return false; }
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -308,10 +304,6 @@ public class FilesFragment extends Fragment implements FilesAdapter.FilesAdapter
|
|||||||
mListener = null;
|
mListener = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface OnFragmentInteractionListener {
|
public interface OnFragmentInteractionListener { void onFragmentInteraction(Uri uri); }
|
||||||
|
|
||||||
void onFragmentInteraction(Uri uri);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,15 +10,16 @@ import android.view.Window;
|
|||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
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.annotation.NonNull;
|
||||||
import androidx.appcompat.app.AppCompatDialogFragment;
|
import androidx.appcompat.app.AppCompatDialogFragment;
|
||||||
import androidx.appcompat.widget.SearchView;
|
import androidx.appcompat.widget.SearchView;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
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
|
* 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 class MultiSelectDialog extends AppCompatDialogFragment implements SearchView.OnQueryTextListener, View.OnClickListener {
|
||||||
|
|
||||||
public static ArrayList<Integer> selectedIdsForCallback = new ArrayList<>();
|
public static List<Integer> selectedIdsForCallback = new ArrayList<>();
|
||||||
|
|
||||||
public ArrayList<MultiSelectModel> mainListOfAdapter = new ArrayList<>();
|
public List<MultiSelectModel> mainListOfAdapter = new ArrayList<>();
|
||||||
private MutliSelectAdapter mutliSelectAdapter;
|
private MutliSelectAdapter mutliSelectAdapter;
|
||||||
//Default Values
|
//Default Values
|
||||||
private String title;
|
private String title;
|
||||||
@ -36,10 +37,10 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search
|
|||||||
private String positiveText = "DONE";
|
private String positiveText = "DONE";
|
||||||
private String negativeText = "CANCEL";
|
private String negativeText = "CANCEL";
|
||||||
private TextView dialogTitle, dialogSubmit, dialogCancel;
|
private TextView dialogTitle, dialogSubmit, dialogCancel;
|
||||||
private ArrayList<Integer> previouslySelectedIdsList = new ArrayList<>();
|
private List<Integer> previouslySelectedIdsList = new ArrayList<>();
|
||||||
|
|
||||||
private ArrayList<Integer> tempPreviouslySelectedIdsList = new ArrayList<>();
|
private List<Integer> tempPreviouslySelectedIdsList = new ArrayList<>();
|
||||||
private ArrayList<MultiSelectModel> tempMainListOfAdapter = new ArrayList<>();
|
private List<MultiSelectModel> tempMainListOfAdapter = new ArrayList<>();
|
||||||
|
|
||||||
private SubmitCallbackListener submitCallbackListener;
|
private SubmitCallbackListener submitCallbackListener;
|
||||||
|
|
||||||
@ -108,13 +109,13 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MultiSelectDialog preSelectIDsList(ArrayList<Integer> list) {
|
public MultiSelectDialog preSelectIDsList(List<Integer> list) {
|
||||||
this.previouslySelectedIdsList = list;
|
this.previouslySelectedIdsList = list;
|
||||||
this.tempPreviouslySelectedIdsList = new ArrayList<>(previouslySelectedIdsList);
|
this.tempPreviouslySelectedIdsList = new ArrayList<>(previouslySelectedIdsList);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MultiSelectDialog multiSelectList(ArrayList<MultiSelectModel> list) {
|
public MultiSelectDialog multiSelectList(List<MultiSelectModel> list) {
|
||||||
this.mainListOfAdapter = list;
|
this.mainListOfAdapter = list;
|
||||||
this.tempMainListOfAdapter = new ArrayList<>(mainListOfAdapter);
|
this.tempMainListOfAdapter = new ArrayList<>(mainListOfAdapter);
|
||||||
if(maxSelectionLimit == 0)
|
if(maxSelectionLimit == 0)
|
||||||
@ -154,7 +155,7 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search
|
|||||||
dialogCancel.setText(negativeText.toUpperCase());
|
dialogCancel.setText(negativeText.toUpperCase());
|
||||||
}
|
}
|
||||||
|
|
||||||
private ArrayList<MultiSelectModel> setCheckedIDS(ArrayList<MultiSelectModel> multiselectdata, ArrayList<Integer> listOfIdsSelected) {
|
private List<MultiSelectModel> setCheckedIDS(List<MultiSelectModel> multiselectdata, List<Integer> listOfIdsSelected) {
|
||||||
|
|
||||||
for (int i = 0; i < multiselectdata.size(); i++) {
|
for (int i = 0; i < multiselectdata.size(); i++) {
|
||||||
multiselectdata.get(i).setSelected(false);
|
multiselectdata.get(i).setSelected(false);
|
||||||
@ -168,10 +169,10 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ArrayList<MultiSelectModel> filter(ArrayList<MultiSelectModel> models, String query) {
|
private List<MultiSelectModel> filter(List<MultiSelectModel> models, String query) {
|
||||||
|
|
||||||
query = query.toLowerCase();
|
query = query.toLowerCase();
|
||||||
final ArrayList<MultiSelectModel> filteredModelList = new ArrayList<>();
|
final List<MultiSelectModel> filteredModelList = new ArrayList<>();
|
||||||
if (query.equals("") | query.isEmpty()) {
|
if (query.equals("") | query.isEmpty()) {
|
||||||
filteredModelList.addAll(models);
|
filteredModelList.addAll(models);
|
||||||
return filteredModelList;
|
return filteredModelList;
|
||||||
@ -197,7 +198,7 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search
|
|||||||
|
|
||||||
selectedIdsForCallback = previouslySelectedIdsList;
|
selectedIdsForCallback = previouslySelectedIdsList;
|
||||||
mainListOfAdapter = setCheckedIDS(mainListOfAdapter, selectedIdsForCallback);
|
mainListOfAdapter = setCheckedIDS(mainListOfAdapter, selectedIdsForCallback);
|
||||||
ArrayList<MultiSelectModel> filteredlist = filter(mainListOfAdapter, newText);
|
List<MultiSelectModel> filteredlist = filter(mainListOfAdapter, newText);
|
||||||
mutliSelectAdapter.setData(filteredlist, newText.toLowerCase(), mutliSelectAdapter);
|
mutliSelectAdapter.setData(filteredlist, newText.toLowerCase(), mutliSelectAdapter);
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -207,7 +208,7 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search
|
|||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|
||||||
if (view.getId() == R.id.done) {
|
if (view.getId() == R.id.done) {
|
||||||
ArrayList<Integer> callBackListOfIds = selectedIdsForCallback;
|
List<Integer> callBackListOfIds = selectedIdsForCallback;
|
||||||
|
|
||||||
if (callBackListOfIds.size() >= minSelectionLimit) {
|
if (callBackListOfIds.size() >= minSelectionLimit) {
|
||||||
if (callBackListOfIds.size() <= maxSelectionLimit) {
|
if (callBackListOfIds.size() <= maxSelectionLimit) {
|
||||||
@ -282,9 +283,9 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ArrayList<String> getSelectNameList() {
|
private List<String> getSelectNameList() {
|
||||||
|
|
||||||
ArrayList<String> names = new ArrayList<>();
|
List<String> names = new ArrayList<>();
|
||||||
for(int i=0;i<tempMainListOfAdapter.size();i++){
|
for(int i=0;i<tempMainListOfAdapter.size();i++){
|
||||||
if(checkForSelection(tempMainListOfAdapter.get(i).getId())){
|
if(checkForSelection(tempMainListOfAdapter.get(i).getId())){
|
||||||
names.add(tempMainListOfAdapter.get(i).getName());
|
names.add(tempMainListOfAdapter.get(i).getName());
|
||||||
@ -310,7 +311,7 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
public interface SubmitCallbackListener {
|
public interface SubmitCallbackListener {
|
||||||
void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String commonSeperatedData);
|
void onSelected(List<Integer> selectedIds, List<String> selectedNames, String commonSeperatedData);
|
||||||
void onCancel();
|
void onCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,6 +269,10 @@ public class TinyDB {
|
|||||||
return preferences.getString(key, "");
|
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'
|
* Get parsed ArrayList of String from SharedPreferences at 'key'
|
||||||
* @param key SharedPreferences key
|
* @param key SharedPreferences key
|
||||||
|
@ -3,29 +3,29 @@ package org.mian.gitnex.interfaces;
|
|||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import org.mian.gitnex.models.AddEmail;
|
import org.mian.gitnex.models.AddEmail;
|
||||||
import org.mian.gitnex.models.Branches;
|
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.Collaborators;
|
||||||
|
import org.mian.gitnex.models.Commits;
|
||||||
import org.mian.gitnex.models.CreateIssue;
|
import org.mian.gitnex.models.CreateIssue;
|
||||||
import org.mian.gitnex.models.CreateLabel;
|
import org.mian.gitnex.models.CreateLabel;
|
||||||
import org.mian.gitnex.models.Emails;
|
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.GiteaVersion;
|
||||||
import org.mian.gitnex.models.IssueComments;
|
import org.mian.gitnex.models.IssueComments;
|
||||||
import org.mian.gitnex.models.Issues;
|
import org.mian.gitnex.models.Issues;
|
||||||
import org.mian.gitnex.models.Labels;
|
import org.mian.gitnex.models.Labels;
|
||||||
|
import org.mian.gitnex.models.MergePullRequest;
|
||||||
import org.mian.gitnex.models.Milestones;
|
import org.mian.gitnex.models.Milestones;
|
||||||
|
import org.mian.gitnex.models.NewFile;
|
||||||
import org.mian.gitnex.models.OrgOwner;
|
import org.mian.gitnex.models.OrgOwner;
|
||||||
import org.mian.gitnex.models.Organization;
|
import org.mian.gitnex.models.Organization;
|
||||||
import org.mian.gitnex.models.OrganizationRepository;
|
import org.mian.gitnex.models.OrganizationRepository;
|
||||||
import org.mian.gitnex.models.Permission;
|
import org.mian.gitnex.models.Permission;
|
||||||
|
import org.mian.gitnex.models.PullRequests;
|
||||||
import org.mian.gitnex.models.Releases;
|
import org.mian.gitnex.models.Releases;
|
||||||
import org.mian.gitnex.models.Teams;
|
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.UserInfo;
|
||||||
import org.mian.gitnex.models.UserOrganizations;
|
import org.mian.gitnex.models.UserOrganizations;
|
||||||
import org.mian.gitnex.models.UserRepositories;
|
import org.mian.gitnex.models.UserRepositories;
|
||||||
@ -229,13 +229,13 @@ public interface ApiInterface {
|
|||||||
Call<JsonElement> createNewFile(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("file") String fileName, @Body NewFile jsonStr);
|
Call<JsonElement> 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
|
@GET("repos/{owner}/{repo}/contents") // get all the files and dirs of a repository
|
||||||
Call<List<Files>> getFiles(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName);
|
Call<List<Files>> 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
|
@GET("repos/{owner}/{repo}/contents/{file}") // get single file contents
|
||||||
Call<Files> getSingleFileContents(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("file") String file);
|
Call<Files> 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
|
@GET("repos/{owner}/{repo}/contents/{fileDir}") // get all the sub files and dirs of a repository
|
||||||
Call<List<Files>> getDirFiles(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("fileDir") String fileDir);
|
Call<List<Files>> 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
|
@GET("user/starred/{owner}/{repo}") // check star status of a repository
|
||||||
Call<JsonElement> checkRepoStarStatus(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName);
|
Call<JsonElement> checkRepoStarStatus(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName);
|
||||||
|
@ -11,7 +11,6 @@ import org.mian.gitnex.clients.RetrofitClient;
|
|||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.Files;
|
import org.mian.gitnex.models.Files;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
@ -26,20 +25,20 @@ public class FilesViewModel extends ViewModel {
|
|||||||
private static MutableLiveData<List<Files>> filesList;
|
private static MutableLiveData<List<Files>> filesList;
|
||||||
private static MutableLiveData<List<Files>> filesList2;
|
private static MutableLiveData<List<Files>> filesList2;
|
||||||
|
|
||||||
public LiveData<List<Files>> getFilesList(String instanceUrl, String token, String owner, String repo, Context ctx) {
|
public LiveData<List<Files>> getFilesList(String instanceUrl, String token, String owner, String repo, String ref, Context ctx) {
|
||||||
|
|
||||||
filesList = new MutableLiveData<>();
|
filesList = new MutableLiveData<>();
|
||||||
loadFilesList(instanceUrl, token, owner, repo, ctx);
|
loadFilesList(instanceUrl, token, owner, repo, ref, ctx);
|
||||||
|
|
||||||
return filesList;
|
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<List<Files>> call = RetrofitClient
|
Call<List<Files>> call = RetrofitClient
|
||||||
.getInstance(instanceUrl, ctx)
|
.getInstance(instanceUrl, ctx)
|
||||||
.getApiInterface()
|
.getApiInterface()
|
||||||
.getFiles(token, owner, repo);
|
.getFiles(token, owner, repo, ref);
|
||||||
|
|
||||||
call.enqueue(new Callback<List<Files>>() {
|
call.enqueue(new Callback<List<Files>>() {
|
||||||
|
|
||||||
@ -47,15 +46,13 @@ public class FilesViewModel extends ViewModel {
|
|||||||
public void onResponse(@NonNull Call<List<Files>> call, @NonNull Response<List<Files>> response) {
|
public void onResponse(@NonNull Call<List<Files>> call, @NonNull Response<List<Files>> response) {
|
||||||
|
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
Collections.sort(response.body(), new Comparator<Files>() {
|
|
||||||
@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());
|
filesList.postValue(response.body());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
Toasty.info(ctx, ctx.getString(R.string.noDataFilesTab));
|
Toasty.info(ctx, ctx.getString(R.string.noDataFilesTab));
|
||||||
Log.i("onResponse", String.valueOf(response.code()));
|
Log.i("onResponse", String.valueOf(response.code()));
|
||||||
}
|
}
|
||||||
@ -63,27 +60,27 @@ public class FilesViewModel extends ViewModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(@NonNull Call<List<Files>> call, Throwable t) {
|
public void onFailure(@NonNull Call<List<Files>> call, @NonNull Throwable t) {
|
||||||
Log.i("onFailure", t.toString());
|
Log.i("onFailure", t.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Files>> getFilesList2(String instanceUrl, String token, String owner, String repo, String filesDir, Context ctx) {
|
public LiveData<List<Files>> getFilesList2(String instanceUrl, String token, String owner, String repo, String filesDir, String ref, Context ctx) {
|
||||||
|
|
||||||
filesList2 = new MutableLiveData<>();
|
filesList2 = new MutableLiveData<>();
|
||||||
loadFilesList2(instanceUrl, token, owner, repo, filesDir, ctx);
|
loadFilesList2(instanceUrl, token, owner, repo, filesDir, ref, ctx);
|
||||||
|
|
||||||
return filesList2;
|
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<List<Files>> call = RetrofitClient
|
Call<List<Files>> call = RetrofitClient
|
||||||
.getInstance(instanceUrl, ctx)
|
.getInstance(instanceUrl, ctx)
|
||||||
.getApiInterface()
|
.getApiInterface()
|
||||||
.getDirFiles(token, owner, repo, filesDir);
|
.getDirFiles(token, owner, repo, filesDir, ref);
|
||||||
|
|
||||||
call.enqueue(new Callback<List<Files>>() {
|
call.enqueue(new Callback<List<Files>>() {
|
||||||
|
|
||||||
@ -91,15 +88,13 @@ public class FilesViewModel extends ViewModel {
|
|||||||
public void onResponse(@NonNull Call<List<Files>> call, @NonNull Response<List<Files>> response) {
|
public void onResponse(@NonNull Call<List<Files>> call, @NonNull Response<List<Files>> response) {
|
||||||
|
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
Collections.sort(response.body(), new Comparator<Files>() {
|
|
||||||
@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());
|
filesList2.postValue(response.body());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
Toasty.info(ctx, ctx.getString(R.string.noDataFilesTab));
|
Toasty.info(ctx, ctx.getString(R.string.noDataFilesTab));
|
||||||
Log.i("onResponse", String.valueOf(response.code()));
|
Log.i("onResponse", String.valueOf(response.code()));
|
||||||
}
|
}
|
||||||
@ -107,7 +102,7 @@ public class FilesViewModel extends ViewModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(@NonNull Call<List<Files>> call, Throwable t) {
|
public void onFailure(@NonNull Call<List<Files>> call, @NonNull Throwable t) {
|
||||||
Log.i("onFailure", t.toString());
|
Log.i("onFailure", t.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
18
app/src/main/res/drawable/ic_branch.xml
Normal file
18
app/src/main/res/drawable/ic_branch.xml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:fillColor="#368f73"
|
||||||
|
android:pathData="M5.75,21a1.75,1.75 0,1 1,0 -3.5,1.75 1.75,0 0,1 0,3.5zM2.5,19.25a3.25,3.25 0,1 0,6.5 0,3.25 3.25,0 0,0 -6.5,0zM5.75,6.5a1.75,1.75 0,1 1,0 -3.5,1.75 1.75,0 0,1 0,3.5zM2.5,4.75a3.25,3.25 0,1 0,6.5 0,3.25 3.25,0 0,0 -6.5,0zM18.25,6.5a1.75,1.75 0,1 1,0 -3.5,1.75 1.75,0 0,1 0,3.5zM15,4.75a3.25,3.25 0,1 0,6.5 0,3.25 3.25,0 0,0 -6.5,0z"
|
||||||
|
android:fillType="evenOdd"/>
|
||||||
|
<path
|
||||||
|
android:fillColor="#368f73"
|
||||||
|
android:pathData="M5.75,16.75A0.75,0.75 0,0 0,6.5 16V8A0.75,0.75 0,0 0,5 8v8c0,0.414 0.336,0.75 0.75,0.75z"
|
||||||
|
android:fillType="evenOdd"/>
|
||||||
|
<path
|
||||||
|
android:fillColor="#368f73"
|
||||||
|
android:pathData="M17.5,8.75v-1H19v1a3.75,3.75 0,0 1,-3.75 3.75h-7a1.75,1.75 0,0 0,-1.75 1.75H5A3.25,3.25 0,0 1,8.25 11h7a2.25,2.25 0,0 0,2.25 -2.25z"
|
||||||
|
android:fillType="evenOdd"/>
|
||||||
|
</vector>
|
@ -22,24 +22,24 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:text="@string/pageTitleNewFile"
|
|
||||||
android:drawableStart="@drawable/ic_file"
|
android:drawableStart="@drawable/ic_file"
|
||||||
android:drawablePadding="24dp"
|
android:drawablePadding="24dp"
|
||||||
|
android:padding="12dp"
|
||||||
|
android:text="@string/pageTitleNewFile"
|
||||||
android:textColor="?attr/primaryTextColor"
|
android:textColor="?attr/primaryTextColor"
|
||||||
android:textSize="16sp"
|
android:textSize="16sp" />
|
||||||
android:padding="12dp" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/createNewIssue"
|
android:id="@+id/createNewIssue"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:text="@string/pageTitleCreateNewIssue"
|
|
||||||
android:drawableStart="@drawable/ic_issue"
|
android:drawableStart="@drawable/ic_issue"
|
||||||
android:drawablePadding="24dp"
|
android:drawablePadding="24dp"
|
||||||
|
android:padding="12dp"
|
||||||
|
android:text="@string/pageTitleCreateNewIssue"
|
||||||
android:textColor="?attr/primaryTextColor"
|
android:textColor="?attr/primaryTextColor"
|
||||||
android:textSize="16sp"
|
android:textSize="16sp" />
|
||||||
android:padding="12dp" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/createNewMilestone"
|
android:id="@+id/createNewMilestone"
|
||||||
|
@ -10,9 +10,6 @@
|
|||||||
android:id="@+id/title"
|
android:id="@+id/title"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="10dp"
|
|
||||||
android:layout_marginStart="10dp"
|
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
android:text="@string/select_entry"
|
android:text="@string/select_entry"
|
||||||
android:textColor="?attr/primaryTextColor"
|
android:textColor="?attr/primaryTextColor"
|
||||||
android:textSize="24sp" />
|
android:textSize="24sp" />
|
||||||
@ -92,28 +89,28 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_margin="10dp"
|
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<TextView
|
<Button
|
||||||
android:id="@+id/cancel"
|
android:id="@+id/cancel"
|
||||||
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:text="@string/cancelButton" />
|
||||||
android:gravity="end"
|
|
||||||
android:text="@string/cancelButton"
|
|
||||||
android:textColor="?attr/primaryTextColor"
|
|
||||||
android:textSize="16sp" />
|
|
||||||
|
|
||||||
<TextView
|
<Space
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
<Button
|
||||||
android:id="@+id/done"
|
android:id="@+id/done"
|
||||||
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="0.2"
|
android:text="@string/doneButton" />
|
||||||
android:gravity="end"
|
|
||||||
android:text="@string/doneButton"
|
|
||||||
android:textColor="?attr/primaryTextColor"
|
|
||||||
android:textSize="16sp" />
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
@ -12,6 +12,12 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:visibility="invisible" />
|
android:visibility="invisible" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/repoBranch"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="invisible" />
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/linearLayoutFrame"
|
android:id="@+id/linearLayoutFrame"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
12
app/src/main/res/menu/files_switch_branches_menu.xml
Normal file
12
app/src/main/res/menu/files_switch_branches_menu.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/switchBranches"
|
||||||
|
android:icon="@drawable/ic_branch"
|
||||||
|
android:title="@string/strSwitchBranches"
|
||||||
|
android:orderInCategory="0"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
|
||||||
|
</menu>
|
@ -45,6 +45,7 @@
|
|||||||
<string name="pageTitleCreateNewIssue">New Issue</string>
|
<string name="pageTitleCreateNewIssue">New Issue</string>
|
||||||
<string name="pageTitleCreateLabel">New Label</string>
|
<string name="pageTitleCreateLabel">New Label</string>
|
||||||
<string name="pageTitleCredits">Credits</string>
|
<string name="pageTitleCredits">Credits</string>
|
||||||
|
<string name="pageTitleChooseBranch">Select Branch</string>
|
||||||
<string name="pageTitleLabelUpdate">Update Label</string>
|
<string name="pageTitleLabelUpdate">Update Label</string>
|
||||||
<string name="pageTitleSponsors">Donators</string>
|
<string name="pageTitleSponsors">Donators</string>
|
||||||
<string name="pageTitleStarredRepos">Starred Repositories</string>
|
<string name="pageTitleStarredRepos">Starred Repositories</string>
|
||||||
@ -463,6 +464,7 @@
|
|||||||
<string name="newFileRequiredFieldNewBranchName">New branch name cannot be empty if current branch is not selected</string>
|
<string name="newFileRequiredFieldNewBranchName">New branch name cannot be empty if current branch is not selected</string>
|
||||||
|
|
||||||
<string name="strFilter">Filter</string>
|
<string name="strFilter">Filter</string>
|
||||||
|
<string name="strSwitchBranches">Branches</string>
|
||||||
|
|
||||||
<string name="copyIssueUrl">Copy Issue URL</string>
|
<string name="copyIssueUrl">Copy Issue URL</string>
|
||||||
<string name="copyIssueUrlToastMsg">URL copied to clipboard</string>
|
<string name="copyIssueUrlToastMsg">URL copied to clipboard</string>
|
||||||
@ -473,6 +475,7 @@
|
|||||||
<!-- files -->
|
<!-- files -->
|
||||||
<string name="noDataFilesTab">No files found</string>
|
<string name="noDataFilesTab">No files found</string>
|
||||||
<string name="filesGenericError">Sorry this file cannot be viewed as API returned an error</string>
|
<string name="filesGenericError">Sorry this file cannot be viewed as API returned an error</string>
|
||||||
|
<string name="colonDivider" translatable="false">\u0020:\u0020</string>
|
||||||
|
|
||||||
<string name="notSupported">Not supported</string>
|
<string name="notSupported">Not supported</string>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user