package com.datarecovery.master.dialog; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.content.Context; import android.view.animation.AccelerateDecelerateInterpolator; import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import com.atmob.app.lib.base.BaseDialog; import com.datarecovery.master.R; import com.datarecovery.master.databinding.DialogScanProgressBinding; @BaseDialog.FullScreen(height = false) public class ScanProgressDialog extends BaseDialog { private OnCancelListener onCancelListener; public ScanProgressDialog(@NonNull Context context, LiveData totalDetectedCount) { super(context, R.style.Theme_Common_Dialog); setCancelable(false); binding.setCancelClick(v -> { if (onCancelListener != null) onCancelListener.onCancel(); dismiss(); }); binding.setDetectedCount(totalDetectedCount); } public void setOnCancelListener(OnCancelListener onCancelListener) { this.onCancelListener = onCancelListener; } @Override public void show() { super.show(); startProgress(); } private void startProgress() { ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 99); valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); valueAnimator.addUpdateListener(animation -> { float value = (float) valueAnimator.getAnimatedValue(); binding.setPercentageValue(value); }); valueAnimator.setDuration(1000 * 60 * 3); valueAnimator.start(); } public void detectedFinish() { ValueAnimator valueAnimator = ValueAnimator.ofFloat(binding.getPercentageValue(), 100); valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); valueAnimator.addUpdateListener(animation -> { float value = (float) valueAnimator.getAnimatedValue(); binding.setPercentageValue(value); }); valueAnimator.setDuration(2000); valueAnimator.start(); valueAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { dismiss(); } }); } public interface OnCancelListener { void onCancel(); } }