mirror of
https://codeberg.org/gitnex/GitNex.git
synced 2023-12-13 20:50:18 +01:00
Release/milestone previews
This commit is contained in:
parent
a757888882
commit
88d761fbaf
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
Loading…
Reference in a new issue