From 0f241b07897863c0e6826c94e934f07cce933869 Mon Sep 17 00:00:00 2001 From: M M Arif Date: Sat, 17 Jan 2026 08:19:17 +0100 Subject: [PATCH] Implement issue templates for new issues (#1565) closes #323 Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/1565 Co-authored-by: M M Arif Co-committed-by: M M Arif --- .../activities/CreateIssueActivity.java | 94 +++++++++++++++++++ .../gitnex/activities/CreateRepoActivity.java | 2 +- .../main/res/layout/activity_create_issue.xml | 29 +++++- app/src/main/res/values/strings.xml | 1 + 4 files changed, 123 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java index cb254dc4..fd97c8e9 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java @@ -36,6 +36,7 @@ import okhttp3.RequestBody; import org.gitnex.tea4j.v2.models.Attachment; import org.gitnex.tea4j.v2.models.CreateIssueOption; import org.gitnex.tea4j.v2.models.Issue; +import org.gitnex.tea4j.v2.models.IssueTemplate; import org.gitnex.tea4j.v2.models.Label; import org.gitnex.tea4j.v2.models.Milestone; import org.gitnex.tea4j.v2.models.User; @@ -198,6 +199,7 @@ public class CreateIssueActivity extends BaseActivity viewBinding.insertNote.setOnClickListener(insertNote -> showAllNotes()); getMilestones(repository.getOwner(), repository.getName(), resultLimit); + fetchIssueTemplates(); viewBinding.newIssueLabels.setOnClickListener(newIssueLabels -> showLabels()); @@ -674,6 +676,98 @@ public class CreateIssueActivity extends BaseActivity }); } + private void fetchIssueTemplates() { + Call> call = + RetrofitClient.getApiInterface(ctx) + .repoGetIssueTemplates(repository.getOwner(), repository.getName()); + + call.enqueue( + new Callback<>() { + @Override + public void onResponse( + @NonNull Call> call, + @NonNull retrofit2.Response> response) { + if (response.isSuccessful() + && response.body() != null + && !response.body().isEmpty()) { + List templates = response.body(); + setupTemplateSpinner(templates); + } + } + + @Override + public void onFailure( + @NonNull Call> call, @NonNull Throwable t) {} + }); + } + + private void setupTemplateSpinner(List templates) { + if (templates == null || templates.isEmpty()) { + viewBinding.newIssueTemplateSpinnerLayout.setVisibility(View.GONE); + return; + } + + viewBinding.newIssueTemplateSpinnerLayout.setVisibility(View.VISIBLE); + + List templateNames = new ArrayList<>(); + templateNames.add(getString(R.string.none)); + + for (IssueTemplate template : templates) { + templateNames.add(template.getName()); + } + + ArrayAdapter adapter = + new ArrayAdapter<>( + CreateIssueActivity.this, R.layout.list_spinner_items, templateNames); + + viewBinding.newIssueTemplateSpinner.setAdapter(adapter); + + viewBinding.newIssueTemplateSpinner.setOnItemClickListener( + (parent, view, position, id) -> { + String selectedName = adapter.getItem(position); + if (selectedName == null) { + return; + } + + if (selectedName.equals(getString(R.string.none))) { + viewBinding.newIssueTitle.setText(""); + viewBinding.newIssueDescription.setText(""); + } else { + for (IssueTemplate template : templates) { + if (template.getName().equals(selectedName)) { + applyIssueTemplate(template); + break; + } + } + } + }); + } + + private void applyIssueTemplate(IssueTemplate template) { + if (template == null) { + return; + } + + if (template.getTitle() != null && !template.getTitle().isEmpty()) { + viewBinding.newIssueTitle.setText(template.getTitle().trim()); + } else { + viewBinding.newIssueTitle.setText(""); + } + + String templateContent = ""; + if (template.getContent() != null) { + templateContent = template.getContent(); + } else if (template.getBody() != null) { + templateContent = template.getBody().toString(); + } + + if (!templateContent.isEmpty()) { + viewBinding.newIssueDescription.setText(templateContent.trim()); + } else { + viewBinding.newIssueDescription.setText(""); + } + } + @Override public void onResume() { super.onResume(); diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java index b46f1efa..4abd5e1f 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java @@ -93,7 +93,7 @@ public class CreateRepoActivity extends BaseActivity { Objects.requireNonNull(activityCreateRepoBinding.defaultBranch.getText()) .toString(); - if (!newRepoDesc.equals("")) { + if (!newRepoDesc.isEmpty()) { if (newRepoDesc.length() > 255) { diff --git a/app/src/main/res/layout/activity_create_issue.xml b/app/src/main/res/layout/activity_create_issue.xml index 07a792d9..b31b37af 100644 --- a/app/src/main/res/layout/activity_create_issue.xml +++ b/app/src/main/res/layout/activity_create_issue.xml @@ -55,7 +55,32 @@ android:orientation="vertical" android:padding="@dimen/dimen16dp"> - + + + + + + - + LFS Mirrors Stars + Template Explore users