mirror of
https://codeberg.org/gitnex/GitNex.git
synced 2024-12-16 15:48:13 +08:00
Edit and delete a file (#626)
update if file is modified on resume implementation of edit file Merge branch 'master' into 44-delete-file Merge branch '44-delete-file' of codeberg.org:gitnex/GitNex into 44-delete-file Merge branch 'master' into 44-delete-file # Conflicts: # app/src/main/java/org/mian/gitnex/activities/CreateFileActivity.java # app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java # app/src/main/java/org/mian/gitnex/activities/RepoDetailActivity.java # app/src/main/java/org/mian/gitnex/fragments/BottomSheetFileViewerFragment.java Merge branch 'master' into 44-delete-file implement delete file add links to bottomsheet Co-authored-by: M M Arif <mmarif@swatian.com> Co-authored-by: 6543 <6543@noreply.codeberg.org> Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/626
This commit is contained in:
parent
76137c56bc
commit
7caff70946
@ -23,6 +23,8 @@ import org.mian.gitnex.helpers.Authorization;
|
|||||||
import org.mian.gitnex.helpers.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.Branches;
|
import org.mian.gitnex.models.Branches;
|
||||||
|
import org.mian.gitnex.models.DeleteFile;
|
||||||
|
import org.mian.gitnex.models.EditFile;
|
||||||
import org.mian.gitnex.models.NewFile;
|
import org.mian.gitnex.models.NewFile;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -44,8 +46,12 @@ public class CreateFileActivity extends BaseActivity {
|
|||||||
private EditText newFileBranchName;
|
private EditText newFileBranchName;
|
||||||
private EditText newFileCommitMessage;
|
private EditText newFileCommitMessage;
|
||||||
private Spinner newFileBranchesSpinner;
|
private Spinner newFileBranchesSpinner;
|
||||||
|
private String filePath;
|
||||||
|
private String fileSha;
|
||||||
|
private int fileAction = 0; // 0 = create, 1 = delete, 2 = edit
|
||||||
final Context ctx = this;
|
final Context ctx = this;
|
||||||
private Context appCtx;
|
private Context appCtx;
|
||||||
|
private TinyDB tinyDb;
|
||||||
|
|
||||||
List<Branches> branchesList = new ArrayList<>();
|
List<Branches> branchesList = new ArrayList<>();
|
||||||
|
|
||||||
@ -59,12 +65,12 @@ public class CreateFileActivity extends BaseActivity {
|
|||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
appCtx = getApplicationContext();
|
appCtx = getApplicationContext();
|
||||||
|
tinyDb = new TinyDB(appCtx);
|
||||||
|
|
||||||
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
|
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
|
||||||
|
|
||||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
TinyDB tinyDb = new TinyDB(appCtx);
|
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
final String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
final String loginUid = tinyDb.getString("loginUid");
|
final String loginUid = tinyDb.getString("loginUid");
|
||||||
String repoFullName = tinyDb.getString("repoFullName");
|
String repoFullName = tinyDb.getString("repoFullName");
|
||||||
@ -80,6 +86,8 @@ public class CreateFileActivity extends BaseActivity {
|
|||||||
newFileCommitMessage = findViewById(R.id.newFileCommitMessage);
|
newFileCommitMessage = findViewById(R.id.newFileCommitMessage);
|
||||||
TextView branchNameId = findViewById(R.id.branchNameId);
|
TextView branchNameId = findViewById(R.id.branchNameId);
|
||||||
TextView branchNameHintText = findViewById(R.id.branchNameHintText);
|
TextView branchNameHintText = findViewById(R.id.branchNameHintText);
|
||||||
|
TextView toolbarTitle = findViewById(R.id.toolbarTitle);
|
||||||
|
TextView fileNameHint = findViewById(R.id.fileNameHint);
|
||||||
|
|
||||||
newFileName.requestFocus();
|
newFileName.requestFocus();
|
||||||
assert imm != null;
|
assert imm != null;
|
||||||
@ -90,6 +98,46 @@ public class CreateFileActivity extends BaseActivity {
|
|||||||
|
|
||||||
newFileCreate = findViewById(R.id.newFileCreate);
|
newFileCreate = findViewById(R.id.newFileCreate);
|
||||||
|
|
||||||
|
if(getIntent().getStringExtra("filePath") != null && getIntent().getIntExtra("fileAction", 1) == 1) {
|
||||||
|
|
||||||
|
fileNameHint.setVisibility(View.GONE);
|
||||||
|
fileAction = getIntent().getIntExtra("fileAction", 1);
|
||||||
|
|
||||||
|
filePath = getIntent().getStringExtra("filePath");
|
||||||
|
String fileContents = getIntent().getStringExtra("fileContents");
|
||||||
|
fileSha = getIntent().getStringExtra("fileSha");
|
||||||
|
|
||||||
|
toolbarTitle.setText(getString(R.string.deleteFileText, filePath));
|
||||||
|
|
||||||
|
newFileCreate.setText(R.string.deleteFile);
|
||||||
|
newFileName.setText(filePath);
|
||||||
|
newFileName.setEnabled(false);
|
||||||
|
newFileName.setFocusable(false);
|
||||||
|
|
||||||
|
newFileContent.setText(fileContents);
|
||||||
|
newFileContent.setEnabled(false);
|
||||||
|
newFileContent.setFocusable(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(getIntent().getStringExtra("filePath") != null && getIntent().getIntExtra("fileAction", 2) == 2) {
|
||||||
|
|
||||||
|
fileNameHint.setVisibility(View.GONE);
|
||||||
|
fileAction = getIntent().getIntExtra("fileAction", 2);
|
||||||
|
|
||||||
|
filePath = getIntent().getStringExtra("filePath");
|
||||||
|
String fileContents = getIntent().getStringExtra("fileContents");
|
||||||
|
fileSha = getIntent().getStringExtra("fileSha");
|
||||||
|
|
||||||
|
toolbarTitle.setText(getString(R.string.editFileText, filePath));
|
||||||
|
|
||||||
|
newFileCreate.setText(R.string.editFile);
|
||||||
|
newFileName.setText(filePath);
|
||||||
|
newFileName.setEnabled(false);
|
||||||
|
newFileName.setFocusable(false);
|
||||||
|
|
||||||
|
newFileContent.setText(fileContents);
|
||||||
|
}
|
||||||
|
|
||||||
initCloseListener();
|
initCloseListener();
|
||||||
closeActivity.setOnClickListener(onClickListener);
|
closeActivity.setOnClickListener(onClickListener);
|
||||||
|
|
||||||
@ -197,7 +245,22 @@ public class CreateFileActivity extends BaseActivity {
|
|||||||
else {
|
else {
|
||||||
|
|
||||||
disableProcessButton();
|
disableProcessButton();
|
||||||
createNewFile(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, newFileName_, appUtil.encodeBase64(newFileContent_), newFileBranchName_, newFileCommitMessage_, currentBranch.toString());
|
|
||||||
|
if(fileAction == 1) {
|
||||||
|
|
||||||
|
deleteFile(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, filePath,
|
||||||
|
newFileBranchName_, newFileCommitMessage_, currentBranch.toString(), fileSha);
|
||||||
|
}
|
||||||
|
else if(fileAction == 2) {
|
||||||
|
|
||||||
|
editFile(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, filePath,
|
||||||
|
appUtil.encodeBase64(newFileContent_), newFileBranchName_, newFileCommitMessage_, currentBranch.toString(), fileSha);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
createNewFile(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, newFileName_,
|
||||||
|
appUtil.encodeBase64(newFileContent_), newFileBranchName_, newFileCommitMessage_, currentBranch.toString());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,6 +319,150 @@ public class CreateFileActivity extends BaseActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(@NonNull Call<JsonElement> call, @NonNull Throwable t) {
|
public void onFailure(@NonNull Call<JsonElement> call, @NonNull Throwable t) {
|
||||||
|
|
||||||
|
Log.e("onFailure", t.toString());
|
||||||
|
enableProcessButton();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deleteFile(final String instanceUrl, final String token, String repoOwner, String repoName, String fileName, String fileBranchName, String fileCommitMessage, String currentBranch, String fileSha) {
|
||||||
|
|
||||||
|
String branchName;
|
||||||
|
DeleteFile deleteFileJsonStr;
|
||||||
|
if(currentBranch.equals("No branch")) {
|
||||||
|
|
||||||
|
branchName = fileBranchName;
|
||||||
|
deleteFileJsonStr = new DeleteFile("", fileCommitMessage, fileBranchName, fileSha);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
branchName = currentBranch;
|
||||||
|
deleteFileJsonStr = new DeleteFile(currentBranch, fileCommitMessage, "", fileSha);
|
||||||
|
}
|
||||||
|
|
||||||
|
Call<JsonElement> call = RetrofitClient
|
||||||
|
.getInstance(instanceUrl, ctx)
|
||||||
|
.getApiInterface()
|
||||||
|
.deleteFile(token, repoOwner, repoName, fileName, deleteFileJsonStr);
|
||||||
|
|
||||||
|
call.enqueue(new Callback<JsonElement>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<JsonElement> call, @NonNull retrofit2.Response<JsonElement> response) {
|
||||||
|
|
||||||
|
if(response.code() == 200) {
|
||||||
|
|
||||||
|
enableProcessButton();
|
||||||
|
Toasty.info(ctx, getString(R.string.deleteFileMessage, branchName));
|
||||||
|
getIntent().removeExtra("filePath");
|
||||||
|
getIntent().removeExtra("fileSha");
|
||||||
|
getIntent().removeExtra("fileContents");
|
||||||
|
finish();
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(response.code() == 401) {
|
||||||
|
|
||||||
|
enableProcessButton();
|
||||||
|
AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle),
|
||||||
|
getResources().getString(R.string.alertDialogTokenRevokedMessage),
|
||||||
|
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
|
||||||
|
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
if(response.code() == 404) {
|
||||||
|
|
||||||
|
enableProcessButton();
|
||||||
|
Toasty.info(ctx, getString(R.string.apiNotFound));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
enableProcessButton();
|
||||||
|
Toasty.info(ctx, getString(R.string.genericError));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<JsonElement> call, @NonNull Throwable t) {
|
||||||
|
|
||||||
|
Log.e("onFailure", t.toString());
|
||||||
|
enableProcessButton();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void editFile(final String instanceUrl, final String token, String repoOwner, String repoName, String fileName, String fileContent, String fileBranchName, String fileCommitMessage, String currentBranch, String fileSha) {
|
||||||
|
|
||||||
|
String branchName;
|
||||||
|
EditFile editFileJsonStr;
|
||||||
|
if(currentBranch.equals("No branch")) {
|
||||||
|
|
||||||
|
branchName = fileBranchName;
|
||||||
|
editFileJsonStr = new EditFile("", fileCommitMessage, fileBranchName, fileSha, fileContent);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
branchName = currentBranch;
|
||||||
|
editFileJsonStr = new EditFile(currentBranch, fileCommitMessage, "", fileSha, fileContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Call<JsonElement> call = RetrofitClient
|
||||||
|
.getInstance(instanceUrl, ctx)
|
||||||
|
.getApiInterface()
|
||||||
|
.editFile(token, repoOwner, repoName, fileName, editFileJsonStr);
|
||||||
|
|
||||||
|
call.enqueue(new Callback<JsonElement>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<JsonElement> call, @NonNull retrofit2.Response<JsonElement> response) {
|
||||||
|
|
||||||
|
if(response.code() == 200) {
|
||||||
|
|
||||||
|
enableProcessButton();
|
||||||
|
Toasty.info(ctx, getString(R.string.editFileMessage, branchName));
|
||||||
|
getIntent().removeExtra("filePath");
|
||||||
|
getIntent().removeExtra("fileSha");
|
||||||
|
getIntent().removeExtra("fileContents");
|
||||||
|
tinyDb.putBoolean("fileModified", true);
|
||||||
|
finish();
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(response.code() == 401) {
|
||||||
|
|
||||||
|
enableProcessButton();
|
||||||
|
AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle),
|
||||||
|
getResources().getString(R.string.alertDialogTokenRevokedMessage),
|
||||||
|
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
|
||||||
|
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
if(response.code() == 404) {
|
||||||
|
|
||||||
|
enableProcessButton();
|
||||||
|
Toasty.info(ctx, getString(R.string.apiNotFound));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
enableProcessButton();
|
||||||
|
Toasty.info(ctx, getString(R.string.genericError));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<JsonElement> call, @NonNull Throwable t) {
|
||||||
|
|
||||||
Log.e("onFailure", t.toString());
|
Log.e("onFailure", t.toString());
|
||||||
enableProcessButton();
|
enableProcessButton();
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,7 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
|
|||||||
private byte[] decodedPdf;
|
private byte[] decodedPdf;
|
||||||
private Boolean pdfNightMode;
|
private Boolean pdfNightMode;
|
||||||
private String singleFileName;
|
private String singleFileName;
|
||||||
|
private String fileSha;
|
||||||
private AppUtil appUtil;
|
private AppUtil appUtil;
|
||||||
private TinyDB tinyDb;
|
private TinyDB tinyDb;
|
||||||
|
|
||||||
@ -153,6 +154,27 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
String repoFullName = tinyDb.getString("repoFullName");
|
||||||
|
String repoBranch = tinyDb.getString("repoBranch");
|
||||||
|
String[] parts = repoFullName.split("/");
|
||||||
|
String repoOwner = parts[0];
|
||||||
|
String repoName = parts[1];
|
||||||
|
String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
|
String loginUid = tinyDb.getString("loginUid");
|
||||||
|
String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
|
||||||
|
|
||||||
|
if(tinyDb.getBoolean("fileModified")) {
|
||||||
|
getSingleFileContents(instanceUrl, instanceToken, repoOwner, repoName, singleFileName, repoBranch);
|
||||||
|
tinyDb.putBoolean("fileModified", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void getSingleFileContents(String instanceUrl, String token, final String owner, String repo, final String filename, String ref) {
|
private void getSingleFileContents(String instanceUrl, String token, final String owner, String repo, final String filename, String ref) {
|
||||||
|
|
||||||
Call<Files> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getSingleFileContents(token, owner, repo, filename, ref);
|
Call<Files> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getSingleFileContents(token, owner, repo, filename, ref);
|
||||||
@ -171,6 +193,8 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
|
|||||||
String fileExtension = FileUtils.getExtension(filename);
|
String fileExtension = FileUtils.getExtension(filename);
|
||||||
mProgressBar.setVisibility(View.GONE);
|
mProgressBar.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
fileSha = response.body().getSha();
|
||||||
|
|
||||||
// download file meta
|
// download file meta
|
||||||
tinyDb.putString("downloadFileName", filename);
|
tinyDb.putString("downloadFileName", filename);
|
||||||
tinyDb.putString("downloadFileContents", response.body().getContent());
|
tinyDb.putString("downloadFileContents", response.body().getContent());
|
||||||
@ -403,7 +427,42 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
|
|||||||
if("downloadFile".equals(text)) {
|
if("downloadFile".equals(text)) {
|
||||||
|
|
||||||
requestFileDownload();
|
requestFileDownload();
|
||||||
|
}
|
||||||
|
|
||||||
|
if("deleteFile".equals(text)) {
|
||||||
|
|
||||||
|
String fileExtension = FileUtils.getExtension(singleFileName);
|
||||||
|
String data = appUtil.decodeBase64(tinyDb.getString("downloadFileContents"));
|
||||||
|
Intent intent = new Intent(ctx, CreateFileActivity.class);
|
||||||
|
intent.putExtra("fileAction", 1);
|
||||||
|
intent.putExtra("filePath", singleFileName);
|
||||||
|
intent.putExtra("fileSha", fileSha);
|
||||||
|
if(!appUtil.imageExtension(fileExtension)) {
|
||||||
|
intent.putExtra("fileContents", data);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
intent.putExtra("fileContents", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
if("editFile".equals(text)) {
|
||||||
|
|
||||||
|
String fileExtension = FileUtils.getExtension(singleFileName);
|
||||||
|
String data = appUtil.decodeBase64(tinyDb.getString("downloadFileContents"));
|
||||||
|
Intent intent = new Intent(ctx, CreateFileActivity.class);
|
||||||
|
intent.putExtra("fileAction", 2);
|
||||||
|
intent.putExtra("filePath", singleFileName);
|
||||||
|
intent.putExtra("fileSha", fileSha);
|
||||||
|
if(!appUtil.imageExtension(fileExtension)) {
|
||||||
|
intent.putExtra("fileContents", data);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
intent.putExtra("fileContents", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -426,6 +485,7 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
|
|||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
Toasty.warning(ctx, getString(R.string.waitLoadingDownloadFile));
|
Toasty.warning(ctx, getString(R.string.waitLoadingDownloadFile));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -456,6 +516,7 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
|
|||||||
|
|
||||||
}
|
}
|
||||||
catch(IOException e) {
|
catch(IOException e) {
|
||||||
|
|
||||||
Log.e("errorFileDownloading", Objects.requireNonNull(e.getMessage()));
|
Log.e("errorFileDownloading", Objects.requireNonNull(e.getMessage()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -469,7 +530,6 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
|
|||||||
|
|
||||||
getIntent().removeExtra("singleFileName");
|
getIntent().removeExtra("singleFileName");
|
||||||
finish();
|
finish();
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,13 +26,25 @@ public class BottomSheetFileViewerFragment extends BottomSheetDialogFragment {
|
|||||||
View v = inflater.inflate(R.layout.bottom_sheet_file_viewer, container, false);
|
View v = inflater.inflate(R.layout.bottom_sheet_file_viewer, container, false);
|
||||||
|
|
||||||
TextView downloadFile = v.findViewById(R.id.downloadFile);
|
TextView downloadFile = v.findViewById(R.id.downloadFile);
|
||||||
|
TextView deleteFile = v.findViewById(R.id.deleteFile);
|
||||||
|
TextView editFile = v.findViewById(R.id.editFile);
|
||||||
|
|
||||||
|
downloadFile.setOnClickListener(v1 -> {
|
||||||
|
|
||||||
downloadFile.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
bmListener.onButtonClicked("downloadFile");
|
bmListener.onButtonClicked("downloadFile");
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
});
|
||||||
|
|
||||||
|
deleteFile.setOnClickListener(v1 -> {
|
||||||
|
|
||||||
|
bmListener.onButtonClicked("deleteFile");
|
||||||
|
dismiss();
|
||||||
|
});
|
||||||
|
|
||||||
|
editFile.setOnClickListener(v1 -> {
|
||||||
|
|
||||||
|
bmListener.onButtonClicked("editFile");
|
||||||
|
dismiss();
|
||||||
});
|
});
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
@ -47,9 +59,11 @@ public class BottomSheetFileViewerFragment extends BottomSheetDialogFragment {
|
|||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
bmListener = (BottomSheetFileViewerFragment.BottomSheetListener) context;
|
bmListener = (BottomSheetFileViewerFragment.BottomSheetListener) context;
|
||||||
}
|
}
|
||||||
catch (ClassCastException e) {
|
catch (ClassCastException e) {
|
||||||
|
|
||||||
throw new ClassCastException(context.toString() + " must implement BottomSheetListener");
|
throw new ClassCastException(context.toString() + " must implement BottomSheetListener");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@ import org.mian.gitnex.models.Collaborators;
|
|||||||
import org.mian.gitnex.models.Commits;
|
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.DeleteFile;
|
||||||
|
import org.mian.gitnex.models.EditFile;
|
||||||
import org.mian.gitnex.models.Emails;
|
import org.mian.gitnex.models.Emails;
|
||||||
import org.mian.gitnex.models.ExploreRepositories;
|
import org.mian.gitnex.models.ExploreRepositories;
|
||||||
import org.mian.gitnex.models.Files;
|
import org.mian.gitnex.models.Files;
|
||||||
@ -39,6 +41,7 @@ import retrofit2.Call;
|
|||||||
import retrofit2.http.Body;
|
import retrofit2.http.Body;
|
||||||
import retrofit2.http.DELETE;
|
import retrofit2.http.DELETE;
|
||||||
import retrofit2.http.GET;
|
import retrofit2.http.GET;
|
||||||
|
import retrofit2.http.HTTP;
|
||||||
import retrofit2.http.Header;
|
import retrofit2.http.Header;
|
||||||
import retrofit2.http.PATCH;
|
import retrofit2.http.PATCH;
|
||||||
import retrofit2.http.POST;
|
import retrofit2.http.POST;
|
||||||
@ -265,6 +268,12 @@ public interface ApiInterface {
|
|||||||
@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, @Query("ref") String ref);
|
Call<List<Files>> getDirFiles(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("fileDir") String fileDir, @Query("ref") String ref);
|
||||||
|
|
||||||
|
@HTTP(method = "DELETE", path = "repos/{owner}/{repo}/contents/{filepath}", hasBody = true) // delete a file
|
||||||
|
Call<JsonElement> deleteFile(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("filepath") String filepath, @Body DeleteFile jsonStr);
|
||||||
|
|
||||||
|
@PUT("repos/{owner}/{repo}/contents/{filepath}") // edit/update a file
|
||||||
|
Call<JsonElement> editFile(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("filepath") String filepath, @Body EditFile jsonStr);
|
||||||
|
|
||||||
@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);
|
||||||
|
|
||||||
|
60
app/src/main/java/org/mian/gitnex/models/DeleteFile.java
Normal file
60
app/src/main/java/org/mian/gitnex/models/DeleteFile.java
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package org.mian.gitnex.models;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class DeleteFile {
|
||||||
|
|
||||||
|
private String branch;
|
||||||
|
private String message;
|
||||||
|
private String new_branch;
|
||||||
|
private String sha;
|
||||||
|
|
||||||
|
public String getBranch() {
|
||||||
|
|
||||||
|
return branch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBranch(String branch) {
|
||||||
|
|
||||||
|
this.branch = branch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessage(String message) {
|
||||||
|
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNew_branch() {
|
||||||
|
|
||||||
|
return new_branch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNew_branch(String new_branch) {
|
||||||
|
|
||||||
|
this.new_branch = new_branch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSha() {
|
||||||
|
|
||||||
|
return sha;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSha(String sha) {
|
||||||
|
|
||||||
|
this.sha = sha;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeleteFile(String branch, String message, String new_branch, String sha) {
|
||||||
|
this.branch = branch;
|
||||||
|
this.message = message;
|
||||||
|
this.new_branch = new_branch;
|
||||||
|
this.sha = sha;
|
||||||
|
}
|
||||||
|
}
|
73
app/src/main/java/org/mian/gitnex/models/EditFile.java
Normal file
73
app/src/main/java/org/mian/gitnex/models/EditFile.java
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
package org.mian.gitnex.models;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author M M Arif
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class EditFile {
|
||||||
|
|
||||||
|
private String branch;
|
||||||
|
private String message;
|
||||||
|
private String new_branch;
|
||||||
|
private String sha;
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
public String getBranch() {
|
||||||
|
|
||||||
|
return branch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBranch(String branch) {
|
||||||
|
|
||||||
|
this.branch = branch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessage(String message) {
|
||||||
|
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNew_branch() {
|
||||||
|
|
||||||
|
return new_branch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNew_branch(String new_branch) {
|
||||||
|
|
||||||
|
this.new_branch = new_branch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSha() {
|
||||||
|
|
||||||
|
return sha;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSha(String sha) {
|
||||||
|
|
||||||
|
this.sha = sha;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent() {
|
||||||
|
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContent(String content) {
|
||||||
|
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EditFile(String branch, String message, String new_branch, String sha, String content) {
|
||||||
|
this.branch = branch;
|
||||||
|
this.message = message;
|
||||||
|
this.new_branch = new_branch;
|
||||||
|
this.sha = sha;
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -46,7 +46,7 @@ public class NewFile {
|
|||||||
this.new_branch = new_branch;
|
this.new_branch = new_branch;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class authorObject {
|
public static class authorObject {
|
||||||
|
|
||||||
private String email;
|
private String email;
|
||||||
private String name;
|
private String name;
|
||||||
@ -68,7 +68,7 @@ public class NewFile {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class committerObject {
|
public static class committerObject {
|
||||||
|
|
||||||
private String email;
|
private String email;
|
||||||
private String name;
|
private String name;
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
android:src="@drawable/ic_close" />
|
android:src="@drawable/ic_close" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/toolbar_title"
|
android:id="@+id/toolbarTitle"
|
||||||
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"
|
||||||
@ -78,6 +78,7 @@
|
|||||||
android:inputType="textCapSentences|text" />
|
android:inputType="textCapSentences|text" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:id="@+id/fileNameHint"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/newFileNameHintMessage"
|
android:text="@string/newFileNameHintMessage"
|
||||||
@ -214,7 +215,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/characters255Limit"
|
android:text="@string/characters255Limit"
|
||||||
android:textColor="?attr/primaryTextColor"
|
android:textColor="?attr/hintColor"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
android:paddingStart="10dp"
|
android:paddingStart="10dp"
|
||||||
android:paddingEnd="5dp"
|
android:paddingEnd="5dp"
|
||||||
|
@ -17,6 +17,30 @@
|
|||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/editFile"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:text="@string/editFile"
|
||||||
|
android:drawableStart="@drawable/ic_edit"
|
||||||
|
android:drawablePadding="24dp"
|
||||||
|
android:padding="12dp"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/deleteFile"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:text="@string/deleteFile"
|
||||||
|
android:drawableStart="@drawable/ic_delete"
|
||||||
|
android:drawablePadding="24dp"
|
||||||
|
android:padding="12dp"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/downloadFile"
|
android:id="@+id/downloadFile"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -566,6 +566,12 @@
|
|||||||
<string name="waitLoadingDownloadFile">Please wait for the file to load to memory</string>
|
<string name="waitLoadingDownloadFile">Please wait for the file to load to memory</string>
|
||||||
<string name="downloadFileSaved">File saved successfully</string>
|
<string name="downloadFileSaved">File saved successfully</string>
|
||||||
<string name="excludeFilesInFileviewer">This file type is not supported in file viewer. Download it instead from the three dotted menu?</string>
|
<string name="excludeFilesInFileviewer">This file type is not supported in file viewer. Download it instead from the three dotted menu?</string>
|
||||||
|
<string name="deleteFile">Delete This File</string>
|
||||||
|
<string name="editFile">Edit This File</string>
|
||||||
|
<string name="deleteFileText">Delete %1$s</string>
|
||||||
|
<string name="deleteFileMessage">File is set for deletion by branch %1$s</string>
|
||||||
|
<string name="editFileText">Edit %1$s</string>
|
||||||
|
<string name="editFileMessage">File is modified by branch %1$s</string>
|
||||||
|
|
||||||
<string name="sizeCopy">Size</string>
|
<string name="sizeCopy">Size</string>
|
||||||
<string name="shareIssue">Share Issue</string>
|
<string name="shareIssue">Share Issue</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user