Implementato filtro avanzato per Ultimi arrivi fornitori.
This commit is contained in:
parent
300b1e4529
commit
b25c94f38d
@ -1,6 +1,6 @@
|
||||
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import android.app.DatePickerDialog;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
|
||||
@ -20,6 +20,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import it.integry.integrywmsnative.R;
|
||||
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
|
||||
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
||||
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
|
||||
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
||||
@ -29,13 +30,14 @@ import it.integry.integrywmsnative.core.utility.UtilityProgress;
|
||||
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding;
|
||||
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
|
||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreListAdapter;
|
||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato;
|
||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer;
|
||||
import it.integry.integrywmsnative.ui.ElevatedToolbar;
|
||||
|
||||
/**
|
||||
* A simple {@link Fragment} subclass.
|
||||
*/
|
||||
public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFragment, IScrollableFragment {
|
||||
public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment {
|
||||
|
||||
private Runnable mOnPreDestroy;
|
||||
private ElevatedToolbar mToolbar;
|
||||
@ -43,6 +45,11 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
|
||||
private FragmentUltimiArriviFornitoreBinding mBinding;
|
||||
|
||||
private List<DocumentoResoDTO> mItems;
|
||||
private List<DocumentoResoDTO> mRenderedItems = new ArrayList<>();
|
||||
|
||||
private UltimiArriviFornitoreListAdapter mAdapter;
|
||||
|
||||
private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel;
|
||||
|
||||
public UltimiArriviFornitoreFragment() {
|
||||
// Required empty public constructor
|
||||
@ -116,7 +123,9 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
|
||||
null,
|
||||
consegne -> {
|
||||
this.mItems = consegne;
|
||||
|
||||
this.initDataAdapter(consegne);
|
||||
refreshRenderedOrdini(consegne);
|
||||
|
||||
progressDialog.dismiss();
|
||||
}, ex -> {
|
||||
@ -124,13 +133,19 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void refreshRenderedOrdini(List<DocumentoResoDTO> items) {
|
||||
mRenderedItems.clear();
|
||||
if(items != null) mRenderedItems.addAll(items);
|
||||
}
|
||||
|
||||
private void initDataAdapter(ArrayList<DocumentoResoDTO> dataset) {
|
||||
UltimiArriviFornitoreListAdapter adapter = new UltimiArriviFornitoreListAdapter(getActivity(), dataset);
|
||||
adapter.setOnSelectionChanged(this::onSingleSelectionChanged);
|
||||
mAdapter = new UltimiArriviFornitoreListAdapter(getActivity(), dataset);
|
||||
mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged);
|
||||
|
||||
mBinding.recyclerView.setHasFixedSize(true);
|
||||
mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
|
||||
mBinding.recyclerView.setAdapter(adapter);
|
||||
mBinding.recyclerView.setAdapter(mAdapter);
|
||||
mBinding.fastscroll.setRecyclerView(mBinding.recyclerView);
|
||||
|
||||
}
|
||||
@ -166,4 +181,23 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
|
||||
PickingResiActivity.startActivity(getActivity(), getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFilterClick() {
|
||||
DialogUltimiArriviFornitoreFiltroAvanzato.make(getActivity(), mItems, mAppliedFilterViewModel, (filteredOrderList, filter) -> {
|
||||
mAppliedFilterViewModel = filter;
|
||||
|
||||
if(filteredOrderList != null){
|
||||
|
||||
refreshItems(filteredOrderList);
|
||||
}
|
||||
|
||||
}).show();
|
||||
}
|
||||
|
||||
|
||||
private void refreshItems(List<DocumentoResoDTO> items){
|
||||
mRenderedItems.clear();
|
||||
mRenderedItems.addAll(items);
|
||||
mAdapter.updateItems(mRenderedItems);
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,29 +70,7 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt
|
||||
this.mDataset = new ArrayList<>();
|
||||
this.mSectionTitleItems = new ArrayList<>();
|
||||
|
||||
this.mDataset = Stream.of(dataset)
|
||||
.sortBy(DocumentoResoDTO::getRagSoc)
|
||||
.toList();
|
||||
|
||||
|
||||
Stream.of(mDataset)
|
||||
.map(DocumentoResoDTO::getRagSoc)
|
||||
.distinct()
|
||||
.forEach(x -> {
|
||||
this.mSectionTitleItems.add(String.valueOf(x.charAt(0)));
|
||||
|
||||
long count = Stream.of(dataset)
|
||||
.filter(y -> y.getRagSoc().equalsIgnoreCase(x))
|
||||
.count();
|
||||
|
||||
|
||||
for(int i = 0; i < count; i++) this.mSectionTitleItems.add(String.valueOf(x.charAt(0)));
|
||||
});
|
||||
|
||||
long count = Stream.of(dataset)
|
||||
.filter(x -> UtilityString.isNullOrEmpty(x.getRagSoc()))
|
||||
.count();
|
||||
|
||||
mDataset.addAll(sort(dataset));
|
||||
}
|
||||
|
||||
|
||||
@ -171,9 +149,42 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void updateItems(List<DocumentoResoDTO> updatedDataset) {
|
||||
mDataset.clear();
|
||||
mDataset.addAll(sort(updatedDataset));
|
||||
notifyDataSetChanged();
|
||||
notifyDataChanged();
|
||||
}
|
||||
|
||||
|
||||
public void setOnSelectionChanged(RunnableArgs<DocumentoResoDTO> mSelectionChanged) {
|
||||
this.mOnSelectionChanged = mSelectionChanged;
|
||||
}
|
||||
|
||||
|
||||
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
|
||||
List<DocumentoResoDTO> items = Stream.of(dataset)
|
||||
.sortBy(DocumentoResoDTO::getRagSoc)
|
||||
.toList();
|
||||
|
||||
|
||||
Stream.of(items)
|
||||
.map(DocumentoResoDTO::getRagSoc)
|
||||
.distinct()
|
||||
.forEach(x -> {
|
||||
this.mSectionTitleItems.add(String.valueOf(x.charAt(0)));
|
||||
|
||||
long count = Stream.of(dataset)
|
||||
.filter(y -> y.getRagSoc().equalsIgnoreCase(x))
|
||||
.count();
|
||||
|
||||
|
||||
for(int i = 0; i < count; i++) this.mSectionTitleItems.add(String.valueOf(x.charAt(0)));
|
||||
});
|
||||
return items;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,206 @@
|
||||
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog;
|
||||
|
||||
import android.app.DatePickerDialog;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.ArrayAdapter;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.annimon.stream.function.Predicate;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
|
||||
import it.integry.integrywmsnative.R;
|
||||
import it.integry.integrywmsnative.core.di.BindableString;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
|
||||
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||
import it.integry.integrywmsnative.databinding.DialogUltimeConsegneFiltroAvanzatoBinding;
|
||||
import it.integry.integrywmsnative.databinding.DialogUltimiArriviFornitoreFiltroAvanzatoBinding;
|
||||
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzato;
|
||||
|
||||
public class DialogUltimiArriviFornitoreFiltroAvanzato {
|
||||
|
||||
private AlertDialog mAlert;
|
||||
private Context mContext;
|
||||
private DialogUltimiArriviFiltroAvanzatoViewModel mBaseViewModel;
|
||||
private RunnableArgss<List<DocumentoResoDTO>, DialogUltimiArriviFiltroAvanzatoViewModel> mOnDismiss;
|
||||
|
||||
|
||||
|
||||
private ArrayAdapter<String> arrayAdapterRagSoc;
|
||||
|
||||
private List<DocumentoResoDTO> mItems;
|
||||
private List<DocumentoResoDTO> mFilteredItems;
|
||||
|
||||
private Predicate<DocumentoResoDTO> currentRagSocPredicate = null;
|
||||
private Predicate<DocumentoResoDTO> currentDataDocPredicate = null;
|
||||
|
||||
public static AlertDialog make(final Context context,
|
||||
final List<DocumentoResoDTO> items,
|
||||
DialogUltimiArriviFiltroAvanzatoViewModel baseViewModel,
|
||||
RunnableArgss<List<DocumentoResoDTO>, DialogUltimiArriviFiltroAvanzatoViewModel> onDismiss) {
|
||||
return new DialogUltimiArriviFornitoreFiltroAvanzato(context, items, baseViewModel, onDismiss).mAlert;
|
||||
}
|
||||
|
||||
public DialogUltimiArriviFornitoreFiltroAvanzato(final Context context,
|
||||
final List<DocumentoResoDTO> items,
|
||||
DialogUltimiArriviFiltroAvanzatoViewModel baseViewModel,
|
||||
RunnableArgss<List<DocumentoResoDTO>, DialogUltimiArriviFiltroAvanzatoViewModel> onDismiss) {
|
||||
mContext = context;
|
||||
mItems = items;
|
||||
mBaseViewModel = baseViewModel;
|
||||
mOnDismiss = onDismiss;
|
||||
|
||||
DialogUltimiArriviFiltroAvanzatoViewModel viewModel = baseViewModel != null ? baseViewModel : new DialogUltimiArriviFiltroAvanzatoViewModel();
|
||||
|
||||
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
DialogUltimiArriviFornitoreFiltroAvanzatoBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_ultimi_arrivi_fornitore_filtro_avanzato, null, false);
|
||||
|
||||
final AlertDialog.Builder dialog = new AlertDialog.Builder(context)
|
||||
.setView(binding.getRoot());
|
||||
|
||||
binding.setViewmodel(viewModel);
|
||||
initViewModelNew(viewModel);
|
||||
initView(binding, viewModel);
|
||||
|
||||
mAlert = dialog.create();
|
||||
mAlert.setCanceledOnTouchOutside(false);
|
||||
|
||||
mAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||
mAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||
|
||||
binding.positiveBtn.setOnClickListener(view -> {
|
||||
mAlert.dismiss();
|
||||
});
|
||||
|
||||
binding.neutralBtn.setOnClickListener(view -> {
|
||||
resetAll(viewModel);
|
||||
});
|
||||
|
||||
|
||||
mAlert.setOnDismissListener(dialogInterface -> {
|
||||
if(mOnDismiss != null) mOnDismiss.run(mFilteredItems, viewModel);
|
||||
});
|
||||
|
||||
refreshList();
|
||||
|
||||
}
|
||||
|
||||
private void resetAll(DialogUltimiArriviFiltroAvanzatoViewModel viewModel) {
|
||||
viewModel.ragSoc.set(null);
|
||||
viewModel.dataDoc.set(null);
|
||||
}
|
||||
|
||||
private void initView(DialogUltimiArriviFornitoreFiltroAvanzatoBinding bindings, DialogUltimiArriviFiltroAvanzatoViewModel viewModel) {
|
||||
|
||||
arrayAdapterRagSoc = new ArrayAdapter(mContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
|
||||
arrayAdapterRagSoc.addAll(getAvailableRagSocs(false));
|
||||
bindings.filledExposedDropdownRagSoc.setAdapter(arrayAdapterRagSoc);
|
||||
|
||||
bindings.filledExposedDropdownDataDoc.setOnClickListener(view -> {
|
||||
Calendar c = UtilityDate.getCalendarInstance();
|
||||
|
||||
if(viewModel.dataDocDate != null) {
|
||||
c.setTime(viewModel.dataDocDate);
|
||||
}
|
||||
|
||||
int mYear = c.get(Calendar.YEAR);
|
||||
int mMonth = c.get(Calendar.MONTH);
|
||||
int mDay = c.get(Calendar.DAY_OF_MONTH);
|
||||
|
||||
DatePickerDialog datePickerDialog = new DatePickerDialog(mContext,
|
||||
(view2, year, month, day) -> {
|
||||
|
||||
viewModel.dataDocDate = new GregorianCalendar(year, month, day).getTime();
|
||||
viewModel.dataDoc.set(UtilityDate.formatDate(viewModel.dataDocDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
|
||||
|
||||
}, mYear, mMonth, mDay);
|
||||
datePickerDialog.show();
|
||||
});
|
||||
|
||||
|
||||
viewModel.ragSoc.refresh();
|
||||
viewModel.dataDoc.refresh();
|
||||
}
|
||||
|
||||
private void initViewModelNew(DialogUltimiArriviFiltroAvanzatoViewModel viewModel) {
|
||||
|
||||
BindableString.resetListeners(viewModel.ragSoc);
|
||||
BindableString.registerListener(viewModel.ragSoc, value -> {
|
||||
if (UtilityString.isNullOrEmpty(value)) currentRagSocPredicate = null;
|
||||
else {
|
||||
currentRagSocPredicate = o -> o.getRagSoc().equalsIgnoreCase(viewModel.ragSoc.get());
|
||||
}
|
||||
|
||||
refreshList();
|
||||
});
|
||||
|
||||
BindableString.resetListeners(viewModel.dataDoc);
|
||||
BindableString.registerListener(viewModel.dataDoc, value -> {
|
||||
if (UtilityString.isNullOrEmpty(value)) currentDataDocPredicate = null;
|
||||
else {
|
||||
currentDataDocPredicate = o -> o.getDataDocD().equals(viewModel.dataDocDate);
|
||||
}
|
||||
|
||||
refreshList();
|
||||
|
||||
arrayAdapterRagSoc.clear();
|
||||
arrayAdapterRagSoc.addAll(getAvailableRagSocs(true));
|
||||
});
|
||||
}
|
||||
|
||||
private List<String> getAvailableRagSocs(boolean skipRecalc) {
|
||||
if(currentDataDocPredicate == null){
|
||||
mFilteredItems = mItems;
|
||||
} else if(!skipRecalc){
|
||||
Stream<DocumentoResoDTO> tmpStream = Stream.of(mItems)
|
||||
.filter(x ->
|
||||
(currentDataDocPredicate == null || (currentDataDocPredicate.test(x)))
|
||||
);
|
||||
|
||||
mFilteredItems = tmpStream.toList();
|
||||
}
|
||||
|
||||
return Stream.of(mFilteredItems).map(DocumentoResoDTO::getRagSoc).distinct().withoutNulls().toList();
|
||||
}
|
||||
|
||||
|
||||
private void refreshList() {
|
||||
|
||||
if(currentRagSocPredicate == null && currentDataDocPredicate == null){
|
||||
mFilteredItems = mItems;
|
||||
} else {
|
||||
Stream<DocumentoResoDTO> tmpStream = Stream.of(mItems)
|
||||
.filter(x ->
|
||||
(currentRagSocPredicate == null || (currentRagSocPredicate.test(x))) &&
|
||||
(currentDataDocPredicate== null || (currentDataDocPredicate.test(x)))
|
||||
);
|
||||
|
||||
mFilteredItems = tmpStream.toList();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class DialogUltimiArriviFiltroAvanzatoViewModel {
|
||||
|
||||
public BindableString ragSoc = new BindableString();
|
||||
public BindableString dataDoc = new BindableString();
|
||||
|
||||
public Date dataDocDate;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
package it.integry.integrywmsnative.gest.vendita.dialogs;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import android.app.DatePickerDialog;
|
||||
import android.content.Context;
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package it.integry.integrywmsnative.view.dialogs.base;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package it.integry.integrywmsnative.view.dialogs.input_quantity;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import android.app.DatePickerDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.ProgressDialog;
|
||||
|
||||
@ -0,0 +1,136 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<layout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
|
||||
|
||||
|
||||
<data>
|
||||
<variable
|
||||
name="viewmodel"
|
||||
type="it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel" />
|
||||
|
||||
</data>
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:cardCornerRadius="12dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="16dp">
|
||||
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/title_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/TextViewMaterial.DialogTitle"
|
||||
android:text="@string/dialog_vendita_filtro_avanzato"
|
||||
android:gravity="center_horizontal"
|
||||
android:layout_marginBottom="12dp"/>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/input_cod_rag_soc"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:imeOptions="actionNext"
|
||||
android:nextFocusDown="@id/input_data_doc"
|
||||
android:hint="@string/rag_soc">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatAutoCompleteTextView
|
||||
android:id="@+id/filled_exposed_dropdown_rag_soc"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="end"
|
||||
android:imeOptions="actionNext"
|
||||
android:nextFocusDown="@id/input_data_doc"
|
||||
app:binding="@{viewmodel.ragSoc}" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/input_data_doc"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/ship_date">
|
||||
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/filled_exposed_dropdown_data_doc"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="textNoSuggestions"
|
||||
android:focusable="false"
|
||||
android:singleLine="true"
|
||||
app:binding="@{viewmodel.dataDoc}"/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginEnd="24dp"
|
||||
android:layout_marginTop="8dp">
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/buttons_guideline"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintGuide_percent="0.5"/>
|
||||
|
||||
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/neutral_btn"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Button.PrimaryOutline"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginRight="8dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/buttons_guideline"
|
||||
app:strokeColor="@color/colorPrimary"
|
||||
android:text="@string/reset"/>
|
||||
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/positive_btn"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Button.PrimaryFull"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginRight="8dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="@id/buttons_guideline"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:text="@string/confirm"/>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
</layout>
|
||||
Loading…
x
Reference in New Issue
Block a user