Release/milestone previews

This commit is contained in:
M M Arif 2022-10-04 17:04:10 +05:00
parent a757888882
commit 88d761fbaf
8 changed files with 173 additions and 81 deletions

View file

@ -6,15 +6,17 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import com.vdurmont.emoji.EmojiParser;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;
import org.gitnex.tea4j.v2.models.CreateMilestoneOption;
import org.gitnex.tea4j.v2.models.Milestone;
import org.mian.gitnex.R;
@ -22,6 +24,7 @@ import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.databinding.ActivityCreateMilestoneBinding;
import org.mian.gitnex.helpers.AlertDialogs;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.Markdown;
import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.contexts.RepositoryContext;
import retrofit2.Call;
@ -32,15 +35,12 @@ import retrofit2.Callback;
*/
public class CreateMilestoneActivity extends BaseActivity implements View.OnClickListener {
private EditText milestoneDueDate;
private ActivityCreateMilestoneBinding binding;
private View.OnClickListener onClickListener;
private EditText milestoneTitle;
private EditText milestoneDescription;
private Button createNewMilestoneButton;
private RepositoryContext repository;
private Date currentDate = null;
private final View.OnClickListener createMilestoneListener = v -> processNewMilestone();
private boolean renderMd = false;
@SuppressLint("ClickableViewAccessibility")
@Override
@ -48,27 +48,22 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
super.onCreate(savedInstanceState);
ActivityCreateMilestoneBinding activityCreateMilestoneBinding =
ActivityCreateMilestoneBinding.inflate(getLayoutInflater());
setContentView(activityCreateMilestoneBinding.getRoot());
binding = ActivityCreateMilestoneBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
InputMethodManager imm =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
milestoneDueDate = activityCreateMilestoneBinding.milestoneDueDate;
ImageView closeActivity = activityCreateMilestoneBinding.close;
createNewMilestoneButton = activityCreateMilestoneBinding.createNewMilestoneButton;
milestoneTitle = activityCreateMilestoneBinding.milestoneTitle;
milestoneDescription = activityCreateMilestoneBinding.milestoneDescription;
repository = RepositoryContext.fromIntent(getIntent());
milestoneTitle.requestFocus();
binding.milestoneTitle.requestFocus();
assert imm != null;
imm.showSoftInput(milestoneTitle, InputMethodManager.SHOW_IMPLICIT);
imm.showSoftInput(binding.milestoneTitle, InputMethodManager.SHOW_IMPLICIT);
milestoneDescription.setOnTouchListener(
binding.milestoneDescription.setOnTouchListener(
(touchView, motionEvent) -> {
touchView.getParent().requestDisallowInterceptTouchEvent(true);
@ -81,15 +76,56 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
});
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
milestoneDueDate.setOnClickListener(this);
binding.close.setOnClickListener(onClickListener);
binding.milestoneDueDate.setOnClickListener(this);
if (!connToInternet) {
createNewMilestoneButton.setEnabled(false);
binding.createNewMilestoneButton.setEnabled(false);
} else {
createNewMilestoneButton.setOnClickListener(createMilestoneListener);
binding.createNewMilestoneButton.setOnClickListener(createMilestoneListener);
}
}
@Override
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.markdown_switcher, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.markdown) {
if (!renderMd) {
Markdown.render(
ctx,
EmojiParser.parseToUnicode(
Objects.requireNonNull(
Objects.requireNonNull(
binding.milestoneDescription.getText())
.toString())),
binding.markdownPreview);
binding.markdownPreview.setVisibility(View.VISIBLE);
binding.milestoneDescriptionLayout.setVisibility(View.GONE);
renderMd = true;
} else {
binding.markdownPreview.setVisibility(View.GONE);
binding.milestoneDescriptionLayout.setVisibility(View.VISIBLE);
renderMd = false;
}
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
@ -97,8 +133,10 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
String newMilestoneTitle = milestoneTitle.getText().toString();
String newMilestoneDescription = milestoneDescription.getText().toString();
String newMilestoneTitle =
Objects.requireNonNull(binding.milestoneTitle.getText()).toString();
String newMilestoneDescription =
Objects.requireNonNull(binding.milestoneDescription.getText()).toString();
if (!connToInternet) {
@ -188,7 +226,7 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
@Override
public void onClick(View v) {
if (v == milestoneDueDate) {
if (v == binding.milestoneDueDate) {
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
@ -199,7 +237,7 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
new DatePickerDialog(
this,
(view, year, monthOfYear, dayOfMonth) -> {
milestoneDueDate.setText(
binding.milestoneDueDate.setText(
getString(
R.string.setDueDate,
year,
@ -221,12 +259,12 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
private void disableProcessButton() {
createNewMilestoneButton.setEnabled(false);
binding.createNewMilestoneButton.setEnabled(false);
}
private void enableProcessButton() {
createNewMilestoneButton.setEnabled(true);
binding.createNewMilestoneButton.setEnabled(true);
}
@Override

View file

@ -5,18 +5,18 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import com.vdurmont.emoji.EmojiParser;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import org.gitnex.tea4j.v2.models.Branch;
import org.gitnex.tea4j.v2.models.CreateReleaseOption;
import org.gitnex.tea4j.v2.models.CreateTagOption;
@ -27,6 +27,7 @@ import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.databinding.ActivityCreateReleaseBinding;
import org.mian.gitnex.helpers.AlertDialogs;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.Markdown;
import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.contexts.RepositoryContext;
import retrofit2.Call;
@ -37,20 +38,13 @@ import retrofit2.Callback;
*/
public class CreateReleaseActivity extends BaseActivity {
public ImageView closeActivity;
private ActivityCreateReleaseBinding binding;
List<String> branchesList = new ArrayList<>();
private View.OnClickListener onClickListener;
private EditText releaseTagName;
private AutoCompleteTextView releaseBranch;
private EditText releaseTitle;
private EditText releaseContent;
private CheckBox releaseType;
private CheckBox releaseDraft;
private Button createNewRelease;
private String selectedBranch;
private Button createNewTag;
private RepositoryContext repository;
private final View.OnClickListener createReleaseListener = v -> processNewRelease();
private boolean renderMd = false;
@SuppressLint("ClickableViewAccessibility")
@Override
@ -58,9 +52,9 @@ public class CreateReleaseActivity extends BaseActivity {
super.onCreate(savedInstanceState);
ActivityCreateReleaseBinding activityCreateReleaseBinding =
ActivityCreateReleaseBinding.inflate(getLayoutInflater());
setContentView(activityCreateReleaseBinding.getRoot());
binding = ActivityCreateReleaseBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
@ -69,18 +63,11 @@ public class CreateReleaseActivity extends BaseActivity {
repository = RepositoryContext.fromIntent(getIntent());
closeActivity = activityCreateReleaseBinding.close;
releaseTagName = activityCreateReleaseBinding.releaseTagName;
releaseTitle = activityCreateReleaseBinding.releaseTitle;
releaseContent = activityCreateReleaseBinding.releaseContent;
releaseType = activityCreateReleaseBinding.releaseType;
releaseDraft = activityCreateReleaseBinding.releaseDraft;
releaseTitle.requestFocus();
binding.releaseTitle.requestFocus();
assert imm != null;
imm.showSoftInput(releaseTitle, InputMethodManager.SHOW_IMPLICIT);
imm.showSoftInput(binding.releaseTitle, InputMethodManager.SHOW_IMPLICIT);
releaseContent.setOnTouchListener(
binding.releaseContent.setOnTouchListener(
(touchView, motionEvent) -> {
touchView.getParent().requestDisallowInterceptTouchEvent(true);
@ -93,13 +80,10 @@ public class CreateReleaseActivity extends BaseActivity {
});
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
binding.close.setOnClickListener(onClickListener);
releaseBranch = activityCreateReleaseBinding.releaseBranch;
getBranches(repository.getOwner(), repository.getName());
createNewRelease = activityCreateReleaseBinding.createNewRelease;
createNewTag = activityCreateReleaseBinding.createNewTag;
disableProcessButton();
if (!connToInternet) {
@ -107,18 +91,60 @@ public class CreateReleaseActivity extends BaseActivity {
disableProcessButton();
} else {
createNewRelease.setOnClickListener(createReleaseListener);
binding.createNewRelease.setOnClickListener(createReleaseListener);
}
createNewTag.setOnClickListener(v -> createNewTag());
binding.createNewTag.setOnClickListener(v -> createNewTag());
}
@Override
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.markdown_switcher, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.markdown) {
if (!renderMd) {
Markdown.render(
ctx,
EmojiParser.parseToUnicode(
Objects.requireNonNull(
Objects.requireNonNull(binding.releaseContent.getText())
.toString())),
binding.markdownPreview);
binding.markdownPreview.setVisibility(View.VISIBLE);
binding.releaseContentLayout.setVisibility(View.GONE);
renderMd = true;
} else {
binding.markdownPreview.setVisibility(View.GONE);
binding.releaseContentLayout.setVisibility(View.VISIBLE);
renderMd = false;
}
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
private void createNewTag() {
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
String tagName = releaseTagName.getText().toString();
String tagName = Objects.requireNonNull(binding.releaseTagName.getText()).toString();
String message =
releaseTitle.getText().toString() + "\n\n" + releaseContent.getText().toString();
Objects.requireNonNull(binding.releaseTitle.getText()).toString()
+ "\n\n"
+ Objects.requireNonNull(binding.releaseContent.getText()).toString();
if (!connToInternet) {
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
@ -188,12 +214,14 @@ public class CreateReleaseActivity extends BaseActivity {
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
String newReleaseTagName = releaseTagName.getText().toString();
String newReleaseTitle = releaseTitle.getText().toString();
String newReleaseContent = releaseContent.getText().toString();
String newReleaseTagName =
Objects.requireNonNull(binding.releaseTagName.getText()).toString();
String newReleaseTitle = Objects.requireNonNull(binding.releaseTitle.getText()).toString();
String newReleaseContent =
Objects.requireNonNull(binding.releaseContent.getText()).toString();
String checkBranch = selectedBranch;
boolean newReleaseType = releaseType.isChecked();
boolean newReleaseDraft = releaseDraft.isChecked();
boolean newReleaseType = binding.releaseType.isChecked();
boolean newReleaseDraft = binding.releaseDraft.isChecked();
if (!connToInternet) {
@ -325,10 +353,10 @@ public class CreateReleaseActivity extends BaseActivity {
R.layout.list_spinner_items,
branchesList);
releaseBranch.setAdapter(adapter);
binding.releaseBranch.setAdapter(adapter);
enableProcessButton();
releaseBranch.setOnItemClickListener(
binding.releaseBranch.setOnItemClickListener(
(parent, view, position, id) ->
selectedBranch = branchesList.get(position));
}
@ -349,13 +377,13 @@ public class CreateReleaseActivity extends BaseActivity {
}
private void disableProcessButton() {
createNewTag.setEnabled(false);
createNewRelease.setEnabled(false);
binding.createNewTag.setEnabled(false);
binding.createNewRelease.setEnabled(false);
}
private void enableProcessButton() {
createNewTag.setEnabled(true);
createNewRelease.setEnabled(true);
binding.createNewTag.setEnabled(true);
binding.createNewRelease.setEnabled(true);
}
@Override

View file

@ -129,7 +129,7 @@
android:id="@+id/markdown_preview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/dimen180dp"
android:minHeight="@dimen/dimen186dp"
android:layout_marginTop="@dimen/dimen8dp"
android:layout_marginBottom="@dimen/dimen8dp"
android:textColor="?attr/primaryTextColor"

View file

@ -105,7 +105,7 @@
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/milestoneDescription"
android:layout_width="match_parent"
android:layout_height="@dimen/dimen140dp"
android:layout_height="@dimen/dimen180dp"
android:gravity="top|start"
android:inputType="textCapSentences|textMultiLine"
android:scrollbars="vertical"
@ -116,6 +116,18 @@
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/markdown_preview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/dimen206dp"
android:layout_marginTop="@dimen/dimen8dp"
android:layout_marginBottom="@dimen/dimen8dp"
android:textColor="?attr/primaryTextColor"
android:textIsSelectable="true"
android:textSize="@dimen/dimen14sp"
android:visibility="gone" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/milestoneDueDateLayout"
android:layout_width="match_parent"

View file

@ -129,7 +129,7 @@
android:id="@+id/markdown_preview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/dimen180dp"
android:minHeight="@dimen/dimen186dp"
android:layout_marginTop="@dimen/dimen8dp"
android:layout_marginBottom="@dimen/dimen8dp"
android:textColor="?attr/primaryTextColor"

View file

@ -130,9 +130,9 @@
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/releaseContent"
android:layout_width="match_parent"
android:layout_height="@dimen/dimen140dp"
android:layout_height="@dimen/dimen180dp"
android:gravity="top|start"
android:inputType="textCapSentences"
android:inputType="textCapSentences|textMultiLine"
android:scrollbars="vertical"
android:textColor="?attr/inputTextColor"
android:textColorHighlight="?attr/hintColor"
@ -141,6 +141,18 @@
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/markdown_preview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/dimen186dp"
android:layout_marginTop="@dimen/dimen8dp"
android:layout_marginBottom="@dimen/dimen8dp"
android:textColor="?attr/primaryTextColor"
android:textIsSelectable="true"
android:textSize="@dimen/dimen14sp"
android:visibility="gone" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/releaseBranchLayout"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu"

View file

@ -117,7 +117,7 @@
android:id="@+id/markdown_preview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/dimen180dp"
android:minHeight="@dimen/dimen186dp"
android:layout_marginTop="@dimen/dimen8dp"
android:layout_marginBottom="@dimen/dimen8dp"
android:textColor="?attr/primaryTextColor"

View file

@ -34,7 +34,9 @@
<dimen name="dimen140dp">140dp</dimen>
<dimen name="dimen150dp">150dp</dimen>
<dimen name="dimen180dp">180dp</dimen>
<dimen name="dimen186dp">186dp</dimen>
<dimen name="dimen200dp">200dp</dimen>
<dimen name="dimen206dp">206dp</dimen>
<dimen name="dimen320dp">320dp</dimen>
<dimen name="dimen480dp">480dp</dimen>