Migliorie sul caricamento della lista di ordini di uscita

This commit is contained in:
Giuseppe Scorrano 2025-02-26 13:06:56 +01:00
parent b8c8a9d8ea
commit 6c621d5ca8
8 changed files with 178 additions and 124 deletions

View File

@ -41,15 +41,15 @@ public abstract class SectionedRecyclerViewAdapter<H extends RecyclerView.ViewHo
this.sharedPool = new RecyclerView.RecycledViewPool();
// Aumentiamo il pool di ViewHolder per tipo
sharedPool.setMaxRecycledViews(TYPE_HEADER, 50);
sharedPool.setMaxRecycledViews(TYPE_ITEM, 200);
sharedPool.setMaxRecycledViews(TYPE_HEADER, 500);
sharedPool.setMaxRecycledViews(TYPE_ITEM, 2000);
}
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
profiler = new RecyclerViewProfiler(recyclerView);
profiler.enableProfiling(false);
profiler.enableProfiling(true);
recyclerView.setRecycledViewPool(sharedPool);
@ -57,20 +57,20 @@ public abstract class SectionedRecyclerViewAdapter<H extends RecyclerView.ViewHo
if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
layoutManager.setItemPrefetchEnabled(true);
layoutManager.setInitialPrefetchItemCount(50);
// layoutManager.setInitialPrefetchItemCount(20);
}
// recyclerView.post(() -> {
// recyclerView.postDelayed(() -> {
// Precarica alcuni ViewHolder
// for (int i = 0; i < 25; i++) {
// for (int i = 0; i < 100; i++) {
// sharedPool.putRecycledView(
// createViewHolder(recyclerView, TYPE_HEADER));
// }
// for (int i = 0; i < 50; i++) {
// for (int i = 0; i < 100; i++) {
// sharedPool.putRecycledView(
// createViewHolder(recyclerView, TYPE_ITEM));
// }
// });
// }, 50);
}
protected static class Section {

View File

@ -4,6 +4,7 @@ import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -69,12 +70,12 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterViagg
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.OrdiniUscitaElencoFiltroViewModel;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.ui.OrdiniUscitaElencoAdapter;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.ui.OrdiniUscitaElencoListModel;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterCommessaLayoutView;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneActivity;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipView;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterCommessaLayoutView;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
@ -168,11 +169,11 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
mBindings.setView(this);
mBindings.setViewmodel(mViewModel);
this.initRecyclerView();
Log.d("onCreateView", "Started");
this.initBarcodeReader();
this.initFilters();
Log.d("onCreateView", "Ended");
return mBindings.getRoot();
}
@ -180,37 +181,41 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
public void onStart() {
super.onStart();
Log.d("onStart", "Started");
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), data -> {
executorService.execute(() -> {
try {
this.onLoadingStarted();
this.initMtbDepoCache();
this.initMtbGrupsCache();
this.initJtbComtCache();
handler.post(() -> {
mAppliedFilterViewModel.init(data);
this.refreshList(data, null);
});
mAppliedFilterViewModel.init(data);
this.refreshList(data, null);
this.onLoadingEnded();
} catch (Exception e) {
onError(e);
}
});
});
this.onLoadingStarted();
executorService.execute(() -> {
try {
this.initMtbDepoCache();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.init(codMdep, mCurrentGestioneOrd, mCurrentGestioneCol, mCurrentSegnoCol);
this.initRecyclerView();
this.initFilters();
this.onLoadingEnded();
} catch (Exception e) {
onError(e);
}
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.init(codMdep, mCurrentGestioneOrd, mCurrentGestioneCol, mCurrentSegnoCol, () -> {
this.onLoadingEnded();
});
Log.d("onStart", "Ended");
}
@Override
@ -227,52 +232,45 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
private void initRecyclerView() {
this.onLoadingStarted();
boolean canSelectMultipleOrdini = SettingsManager.iDB().isFlagSpedizioneCanSelectMultipleOrders();
boolean canSelectMultipleClienti = SettingsManager.iDB().isFlagMultiClienteOrdV();
executorService.execute(() -> {
OrdiniUscitaElencoAdapter ordiniUscitaElencoAdapter =
new OrdiniUscitaElencoAdapter(getActivity(), mOrdiniInevasiMutableData)
.setOnGroupItemClicked(x -> {
if (!canSelectMultipleClienti) {
Stream.of(mOrdiniInevasiMutableData)
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x) && y.getSelectedObservable().get())
.forEach(y -> y.getSelectedObservable().set(false));
}
boolean allSelected = Stream.of(mOrdiniInevasiMutableData)
.filter(y -> y.getGroupTitle().equalsIgnoreCase(x))
.allMatch(y -> y.getSelectedObservable().get());
OrdiniUscitaElencoAdapter ordiniUscitaElencoAdapter =
new OrdiniUscitaElencoAdapter(getActivity(), mOrdiniInevasiMutableData)
.setOnGroupItemClicked(x -> {
if (!canSelectMultipleClienti) {
Stream.of(mOrdiniInevasiMutableData)
.filter(y -> y.getGroupTitle().equalsIgnoreCase(x))
.forEach(y -> y.getSelectedObservable().set(!allSelected));
})
.setOnItemChecked(x -> {
if (!canSelectMultipleClienti && x.getSelectedObservable().get()) {
Stream.of(mOrdiniInevasiMutableData)
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x.getGroupTitle()) && y.getSelectedObservable().get())
.forEach(y -> y.getSelectedObservable().set(false));
}
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x) && y.getSelectedObservable().get())
.forEach(y -> y.getSelectedObservable().set(false));
}
fabVisible.set(Stream.of(mOrdiniInevasiMutableData)
.anyMatch(y -> y.getSelectedObservable().get()));
});
boolean allSelected = Stream.of(mOrdiniInevasiMutableData)
.filter(y -> y.getGroupTitle().equalsIgnoreCase(x))
.allMatch(y -> y.getSelectedObservable().get());
ordiniUscitaElencoAdapter
.setEmptyView(this.mBindings.ordiniVenditaEmptyView);
Stream.of(mOrdiniInevasiMutableData)
.filter(y -> y.getGroupTitle().equalsIgnoreCase(x))
.forEach(y -> y.getSelectedObservable().set(!allSelected));
})
.setOnItemChecked(x -> {
if (!canSelectMultipleClienti && x.getSelectedObservable().get()) {
Stream.of(mOrdiniInevasiMutableData)
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x.getGroupTitle()) && y.getSelectedObservable().get())
.forEach(y -> y.getSelectedObservable().set(false));
}
this.mBindings.venditaMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
this.mBindings.venditaMainList.setItemViewCacheSize(20);
this.mBindings.venditaMainList.setAdapter(ordiniUscitaElencoAdapter);
fabVisible.set(Stream.of(mOrdiniInevasiMutableData)
.anyMatch(y -> y.getSelectedObservable().get()));
});
ordiniUscitaElencoAdapter
.setEmptyView(this.mBindings.ordiniVenditaEmptyView);
this.mBindings.venditaMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
this.mBindings.venditaMainList.setItemViewCacheSize(20);
this.mBindings.venditaMainList.setAdapter(ordiniUscitaElencoAdapter);
});
this.onLoadingEnded();
// if (mToolbar != null)
// mToolbar.setRecyclerView(this.mBindings.venditaMainList);
@ -756,13 +754,11 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
var list = convertDataModelToListModel(tmpList);
handler.post(() -> {
this.mOrdiniInevasiMutableData.clear();
this.mOrdiniInevasiMutableData.addAll(list);
this.mOrdiniInevasiMutableData.clear();
this.mOrdiniInevasiMutableData.addAll(list);
fabVisible.set(mOrdiniInevasiMutableData.stream()
.anyMatch(y -> y.getSelectedObservable().get()));
});
fabVisible.set(mOrdiniInevasiMutableData.stream()
.anyMatch(y -> y.getSelectedObservable().get()));
}
private List<OrdiniUscitaElencoListModel> convertDataModelToListModel(List<OrdiniUscitaElencoDTO> dataList) {

View File

@ -1,5 +1,9 @@
package it.integry.integrywmsnative.gest.ordini_uscita_elenco;
import android.os.Handler;
import java.util.concurrent.ExecutorService;
import javax.inject.Singleton;
import dagger.Module;
@ -20,8 +24,8 @@ public class OrdiniUscitaElencoModule {
}
@Provides
OrdiniUscitaElencoViewModel providesProdOrdineLavorazioneElencoViewModel(OrdiniRESTConsumer ordiniRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, OrdiniUscitaElencoRESTConsumer ordiniUscitaElencoRESTConsumer) {
return new OrdiniUscitaElencoViewModel(ordiniRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer, ordiniUscitaElencoRESTConsumer);
OrdiniUscitaElencoViewModel providesProdOrdineLavorazioneElencoViewModel(Handler handler, ExecutorService executorService, OrdiniRESTConsumer ordiniRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, OrdiniUscitaElencoRESTConsumer ordiniUscitaElencoRESTConsumer) {
return new OrdiniUscitaElencoViewModel(handler, executorService, ordiniRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer, ordiniUscitaElencoRESTConsumer);
}
}

View File

@ -9,6 +9,7 @@ import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
import javax.inject.Inject;
@ -39,6 +40,8 @@ public class OrdiniUscitaElencoViewModel {
private final MutableLiveData<List<OrdiniUscitaElencoDTO>> mOrderList = new MutableLiveData<>();
private final android.os.Handler mHandler;
private final ExecutorService executorService;
private final OrdiniRESTConsumer mOrdiniRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
@ -51,7 +54,14 @@ public class OrdiniUscitaElencoViewModel {
private int mCurrentSegnoCol;
@Inject
public OrdiniUscitaElencoViewModel(OrdiniRESTConsumer ordiniRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, OrdiniUscitaElencoRESTConsumer ordiniUscitaElencoRESTConsumer) {
public OrdiniUscitaElencoViewModel(android.os.Handler handler,
ExecutorService executorService,
OrdiniRESTConsumer ordiniRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
OrdiniUscitaElencoRESTConsumer ordiniUscitaElencoRESTConsumer) {
this.mHandler = handler;
this.executorService = executorService;
this.mOrdiniRESTConsumer = ordiniRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
@ -59,37 +69,36 @@ public class OrdiniUscitaElencoViewModel {
}
public void init(String currentCodMdep, GestioneEnum gestioneOrd, GestioneEnum gestioneCol, int segnoCol) throws Exception {
public void init(String currentCodMdep, GestioneEnum gestioneOrd, GestioneEnum gestioneCol, int segnoCol, Runnable onComplete) {
this.mCurrentCodMdep = currentCodMdep;
this.mCurrentGestioneOrd = gestioneOrd;
this.mCurrentGestioneCol = gestioneCol;
this.mCurrentSegnoCol = segnoCol;
// Date loadingStartDate = new Date();
var ordiniLavorazione = this.mOrdiniRESTConsumer.getOrdiniInevasiSynchronized(this.mCurrentCodMdep, mCurrentGestioneOrd);
executorService.execute(() -> {
var orderList = ordiniLavorazione.parallelStream()
.map(x -> {
try {
return OrdiniUscitaElencoDTO.fromParent(x);
} catch (Exception ex) {
return null;
}
})
.filter(Objects::nonNull)
.collect(Collectors.toList());
List<OrdineUscitaInevasoDTO> ordiniLavorazione = null;
try {
ordiniLavorazione = this.mOrdiniRESTConsumer.getOrdiniInevasiSynchronized(this.mCurrentCodMdep, mCurrentGestioneOrd);
this.mOrderList.postValue(orderList);
var orderList = ordiniLavorazione.parallelStream()
.map(x -> {
try {
return OrdiniUscitaElencoDTO.fromParent(x);
} catch (Exception ex) {
return null;
}
})
.filter(Objects::nonNull)
.collect(Collectors.toList());
// long forcedDelaySecs = (new Date().getTime() - loadingStartDate.getTime()) / 1000;
//
// if (2 - forcedDelaySecs > 0) {
// try {
// Thread.sleep((2 - forcedDelaySecs) * 1000);
// } catch (Exception ignored) {
// }
// }
this.mOrderList.postValue(orderList);
onComplete.run();
} catch (Exception e) {
this.sendError(e);
}
});
}

View File

@ -9,9 +9,11 @@ import com.annimon.stream.function.Predicate;
import org.apache.commons.lang3.time.DateUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import it.integry.integrywmsnative.core.model.JtbComt;
import it.integry.integrywmsnative.core.model.MtbDepo;
@ -44,7 +46,7 @@ public class OrdiniUscitaElencoFiltroViewModel {
public void init(List<OrdiniUscitaElencoDTO> initialList) {
this.initialOrderList = initialList;
this.currentFilteredOrderList.postValue(this.initialOrderList);
this.currentFilteredOrderList.setValue(this.initialOrderList);
}
public MutableLiveData<List<OrdiniUscitaElencoDTO>> getMutableFilteredOrderList() {
@ -349,13 +351,12 @@ public class OrdiniUscitaElencoFiltroViewModel {
public List<Integer> getAllNumOrds() {
return Stream
.of(Objects.requireNonNull(initialOrderList))
return Objects.requireNonNull(initialOrderList).parallelStream()
.filter(x -> x.getNumOrd() != null)
.sortBy(x -> -x.getNumOrd())
.sorted(Comparator.comparing(OrdineInevasoDTO::getNumOrd))
.map(x -> x.getNumOrd() != null ? x.getNumOrd() : null)
.distinct()
.toList();
.collect(Collectors.toList());
}
public List<Integer> getAvailableNumOrds() {

View File

@ -34,6 +34,29 @@ public class OrdiniUscitaElencoAdapter extends ExtendedSectionedRecyclerViewNew<
private RunnableArgs<String> mOnGroupItemClicked;
private RunnableArgs<OrdiniUscitaElencoListModel> mOnItemChecked;
private final int transparentColor;
public OrdiniUscitaElencoAdapter(Context context, ObservableArrayList<OrdiniUscitaElencoListModel> mutableDataSet) {
super(mutableDataSet);
mContext = context;
layoutInflater = LayoutInflater.from(mContext);
transparentColor = ResourcesCompat.getColor(mContext.getResources(), android.R.color.transparent, null);
// asyncLayoutInflater = new AsyncLayoutInflater(mContext);
mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback<OrdiniUscitaElencoListModel>() {
@Override
public void onChanged(ObservableList<OrdiniUscitaElencoListModel> sender) {
Map<String, List<OrdiniUscitaElencoListModel>> collect = sender.stream()
.collect(Collectors.groupingBy(OrdiniUscitaElencoListModel::getGroupTitle));
String[] keyArray = new String[collect.keySet().size()];
collect.keySet().toArray(keyArray);
setSections(Arrays.asList(keyArray), collect);
}
});
}
static class SubheaderHolder extends RecyclerView.ViewHolder {
@ -57,27 +80,6 @@ public class OrdiniUscitaElencoAdapter extends ExtendedSectionedRecyclerViewNew<
}
}
public OrdiniUscitaElencoAdapter(Context context, ObservableArrayList<OrdiniUscitaElencoListModel> mutableDataSet) {
super(mutableDataSet);
mContext = context;
layoutInflater = LayoutInflater.from(mContext);
// asyncLayoutInflater = new AsyncLayoutInflater(mContext);
mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback<OrdiniUscitaElencoListModel>() {
@Override
public void onChanged(ObservableList<OrdiniUscitaElencoListModel> sender) {
Map<String, List<OrdiniUscitaElencoListModel>> collect = sender.stream()
.collect(Collectors.groupingBy(OrdiniUscitaElencoListModel::getGroupTitle));
String[] keyArray = new String[collect.keySet().size()];
collect.keySet().toArray(keyArray);
setSections(Arrays.asList(keyArray), collect);
}
});
}
public OrdiniUscitaElencoAdapter setOnGroupItemClicked(RunnableArgs<String> onGroupItemClicked) {
this.mOnGroupItemClicked = onGroupItemClicked;
return this;
@ -126,25 +128,25 @@ public class OrdiniUscitaElencoAdapter extends ExtendedSectionedRecyclerViewNew<
if (listModel.getEtichettaColor() != null)
holder.mBinding.emptyView.setBackgroundColor(listModel.getEtichettaColor());
else
holder.mBinding.emptyView.setBackgroundColor(ResourcesCompat.getColor(mContext.getResources(), android.R.color.transparent, null));
holder.mBinding.emptyView.setBackgroundColor(transparentColor);
if (!UtilityString.isNullOrEmpty(listModel.getDescription())) {
holder.mBinding.descrizione.setText(Html.fromHtml(listModel.getDescription()));
holder.mBinding.descrizione.setText(listModel.getDescriptionSpanned());
holder.mBinding.descrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.descrizione.setVisibility(View.GONE);
if (!UtilityString.isNullOrEmpty(listModel.getSubDescription())) {
holder.mBinding.subDescrizione.setText(Html.fromHtml(listModel.getSubDescription()));
holder.mBinding.subDescrizione.setText(listModel.getSubDescriptionSpanned());
holder.mBinding.subDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.subDescrizione.setVisibility(View.GONE);
if (!UtilityString.isNullOrEmpty(listModel.getRightDescription())) {
holder.mBinding.rightDescrizione.setText(Html.fromHtml(listModel.getRightDescription()));
holder.mBinding.rightDescrizione.setText(listModel.getRightDescriptionSpanned());
holder.mBinding.rightDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.rightDescrizione.setVisibility(View.GONE);
if (!UtilityString.isNullOrEmpty(listModel.getRightSubDescription())) {
holder.mBinding.rightSubDescrizione.setText(Html.fromHtml(listModel.getRightSubDescription()));
holder.mBinding.rightSubDescrizione.setText(listModel.getRightSubDescriptionSpanned());
holder.mBinding.rightSubDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.rightSubDescrizione.setVisibility(View.GONE);

View File

@ -1,5 +1,8 @@
package it.integry.integrywmsnative.gest.ordini_uscita_elenco.ui;
import android.text.Html;
import android.text.Spanned;
import androidx.annotation.ColorInt;
import it.integry.integrywmsnative.core.di.BindableBoolean;
@ -13,6 +16,11 @@ public class OrdiniUscitaElencoListModel implements Cloneable {
private String rightDescription;
private String rightSubDescription;
private Spanned descriptionSpanned;
private Spanned subDescriptionSpanned;
private Spanned rightDescriptionSpanned;
private Spanned rightSubDescriptionSpanned;
private @ColorInt Integer etichettaColor;
private boolean hidden;
@ -37,6 +45,7 @@ public class OrdiniUscitaElencoListModel implements Cloneable {
public OrdiniUscitaElencoListModel setDescription(String description) {
this.description = description;
this.descriptionSpanned = description != null ? Html.fromHtml(description) : null;
return this;
}
@ -46,6 +55,7 @@ public class OrdiniUscitaElencoListModel implements Cloneable {
public OrdiniUscitaElencoListModel setSubDescription(String subDescription) {
this.subDescription = subDescription;
this.subDescriptionSpanned = subDescription != null ? Html.fromHtml(subDescription) : null;
return this;
}
@ -55,6 +65,7 @@ public class OrdiniUscitaElencoListModel implements Cloneable {
public OrdiniUscitaElencoListModel setRightDescription(String rightDescription) {
this.rightDescription = rightDescription;
this.rightDescriptionSpanned = rightDescription != null ? Html.fromHtml(rightDescription) : null;
return this;
}
@ -64,6 +75,7 @@ public class OrdiniUscitaElencoListModel implements Cloneable {
public OrdiniUscitaElencoListModel setRightSubDescription(String rightSubDescription) {
this.rightSubDescription = rightSubDescription;
this.rightSubDescriptionSpanned = rightSubDescription != null ? Html.fromHtml(rightSubDescription) : null;
return this;
}
@ -97,4 +109,20 @@ public class OrdiniUscitaElencoListModel implements Cloneable {
this.originalModel = originalModel;
return this;
}
public Spanned getDescriptionSpanned() {
return descriptionSpanned;
}
public Spanned getSubDescriptionSpanned() {
return subDescriptionSpanned;
}
public Spanned getRightDescriptionSpanned() {
return rightDescriptionSpanned;
}
public Spanned getRightSubDescriptionSpanned() {
return rightSubDescriptionSpanned;
}
}

View File

@ -74,7 +74,12 @@ public class DialogProgressView extends DialogFragment {
try {
if (!manager.isDestroyed() && !isAdded()) {
//manager.executePendingTransactions();
try {
manager.executePendingTransactions();
} catch (IllegalStateException e) {
//ignore
String a = "";
}
showNow(manager, "loading-dialog");
mBindings.progressBar.setIndeterminate(isIndeterminateProgress());
@ -91,7 +96,16 @@ public class DialogProgressView extends DialogFragment {
handler.post(() -> {
if (isAdded()) {
dismissAllowingStateLoss();
if (!getParentFragmentManager().isDestroyed()) {
try {
getParentFragmentManager().executePendingTransactions();
} catch (IllegalStateException e) {
//ignore
String a = "";
}
}
}
});
}