ScanProgressDialog.java 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package com.datarecovery.master.dialog;
  2. import android.animation.Animator;
  3. import android.animation.AnimatorListenerAdapter;
  4. import android.animation.ValueAnimator;
  5. import android.content.Context;
  6. import android.view.animation.AccelerateDecelerateInterpolator;
  7. import androidx.annotation.NonNull;
  8. import androidx.lifecycle.LiveData;
  9. import androidx.lifecycle.MutableLiveData;
  10. import com.atmob.app.lib.base.BaseDialog;
  11. import com.datarecovery.master.R;
  12. import com.datarecovery.master.databinding.DialogScanProgressBinding;
  13. @BaseDialog.FullScreen(height = false)
  14. public class ScanProgressDialog extends BaseDialog<DialogScanProgressBinding> {
  15. private OnCancelListener onCancelListener;
  16. public ScanProgressDialog(@NonNull Context context, LiveData<Integer> totalDetectedCount) {
  17. super(context, R.style.Theme_Common_Dialog);
  18. setCancelable(false);
  19. binding.setCancelClick(v -> {
  20. if (onCancelListener != null)
  21. onCancelListener.onCancel();
  22. dismiss();
  23. });
  24. binding.setDetectedCount(totalDetectedCount);
  25. }
  26. public void setOnCancelListener(OnCancelListener onCancelListener) {
  27. this.onCancelListener = onCancelListener;
  28. }
  29. @Override
  30. public void show() {
  31. super.show();
  32. startProgress();
  33. }
  34. private void startProgress() {
  35. ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 99);
  36. valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
  37. valueAnimator.addUpdateListener(animation -> {
  38. float value = (float) valueAnimator.getAnimatedValue();
  39. binding.setPercentageValue(value);
  40. });
  41. valueAnimator.setDuration(1000 * 60 * 3);
  42. valueAnimator.start();
  43. }
  44. public void detectedFinish() {
  45. ValueAnimator valueAnimator = ValueAnimator.ofFloat(binding.getPercentageValue(), 100);
  46. valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
  47. valueAnimator.addUpdateListener(animation -> {
  48. float value = (float) valueAnimator.getAnimatedValue();
  49. binding.setPercentageValue(value);
  50. });
  51. valueAnimator.setDuration(2000);
  52. valueAnimator.start();
  53. valueAnimator.addListener(new AnimatorListenerAdapter() {
  54. @Override
  55. public void onAnimationEnd(Animator animation) {
  56. dismiss();
  57. }
  58. });
  59. }
  60. public interface OnCancelListener {
  61. void onCancel();
  62. }
  63. }