diff --git a/app/build.gradle b/app/build.gradle index f22a26bd..0a037217 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,13 +27,13 @@ dependencies { final def markwon_version = "3.0.0" implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.1.0-alpha05' - implementation 'com.google.android.material:material:1.1.0-alpha06' + implementation 'androidx.appcompat:appcompat:1.1.0-beta01' + implementation 'com.google.android.material:material:1.1.0-alpha07' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.legacy:legacy-support-v4:1.0.0' testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation 'com.github.vihtarb:tooltip:0.2.0' implementation 'com.squareup.okhttp3:okhttp:3.12.1' implementation 'com.google.code.gson:gson:2.8.5' diff --git a/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java b/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java index 4852754a..3b2963f5 100644 --- a/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java @@ -8,6 +8,7 @@ import retrofit2.Response; import android.annotation.SuppressLint; import android.app.DatePickerDialog; import android.content.Context; +import android.graphics.PorterDuff; import android.graphics.drawable.GradientDrawable; import android.os.Bundle; import android.util.Log; @@ -31,10 +32,12 @@ import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.models.Collaborators; import org.mian.gitnex.models.CreateIssue; import org.mian.gitnex.models.Issues; +import org.mian.gitnex.models.Milestones; import org.mian.gitnex.util.AppUtil; import org.mian.gitnex.util.TinyDB; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Calendar; import java.util.List; @@ -53,6 +56,7 @@ public class EditIssueActivity extends AppCompatActivity implements View.OnClick private Button editIssueButton; private Spinner editIssueMilestoneSpinner; + List milestonesList = new ArrayList<>(); private ArrayAdapter defaultMentionAdapter; @Override @@ -82,6 +86,9 @@ public class EditIssueActivity extends AppCompatActivity implements View.OnClick defaultMentionAdapter = new MentionArrayAdapter<>(this); loadCollaboratorsList(); + editIssueMilestoneSpinner = findViewById(R.id.editIssueMilestoneSpinner); + editIssueMilestoneSpinner.getBackground().setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP); + editIssueDescription.setMentionAdapter(defaultMentionAdapter); initCloseListener(); @@ -172,6 +179,9 @@ public class EditIssueActivity extends AppCompatActivity implements View.OnClick final String instanceToken = "token " + tinyDb.getString(loginUid + "-token"); final int issueIndex = Integer.parseInt(tinyDb.getString("issueNumber")); + Milestones mModel = (Milestones) editIssueMilestoneSpinner.getSelectedItem(); + + int editIssueMilestoneId = mModel.getId(); String editIssueTitleForm = editIssueTitle.getText().toString(); String editIssueDescriptionForm = editIssueDescription.getText().toString(); @@ -206,15 +216,15 @@ public class EditIssueActivity extends AppCompatActivity implements View.OnClick //Log.i("editIssueDueDateForm", String.valueOf(editIssueDueDateForm)); disableProcessButton(); - editIssue(instanceUrl, instanceToken, repoOwner, repoName, issueIndex, loginUid, editIssueTitleForm, editIssueDescriptionForm, editIssueDueDateForm); + editIssue(instanceUrl, instanceToken, repoOwner, repoName, issueIndex, loginUid, editIssueTitleForm, editIssueDescriptionForm, editIssueDueDateForm, editIssueMilestoneId); } - private void editIssue(String instanceUrl, String instanceToken, String repoOwner, String repoName, int issueIndex, String loginUid, String title, String description, String dueDate) { + private void editIssue(String instanceUrl, String instanceToken, String repoOwner, String repoName, int issueIndex, String loginUid, String title, String description, String dueDate, int editIssueMilestoneId) { final TinyDB tinyDb = new TinyDB(getApplicationContext()); - CreateIssue issueData = new CreateIssue(title, description, dueDate); + CreateIssue issueData = new CreateIssue(title, description, dueDate, editIssueMilestoneId); Call call = RetrofitClient .getInstance(instanceUrl) @@ -292,7 +302,7 @@ public class EditIssueActivity extends AppCompatActivity implements View.OnClick } - private void getIssue(String instanceUrl, String instanceToken, String loginUid, String repoOwner, String repoName, int issueIndex) { + private void getIssue(final String instanceUrl, final String instanceToken, final String loginUid, final String repoOwner, final String repoName, int issueIndex) { Call call = RetrofitClient .getInstance(instanceUrl) @@ -310,6 +320,74 @@ public class EditIssueActivity extends AppCompatActivity implements View.OnClick editIssueTitle.setText(response.body().getTitle()); editIssueDescription.setText(response.body().getBody()); + int msId = 0; + if(response.body().getMilestone() != null) { + msId = response.body().getMilestone().getId(); + } + + // get milestones list + if(response.body().getId() > 0) { + + Call> call_ = RetrofitClient + .getInstance(instanceUrl) + .getApiInterface() + .getMilestones(Authorization.returnAuthentication(getApplicationContext(), loginUid, instanceToken), repoOwner, repoName); + + final int finalMsId = msId; + + call_.enqueue(new Callback>() { + + @Override + public void onResponse(@NonNull Call> call, @NonNull retrofit2.Response> response_) { + + int finalMsId1 = 0; + + if (response_.code() == 200) { + + List milestonesList_ = response_.body(); + + milestonesList.add(new Milestones(0, "No milestone")); + assert milestonesList_ != null; + if (milestonesList_.size() > 0) { + for (int i = 0; i < milestonesList_.size(); i++) { + + Milestones data = new Milestones( + milestonesList_.get(i).getId(), + milestonesList_.get(i).getTitle() + ); + milestonesList.add(data); + + if(finalMsId == milestonesList_.get(i).getId()) { + finalMsId1 = i + 1; + } + + } + } + + ArrayAdapter adapter_ = new ArrayAdapter<>(getApplicationContext(), + R.layout.spinner_item, milestonesList); + + adapter_.setDropDownViewResource(R.layout.spinner_dropdown_item); + editIssueMilestoneSpinner.setAdapter(adapter_); + + if(milestonesList_.size() > 0) { + editIssueMilestoneSpinner.setSelection(finalMsId1); + } + enableProcessButton(); + + } + + } + + @Override + public void onFailure(@NonNull Call> call, @NonNull Throwable t) { + Log.e("onFailure", t.toString()); + } + }); + + } + // get milestones list + if(response.body().getDue_date() != null) { @SuppressLint("SimpleDateFormat") DateFormat formatter = new SimpleDateFormat("yyyy-M-dd"); @@ -317,7 +395,7 @@ public class EditIssueActivity extends AppCompatActivity implements View.OnClick editIssueDueDate.setText(dueDate); } - enableProcessButton(); + //enableProcessButton(); } else if(response.code() == 401) { diff --git a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java index c6a2ae11..d24294f4 100644 --- a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java @@ -74,7 +74,6 @@ import java.util.Objects; public class IssueDetailActivity extends AppCompatActivity { public ImageView closeActivity; - private View.OnClickListener onClickListener; private IssueCommentsAdapter adapter; private RecyclerView mRecyclerView; private ImageView assigneeAvatar; @@ -110,7 +109,6 @@ public class IssueDetailActivity extends AppCompatActivity { final SwipeRefreshLayout swipeRefresh = findViewById(R.id.pullToRefresh); - closeActivity = findViewById(R.id.close); assigneeAvatar = findViewById(R.id.assigneeAvatar); issueTitle = findViewById(R.id.issueTitle); issueDescription = findViewById(R.id.issueDescription); @@ -127,10 +125,7 @@ public class IssueDetailActivity extends AppCompatActivity { Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); Objects.requireNonNull(getSupportActionBar()).setTitle(repoName); - getSupportActionBar().setDisplayHomeAsUpEnabled(false); - - initCloseListener(); - closeActivity.setOnClickListener(onClickListener); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); mRecyclerView = findViewById(R.id.recyclerView); mRecyclerView.setHasFixedSize(true); @@ -437,6 +432,7 @@ public class IssueDetailActivity extends AppCompatActivity { PrettyTime prettyTime = new PrettyTime(new Locale(locale)); String createdTime = prettyTime.format(singleIssue.getCreated_at()); issueCreatedTime.setText(getString(R.string.createdTime, createdTime)); + issueCreatedTime.setVisibility(View.VISIBLE); issueCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getCreated_at()), getApplicationContext())); break; } @@ -444,12 +440,14 @@ public class IssueDetailActivity extends AppCompatActivity { DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd '" + getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); String createdTime = formatter.format(singleIssue.getCreated_at()); issueCreatedTime.setText(getString(R.string.createdTime, createdTime)); + issueCreatedTime.setVisibility(View.VISIBLE); break; } case "normal1": { DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy '" + getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); String createdTime = formatter.format(singleIssue.getCreated_at()); issueCreatedTime.setText(getString(R.string.createdTime, createdTime)); + issueCreatedTime.setVisibility(View.VISIBLE); break; } } @@ -490,7 +488,7 @@ public class IssueDetailActivity extends AppCompatActivity { } private void initCloseListener() { - onClickListener = new View.OnClickListener() { + View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View view) { finish(); diff --git a/app/src/main/java/org/mian/gitnex/models/CreateIssue.java b/app/src/main/java/org/mian/gitnex/models/CreateIssue.java index 17c7d36f..3d81d7f3 100644 --- a/app/src/main/java/org/mian/gitnex/models/CreateIssue.java +++ b/app/src/main/java/org/mian/gitnex/models/CreateIssue.java @@ -29,10 +29,11 @@ public class CreateIssue { this.labels = labels; } - public CreateIssue(String title, String body, String due_date) { + public CreateIssue(String title, String body, String due_date, int milestone) { this.title = title; this.body = body; this.due_date = due_date; + this.milestone = milestone; } private class Assignees { diff --git a/app/src/main/res/layout/activity_edit_issue.xml b/app/src/main/res/layout/activity_edit_issue.xml index 779986b4..bef28f49 100644 --- a/app/src/main/res/layout/activity_edit_issue.xml +++ b/app/src/main/res/layout/activity_edit_issue.xml @@ -10,7 +10,6 @@ android:layout_height="wrap_content"> + android:layout_height="wrap_content" + android:theme="@style/AppTheme.AppBarOverlay" > - - - - - - - - + app:popupTheme="@style/AppTheme.PopupOverlay" + app:title="@string/app_name" /> @@ -204,6 +172,7 @@ android:textColor="@color/white" android:layout_toEndOf="@+id/issueCreatedTime" android:textSize="12sp" + android:visibility="gone" android:text="@string/modifiedText" /> diff --git a/fastlane/metadata/android/en-US/changelogs/45.txt b/fastlane/metadata/android/en-US/changelogs/45.txt new file mode 100644 index 00000000..e4f28588 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/45.txt @@ -0,0 +1,7 @@ +- New: Add or update milestone of an issue +- New: Field for OTP on the login screen +- Enhancement: Better handling of buttons on API calls +- Fixed: Crash when empty password with OTP is used + +For more, check the release notes. +https://gitea.com/mmarif/GitNex/releases \ No newline at end of file