From 9fbbbe5737318bd992e24220006cdad8ebc456d3 Mon Sep 17 00:00:00 2001 From: Milton Barrera Date: Sat, 16 Aug 2025 02:12:43 -0600 Subject: [PATCH 1/7] Refactoring GitHub integration to use constants for URLs --- .../net/osmtracker/activity/GitHubConfig.java | 6 +-- .../osmtracker/activity/GitHubNewFork.java | 12 +---- .../osmtracker/activity/GitHubNewRepo.java | 8 +-- .../activity/GitHubPullRequest.java | 24 ++++----- .../net/osmtracker/activity/GitHubUpload.java | 16 +++--- .../osmtracker/github/GitHubConstants.java | 52 +++++++++++++++++++ 6 files changed, 73 insertions(+), 45 deletions(-) create mode 100644 app/src/main/java/net/osmtracker/github/GitHubConstants.java diff --git a/app/src/main/java/net/osmtracker/activity/GitHubConfig.java b/app/src/main/java/net/osmtracker/activity/GitHubConfig.java index d094d0516..b22acd01b 100644 --- a/app/src/main/java/net/osmtracker/activity/GitHubConfig.java +++ b/app/src/main/java/net/osmtracker/activity/GitHubConfig.java @@ -14,11 +14,9 @@ import net.osmtracker.GitHubUser; import net.osmtracker.R; +import static net.osmtracker.github.GitHubConstants.GITHUB_TOKENS_URL; public class GitHubConfig extends Activity { - - private final static String GitHubToken_URL = "https://github.com/settings/tokens"; - EditText editTextUserName, editTextUserToken; private GitHubUser gitHubUser; @@ -37,7 +35,7 @@ protected void onCreate(Bundle savedInstanceState) { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(GitHubToken_URL)); + intent.setData(Uri.parse(GITHUB_TOKENS_URL)); startActivity(intent); } }); diff --git a/app/src/main/java/net/osmtracker/activity/GitHubNewFork.java b/app/src/main/java/net/osmtracker/activity/GitHubNewFork.java index bf8d6d551..e6ffa4e1f 100644 --- a/app/src/main/java/net/osmtracker/activity/GitHubNewFork.java +++ b/app/src/main/java/net/osmtracker/activity/GitHubNewFork.java @@ -21,6 +21,7 @@ import net.osmtracker.GitHubUser; import net.osmtracker.R; +import static net.osmtracker.github.GitHubConstants.getRepoForksUrl; import org.json.JSONException; import org.json.JSONObject; @@ -29,9 +30,7 @@ import java.util.Map; public class GitHubNewFork extends Activity { - EditText editTextRootUsername, editTextRootRepo; - private String BaseURL = "https://api.github.com"; private GitHubUser gitHubUser; private String newForkFullName; @@ -69,7 +68,6 @@ public void onClick(View v) { createNewFork(username, repo); //Toast.makeText(GitHubNewFork.this, R.string.successfully_created, Toast.LENGTH_SHORT).show(); //finish(); - } }); @@ -78,7 +76,6 @@ public void onClick(View v) { btnCancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - finish(); } }); @@ -88,7 +85,7 @@ public void onClick(View v) { } private void createNewFork(String username, String repo) { - String fullURL = getBaseURL() + "/repos/"+ username +"/"+ repo +"/forks?name=fork"; + String fullURL = getRepoForksUrl(username, repo); JsonObjectRequest postResquest= new JsonObjectRequest( Request.Method.POST, @@ -119,15 +116,10 @@ public Map getHeaders() throws AuthFailureError headers.put("Authorization", "Bearer " + gitHubUser.getToken()); return headers; } - }; Volley.newRequestQueue(this).add(postResquest); } - public String getBaseURL() { - return BaseURL; - } - public void setNewForkFullName(String newForkFullName) { this.newForkFullName = newForkFullName; } diff --git a/app/src/main/java/net/osmtracker/activity/GitHubNewRepo.java b/app/src/main/java/net/osmtracker/activity/GitHubNewRepo.java index 51f0823c6..4be491618 100644 --- a/app/src/main/java/net/osmtracker/activity/GitHubNewRepo.java +++ b/app/src/main/java/net/osmtracker/activity/GitHubNewRepo.java @@ -22,6 +22,7 @@ import net.osmtracker.GitHubUser; import net.osmtracker.R; +import static net.osmtracker.github.GitHubConstants.GITHUB_API_USER_REPOS_URL; import org.json.JSONException; import org.json.JSONObject; @@ -33,7 +34,6 @@ public class GitHubNewRepo extends Activity { EditText editTextNewRepo; - private String BaseURL = "https://api.github.com"; private GitHubUser gitHubUser; private String newRepoFullName; @@ -77,7 +77,7 @@ public void onClick(View v) { } private void createNewRepo(String repoName, boolean isPrivate) { - String fullURL = getBaseURL()+"/user/repos"; + String fullURL = GITHUB_API_USER_REPOS_URL; ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.setMessage(this.getResources().getString(R.string.github_creating_repository)); @@ -140,10 +140,6 @@ public byte[] getBody() { Volley.newRequestQueue(this).add(postResquest); } - public String getBaseURL() { - return BaseURL; - } - public void setNewRepoFullName(String newRepoFullName) { this.newRepoFullName = newRepoFullName; } diff --git a/app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java b/app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java index 80033c1d4..27f539c3b 100644 --- a/app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java +++ b/app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java @@ -21,6 +21,8 @@ import net.osmtracker.GitHubUser; import net.osmtracker.R; +import static net.osmtracker.github.GitHubConstants.GITHUB_API_URL; +import static net.osmtracker.github.GitHubConstants.getRepoPullsUrl; import org.json.JSONException; import org.json.JSONObject; @@ -32,9 +34,8 @@ public class GitHubPullRequest extends Activity { EditText editTextTitle, editTextBody; - private String BaseURL = "https://api.github.com"; - private String RepoOrigen; - private String DefaultBranch; + private String repoOrigen; + private String defaultBranch; private GitHubUser gitHubUser; @Override @@ -84,7 +85,7 @@ public void onClick(View v) { } private void createPullRequest() { - String fullURL = getBaseURL()+"/repos/"+getRepoOrigen()+"/pulls"; + String fullURL = getRepoPullsUrl(this.repoOrigen); JsonObjectRequest postResquest= new JsonObjectRequest( Request.Method.POST, @@ -154,7 +155,7 @@ public byte[] getBody() { } private void getInfoRepo(String repoFullName) { - String fullURL = getBaseURL()+"/repos/"+repoFullName; + String fullURL = GITHUB_API_URL+"/repos/"+repoFullName; JsonObjectRequest postResquest= new JsonObjectRequest( Request.Method.GET, @@ -187,23 +188,16 @@ public Map getHeaders() throws AuthFailureError { Volley.newRequestQueue(this).add(postResquest); } - public String getBaseURL() { - return BaseURL; - } - - public String getRepoOrigen() { - return RepoOrigen; - } public void setRepoOrigen(String repoOrigen) { - RepoOrigen = repoOrigen; + this.repoOrigen = repoOrigen; } public String getDefaultBranch() { - return DefaultBranch; + return defaultBranch; } public void setDefaultBranch(String defaultBranch) { - DefaultBranch = defaultBranch; + this.defaultBranch = defaultBranch; } } diff --git a/app/src/main/java/net/osmtracker/activity/GitHubUpload.java b/app/src/main/java/net/osmtracker/activity/GitHubUpload.java index 150adab6f..b4eea10e4 100644 --- a/app/src/main/java/net/osmtracker/activity/GitHubUpload.java +++ b/app/src/main/java/net/osmtracker/activity/GitHubUpload.java @@ -34,6 +34,8 @@ import net.osmtracker.util.Callback; import net.osmtracker.util.DialogUtils; import net.osmtracker.util.GitHubUtils; +import static net.osmtracker.github.GitHubConstants.getRepoFileContentUrl; +import static net.osmtracker.github.GitHubConstants.getUserReposUrl; import org.json.JSONArray; import org.json.JSONException; @@ -50,9 +52,7 @@ public class GitHubUpload extends Activity { - private ArrayList ArrayListRepos; - private String BaseURL = "https://api.github.com"; private GitHubUser gitHubUser; private String RepoName = ""; EditText editTextCommitMsj; @@ -166,7 +166,8 @@ private void openActivityOnClick(int btnId, Class destinatio * Either starts uploading directly if we are authenticated against GitHub */ private void startUploadGitHub(final String fileInBase64, String filename, String commitMsj){ - String fullURL = getBaseURL()+"/repos/"+getRepoName()+"/contents/"+filename; + //String fullURL = getBaseURL()+"/repos/"+getRepoName()+"/contents/"+filename; + String fullURL = getRepoFileContentUrl(getRepoName(), filename); ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.setMessage(this.getResources().getString(R.string.uploading_file) + filename); @@ -271,8 +272,8 @@ public void onNothingSelected(AdapterView adapterView) { private void listRepos() { RequestQueue queue = Volley.newRequestQueue(this); - String sortBy = "created"; - String fullURL = getBaseURL() + "/user/repos?" + "sort=" + sortBy ; + String sortBy = "updated"; + String fullURL = getUserReposUrl(sortBy); JsonArrayRequest getResquest = new JsonArrayRequest( Request.Method.GET, @@ -325,9 +326,4 @@ public String getRepoName() { public void setRepoName(String repoName) { RepoName = repoName; } - - public String getBaseURL() { - return BaseURL; - } - } diff --git a/app/src/main/java/net/osmtracker/github/GitHubConstants.java b/app/src/main/java/net/osmtracker/github/GitHubConstants.java new file mode 100644 index 000000000..a9cc8b60e --- /dev/null +++ b/app/src/main/java/net/osmtracker/github/GitHubConstants.java @@ -0,0 +1,52 @@ +package net.osmtracker.github; + +public final class GitHubConstants { + public static String GITHUB_API_URL = "https://api.github.com"; + public static String GITHUB_TOKENS_URL = "https://github.com/settings/tokens"; + public static String GITHUB_API_REPOS_URL = GITHUB_API_URL + "/repos/"; + public static String GITHUB_API_USER_URL = GITHUB_API_URL + "/user/"; + public static String GITHUB_API_USER_REPOS_URL = GITHUB_API_USER_URL + "/repos/"; + + private GitHubConstants() { + // Private constructor to prevent instantiation + } + /** + * Builds the URL to fetch a repository's forks. + * + * @param username The GitHub username. + * @param repo The repository name. + * @return The complete URL for the forks endpoint. + */ + public static String getRepoForksUrl(String username, String repo) { + return GITHUB_API_REPOS_URL + username + "/" + repo + "/forks"; + } + + /** + * Builds the URL to fetch a repository's pull + * @param repoOrigen The repository name. + * @return The complete URL for the pull requests endpoint. + */ + public static String getRepoPullsUrl(String repoOrigen) { + return GITHUB_API_REPOS_URL + repoOrigen + "/pulls"; + } + + /** + * Builds the URL to fetch a file's content. + * @param repoOrigen The repository name. + * @param filename The file name. + * @return The complete URL for the file content endpoint. + */ + public static String getRepoFileContentUrl(String repoOrigen, String filename) { + return GITHUB_API_REPOS_URL + repoOrigen + "/contents/" + filename; + } + + /** + * String fullURL = getBaseURL() + "/user/repos?" + "sort=" + sortBy ; + * Builds the URL to fetch a user's repositories with optional sorting. + * @param sortBy The sorting parameter. + * @return The complete URL for the user's repositories endpoint. + */ + public static String getUserReposUrl(String sortBy) { + return GITHUB_API_USER_REPOS_URL + "?sort=" + sortBy; + } +} \ No newline at end of file From f88d95ecf32e2720fc79848a01fa99f0de26a2ec Mon Sep 17 00:00:00 2001 From: Milton Barrera Date: Sat, 16 Aug 2025 13:25:00 -0600 Subject: [PATCH 2/7] Correcting GitHub API endpoint URLs --- .../net/osmtracker/activity/GitHubUpload.java | 3 +-- .../net/osmtracker/github/GitHubConstants.java | 16 ++++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/net/osmtracker/activity/GitHubUpload.java b/app/src/main/java/net/osmtracker/activity/GitHubUpload.java index b4eea10e4..5f09e7425 100644 --- a/app/src/main/java/net/osmtracker/activity/GitHubUpload.java +++ b/app/src/main/java/net/osmtracker/activity/GitHubUpload.java @@ -272,8 +272,7 @@ public void onNothingSelected(AdapterView adapterView) { private void listRepos() { RequestQueue queue = Volley.newRequestQueue(this); - String sortBy = "updated"; - String fullURL = getUserReposUrl(sortBy); + String fullURL = getUserReposUrl(); JsonArrayRequest getResquest = new JsonArrayRequest( Request.Method.GET, diff --git a/app/src/main/java/net/osmtracker/github/GitHubConstants.java b/app/src/main/java/net/osmtracker/github/GitHubConstants.java index a9cc8b60e..77c7c5c08 100644 --- a/app/src/main/java/net/osmtracker/github/GitHubConstants.java +++ b/app/src/main/java/net/osmtracker/github/GitHubConstants.java @@ -3,9 +3,9 @@ public final class GitHubConstants { public static String GITHUB_API_URL = "https://api.github.com"; public static String GITHUB_TOKENS_URL = "https://github.com/settings/tokens"; - public static String GITHUB_API_REPOS_URL = GITHUB_API_URL + "/repos/"; - public static String GITHUB_API_USER_URL = GITHUB_API_URL + "/user/"; - public static String GITHUB_API_USER_REPOS_URL = GITHUB_API_USER_URL + "/repos/"; + public static String GITHUB_API_REPOS_URL = GITHUB_API_URL + "/repos"; + public static String GITHUB_API_USER_URL = GITHUB_API_URL + "/user"; + public static String GITHUB_API_USER_REPOS_URL = GITHUB_API_USER_URL + "/repos"; private GitHubConstants() { // Private constructor to prevent instantiation @@ -18,7 +18,7 @@ private GitHubConstants() { * @return The complete URL for the forks endpoint. */ public static String getRepoForksUrl(String username, String repo) { - return GITHUB_API_REPOS_URL + username + "/" + repo + "/forks"; + return GITHUB_API_REPOS_URL + "/" + username + "/" + repo + "/forks"; } /** @@ -27,7 +27,7 @@ public static String getRepoForksUrl(String username, String repo) { * @return The complete URL for the pull requests endpoint. */ public static String getRepoPullsUrl(String repoOrigen) { - return GITHUB_API_REPOS_URL + repoOrigen + "/pulls"; + return GITHUB_API_REPOS_URL + "/" + repoOrigen + "/pulls"; } /** @@ -47,6 +47,10 @@ public static String getRepoFileContentUrl(String repoOrigen, String filename) { * @return The complete URL for the user's repositories endpoint. */ public static String getUserReposUrl(String sortBy) { - return GITHUB_API_USER_REPOS_URL + "?sort=" + sortBy; + return GITHUB_API_USER_REPOS_URL + "?sort=" + sortBy + "&per_page=100"; + } + + public static String getUserReposUrl(){ + return getUserReposUrl("updated"); } } \ No newline at end of file From 1af75782996ed0b93c385ae54e05040ecba74451 Mon Sep 17 00:00:00 2001 From: Milton Barrera Date: Sat, 16 Aug 2025 13:46:28 -0600 Subject: [PATCH 3/7] Allow empty GitHub credentials to erase existing ones --- app/src/main/java/net/osmtracker/activity/GitHubConfig.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/net/osmtracker/activity/GitHubConfig.java b/app/src/main/java/net/osmtracker/activity/GitHubConfig.java index b22acd01b..0e6c11b72 100644 --- a/app/src/main/java/net/osmtracker/activity/GitHubConfig.java +++ b/app/src/main/java/net/osmtracker/activity/GitHubConfig.java @@ -47,11 +47,14 @@ public void onClick(View v) { String username = editTextUserName.getText().toString().trim(); String ghToken = editTextUserToken.getText().toString().trim(); + // Empty is enabled to allow saving without credentials to erase the existing ones + /* if (username.isEmpty()) { editTextUserName.setError("Username required"); return; } - if (ghToken.length() != 40) { + */ + if (ghToken.length() != 40 && !ghToken.isEmpty()) { editTextUserToken.setError("Token must be 40 characters"); return; } From 6ab0a58305a1f4b7f1f61083081a104b830735d3 Mon Sep 17 00:00:00 2001 From: Milton Barrera Date: Sat, 16 Aug 2025 16:49:19 -0600 Subject: [PATCH 4/7] adding R strings for upload to github functionality --- .../main/java/net/osmtracker/activity/GitHubConfig.java | 2 +- .../java/net/osmtracker/activity/GitHubPullRequest.java | 6 +++--- .../main/java/net/osmtracker/github/GitHubConstants.java | 7 ++++++- app/src/main/res/values/strings.xml | 5 +++++ 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/net/osmtracker/activity/GitHubConfig.java b/app/src/main/java/net/osmtracker/activity/GitHubConfig.java index 0e6c11b72..3514f1211 100644 --- a/app/src/main/java/net/osmtracker/activity/GitHubConfig.java +++ b/app/src/main/java/net/osmtracker/activity/GitHubConfig.java @@ -55,7 +55,7 @@ public void onClick(View v) { } */ if (ghToken.length() != 40 && !ghToken.isEmpty()) { - editTextUserToken.setError("Token must be 40 characters"); + editTextUserToken.setError(getString(R.string.error_gh_token_lenght)); return; } diff --git a/app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java b/app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java index 27f539c3b..9a159a112 100644 --- a/app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java +++ b/app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java @@ -21,8 +21,8 @@ import net.osmtracker.GitHubUser; import net.osmtracker.R; -import static net.osmtracker.github.GitHubConstants.GITHUB_API_URL; import static net.osmtracker.github.GitHubConstants.getRepoPullsUrl; +import static net.osmtracker.github.GitHubConstants.getRepoUrl; import org.json.JSONException; import org.json.JSONObject; @@ -104,7 +104,7 @@ public void onResponse(JSONObject response) { }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { - String errorMsg = "Error while creating the PR"; + String errorMsg = getString(R.string.error_gh_pr_creation); if (error.networkResponse != null && error.networkResponse.data != null) { try { String responseBody = new String(error.networkResponse.data, "utf-8"); @@ -155,7 +155,7 @@ public byte[] getBody() { } private void getInfoRepo(String repoFullName) { - String fullURL = GITHUB_API_URL+"/repos/"+repoFullName; + String fullURL = getRepoUrl(repoFullName); JsonObjectRequest postResquest= new JsonObjectRequest( Request.Method.GET, diff --git a/app/src/main/java/net/osmtracker/github/GitHubConstants.java b/app/src/main/java/net/osmtracker/github/GitHubConstants.java index 77c7c5c08..a483ef9a9 100644 --- a/app/src/main/java/net/osmtracker/github/GitHubConstants.java +++ b/app/src/main/java/net/osmtracker/github/GitHubConstants.java @@ -10,6 +10,12 @@ public final class GitHubConstants { private GitHubConstants() { // Private constructor to prevent instantiation } + + //String fullURL = GITHUB_API_URL+"/repos/"+repoFullName; + public static String getRepoUrl(String repoFullName) { + return GITHUB_API_REPOS_URL + "/" + repoFullName; + } + /** * Builds the URL to fetch a repository's forks. * @@ -41,7 +47,6 @@ public static String getRepoFileContentUrl(String repoOrigen, String filename) { } /** - * String fullURL = getBaseURL() + "/user/repos?" + "sort=" + sortBy ; * Builds the URL to fetch a user's repositories with optional sorting. * @param sortBy The sorting parameter. * @return The complete URL for the user's repositories endpoint. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 79bf687f8..01977f784 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -128,6 +128,8 @@ Please check if ext. storage is correctly inserted and mounted. Voice recording has failed Error while parsing XML layout file. Please revert to default layout. + Token must be 40 characters + Error while creating the PR" Permission required @@ -232,6 +234,9 @@ Creating repository You must specify a repository name You must specify a value for this field + Retrieving repositories... + Error retrieving repositories + Successfully retrieved repositories Configure GitHub token: From 6ca3676d7f28877edccabaaeb687f6fd0a1a1371 Mon Sep 17 00:00:00 2001 From: Milton Barrera Date: Sat, 16 Aug 2025 16:50:27 -0600 Subject: [PATCH 5/7] adding progress dialog while retrieving user repositories --- .../net/osmtracker/activity/GitHubUpload.java | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/net/osmtracker/activity/GitHubUpload.java b/app/src/main/java/net/osmtracker/activity/GitHubUpload.java index 5f09e7425..43b0216ca 100644 --- a/app/src/main/java/net/osmtracker/activity/GitHubUpload.java +++ b/app/src/main/java/net/osmtracker/activity/GitHubUpload.java @@ -265,12 +265,17 @@ public void onItemSelected(AdapterView adapterView, View view, int i, long l) } @Override public void onNothingSelected(AdapterView adapterView) { - + Toast.makeText(GitHubUpload.this, "R.string.upload_to_github_select_repo", Toast.LENGTH_SHORT).show(); } }); } private void listRepos() { + ProgressDialog progressDialog = new ProgressDialog(this); + progressDialog.setMessage(getString(R.string.retrieving_repositories)); + progressDialog.setCancelable(true); + progressDialog.show(); + RequestQueue queue = Volley.newRequestQueue(this); String fullURL = getUserReposUrl(); @@ -281,17 +286,7 @@ private void listRepos() { new Response.Listener() { @Override public void onResponse(JSONArray response) { - for (int i = 0; i < response.length(); i++) { - // creating a new json object and - // getting each object from our json array. - try { - JSONObject responseObj = response.getJSONObject(i); - ArrayListRepos.add(responseObj.getString("full_name")); - - } catch (JSONException e) { - e.printStackTrace(); - } - } + listRepoResponseAction(response, progressDialog); } }, new Response.ErrorListener() { @Override @@ -318,6 +313,35 @@ public Map getHeaders() throws AuthFailureError queue.add(getResquest); } + /** + * This method is called when the list of repositories is retrieved + * from the server. + * + * @param response JSONArray with the repositories + * @param progressDialog ProgressDialog + */ + private void listRepoResponseAction(JSONArray response, ProgressDialog progressDialog) { + boolean errorOcurred = false; + for (int i = 0; i < response.length(); i++) { + // creating a new json object and + // getting each object from our json array. + try { + JSONObject responseObj = response.getJSONObject(i); + ArrayListRepos.add(responseObj.getString("full_name")); + } catch (JSONException e) { + progressDialog.dismiss(); + Toast.makeText(GitHubUpload.this, R.string.error_retrieving_repositories, Toast.LENGTH_SHORT).show(); + e.printStackTrace(); + errorOcurred = true; + break; + } + } + if (!errorOcurred) { + Toast.makeText(GitHubUpload.this, R.string.successfully_retrieved_repositories, Toast.LENGTH_SHORT).show(); + progressDialog.dismiss(); + } + } + public String getRepoName() { return RepoName; } From 58698bdc91468ee9e86986fe4f08bf88b1dffd76 Mon Sep 17 00:00:00 2001 From: Milton Barrera Date: Sat, 16 Aug 2025 18:16:11 -0600 Subject: [PATCH 6/7] Show detailed error messages from GitHub API - In `GitHubPullRequest.java`, it parses the JSON response from the GitHub API in case of an error during Pull Request creation. It extracts and displays specific error messages from the "errors" array in the JSON response. - In `GitHubConstants.java`, it fixes a missing slash in the `getRepoFileContentUrl` method, ensuring the correct URL is formed. --- .../net/osmtracker/activity/GitHubPullRequest.java | 14 ++++++++++++-- .../net/osmtracker/github/GitHubConstants.java | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java b/app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java index 9a159a112..85198674e 100644 --- a/app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java +++ b/app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java @@ -24,6 +24,7 @@ import static net.osmtracker.github.GitHubConstants.getRepoPullsUrl; import static net.osmtracker.github.GitHubConstants.getRepoUrl; +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -104,14 +105,23 @@ public void onResponse(JSONObject response) { }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { - String errorMsg = getString(R.string.error_gh_pr_creation); + String errorMsg = ""; if (error.networkResponse != null && error.networkResponse.data != null) { try { String responseBody = new String(error.networkResponse.data, "utf-8"); Log.e("PR_ERROR", responseBody); - errorMsg += "\n" + responseBody; + JSONObject github_response = new JSONObject(responseBody); + JSONArray github_errors = github_response.getJSONArray("errors"); + for (int i = 0; i < github_errors.length(); i++) { + JSONObject github_error = github_errors.getJSONObject(i); + errorMsg += github_error.getString("message") + "\n"; + } } catch (UnsupportedEncodingException e) { e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } finally { + errorMsg += getString(R.string.error_gh_pr_creation); } } Toast.makeText(GitHubPullRequest.this, errorMsg, Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/net/osmtracker/github/GitHubConstants.java b/app/src/main/java/net/osmtracker/github/GitHubConstants.java index a483ef9a9..f9683f658 100644 --- a/app/src/main/java/net/osmtracker/github/GitHubConstants.java +++ b/app/src/main/java/net/osmtracker/github/GitHubConstants.java @@ -43,7 +43,7 @@ public static String getRepoPullsUrl(String repoOrigen) { * @return The complete URL for the file content endpoint. */ public static String getRepoFileContentUrl(String repoOrigen, String filename) { - return GITHUB_API_REPOS_URL + repoOrigen + "/contents/" + filename; + return GITHUB_API_REPOS_URL + "/" + repoOrigen + "/contents/" + filename; } /** From 3522e8d57a20e7dd2d493a0678aa0c7b19627570 Mon Sep 17 00:00:00 2001 From: Milton Barrera Date: Wed, 27 Aug 2025 00:12:44 -0600 Subject: [PATCH 7/7] Refactoring GitHubUser to use GitHubConstants --- .../main/java/net/osmtracker/GitHubUser.java | 17 +++++++---------- .../net/osmtracker/activity/GitHubUpload.java | 1 - .../net/osmtracker/github/GitHubConstants.java | 5 +++++ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/net/osmtracker/GitHubUser.java b/app/src/main/java/net/osmtracker/GitHubUser.java index d1e387e31..e6ce5b5cf 100644 --- a/app/src/main/java/net/osmtracker/GitHubUser.java +++ b/app/src/main/java/net/osmtracker/GitHubUser.java @@ -1,33 +1,30 @@ package net.osmtracker; +import net.osmtracker.github.*; + import android.content.Context; import android.content.SharedPreferences; public class GitHubUser { - - private static final String PREF_NAME = "GitHubPrefs"; - private static final String KEY_USERNAME = "username"; - private static final String KEY_TOKEN = "token"; - private SharedPreferences sharedPreferences; public GitHubUser(Context context) { - sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); + sharedPreferences = context.getSharedPreferences(GitHubConstants.SHARED_PREFS_NAME, Context.MODE_PRIVATE); } public void saveCredentials(String username, String token) { sharedPreferences.edit() - .putString(KEY_USERNAME, username) - .putString(KEY_TOKEN, token) + .putString(GitHubConstants.KEY_USERNAME, username) + .putString(GitHubConstants.KEY_TOKEN, token) .apply(); } public String getUsername() { - return sharedPreferences.getString(KEY_USERNAME, ""); + return sharedPreferences.getString(GitHubConstants.KEY_USERNAME, ""); } public String getToken() { - return sharedPreferences.getString(KEY_TOKEN, ""); + return sharedPreferences.getString(GitHubConstants.KEY_TOKEN, ""); } public boolean hasCredentials() { diff --git a/app/src/main/java/net/osmtracker/activity/GitHubUpload.java b/app/src/main/java/net/osmtracker/activity/GitHubUpload.java index 43b0216ca..07f265413 100644 --- a/app/src/main/java/net/osmtracker/activity/GitHubUpload.java +++ b/app/src/main/java/net/osmtracker/activity/GitHubUpload.java @@ -166,7 +166,6 @@ private void openActivityOnClick(int btnId, Class destinatio * Either starts uploading directly if we are authenticated against GitHub */ private void startUploadGitHub(final String fileInBase64, String filename, String commitMsj){ - //String fullURL = getBaseURL()+"/repos/"+getRepoName()+"/contents/"+filename; String fullURL = getRepoFileContentUrl(getRepoName(), filename); ProgressDialog progressDialog = new ProgressDialog(this); diff --git a/app/src/main/java/net/osmtracker/github/GitHubConstants.java b/app/src/main/java/net/osmtracker/github/GitHubConstants.java index f9683f658..342c1d925 100644 --- a/app/src/main/java/net/osmtracker/github/GitHubConstants.java +++ b/app/src/main/java/net/osmtracker/github/GitHubConstants.java @@ -1,6 +1,11 @@ package net.osmtracker.github; public final class GitHubConstants { + // Config constans + public static final String SHARED_PREFS_NAME = "GitHubPrefs"; + public static final String KEY_USERNAME = "username"; + public static final String KEY_TOKEN = "token"; + // URL constants public static String GITHUB_API_URL = "https://api.github.com"; public static String GITHUB_TOKENS_URL = "https://github.com/settings/tokens"; public static String GITHUB_API_REPOS_URL = GITHUB_API_URL + "/repos";