Kaynağa Gözat

0.0.45.beta16

kongzue 3 yıl önce
ebeveyn
işleme
46567fc2ca

+ 0 - 2
DialogX/src/main/java/com/kongzue/dialogx/dialogs/InputDialog.java

@@ -1,6 +1,5 @@
 package com.kongzue.dialogx.dialogs;
 
-import android.content.res.Configuration;
 import android.view.View;
 
 import androidx.annotation.ColorInt;
@@ -11,7 +10,6 @@ import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBindView;
 import com.kongzue.dialogx.interfaces.OnInputDialogButtonClickListener;
-import com.kongzue.dialogx.interfaces.OnInputDialogButtonClickListener;
 import com.kongzue.dialogx.util.InputInfo;
 import com.kongzue.dialogx.util.TextInfo;
 

+ 0 - 3
DialogX/src/main/java/com/kongzue/dialogx/dialogs/TipDialog.java

@@ -3,9 +3,6 @@ package com.kongzue.dialogx.dialogs;
 import android.app.Activity;
 
 import com.kongzue.dialogx.DialogX;
-import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
-
-import java.lang.ref.WeakReference;
 
 /**
  * @author: Kongzue

+ 10 - 22
DialogX/src/main/java/com/kongzue/dialogx/dialogs/WaitDialog.java

@@ -692,48 +692,36 @@ public class WaitDialog extends BaseDialog {
     }
     
     protected void showTip(TYPE type) {
+        if (readyTipType == type) {
+            return;
+        }
         showType = type.ordinal();
         readyTipType = type;
-        if (getDialogImpl() != null) getDialogImpl().showTip(type);
+        if (getDialogImpl() != null) {
+            getDialogImpl().showTip(type);
+        }
     }
     
     protected void setTip(TYPE type) {
-        showType = type.ordinal();
         readyTipType = type;
-        refreshUI();
-    }
-    
-    protected void setTip(Activity activity, int messageResId, TYPE type) {
-        showType = type.ordinal();
-        this.message = getString(messageResId);
-        readyTipType = type;
-        refreshUI();
+        showTip(readyTipType);
     }
     
     protected void setTip(CharSequence message, TYPE type) {
-        showType = type.ordinal();
         this.message = message;
-        readyTipType = type;
-        refreshUI();
-    }
-    
-    protected void setTip(Activity activity, CharSequence message, TYPE type) {
-        showType = type.ordinal();
-        this.message = message;
-        readyTipType = type;
+        showTip(type);
         refreshUI();
     }
     
     protected void setTip(int messageResId, TYPE type) {
-        showType = type.ordinal();
         this.message = getString(messageResId);
-        readyTipType = type;
+        showTip(type);
         refreshUI();
     }
     
     protected void setTipShowDuration(long tipShowDuration) {
         this.tipShowDuration = tipShowDuration;
-        refreshUI();
+        showTip(readyTipType);
     }
     
     public static CharSequence getMessage() {

+ 54 - 8
DialogX/src/main/java/com/kongzue/dialogx/interfaces/OnBindView.java

@@ -35,6 +35,31 @@ public abstract class OnBindView<D> {
         customView = LayoutInflater.from(BaseDialog.getTopActivity()).inflate(layoutResId, new RelativeLayout(BaseDialog.getTopActivity()), false);
     }
     
+    public OnBindView(int layoutResId, boolean async) {
+        if (BaseDialog.getTopActivity() == null) {
+            DialogX.error(ERROR_INIT_TIPS);
+            return;
+        }
+        this.layoutResId = layoutResId;
+        if (async) {
+            new Thread() {
+                @Override
+                public void run() {
+                    super.run();
+                    synchronized (OnBindView.this){
+                        customView = LayoutInflater.from(BaseDialog.getTopActivity()).inflate(layoutResId, new RelativeLayout(BaseDialog.getTopActivity()), false);
+                        if (waitBindRunnable != null) {
+                            waitBindRunnable.run();
+                            waitBindRunnable = null;
+                        }
+                    }
+                }
+            }.start();
+        } else {
+            customView = LayoutInflater.from(BaseDialog.getTopActivity()).inflate(layoutResId, new RelativeLayout(BaseDialog.getTopActivity()), false);
+        }
+    }
+    
     public OnBindView(View customView) {
         this.customView = customView;
     }
@@ -94,11 +119,14 @@ public abstract class OnBindView<D> {
     }
     
     @Deprecated
-    public OnBindView<D> bindParent(ViewGroup parentView) {
-        if (getCustomView() == null) return this;
+    public void bindParent(ViewGroup parentView) {
+        if (getCustomView() == null) {
+            waitBind(parentView, null);
+            return;
+        }
         if (getCustomView().getParent() != null) {
             if (getCustomView().getParent() == parentView) {
-                return this;
+                return;
             }
             ((ViewGroup) getCustomView().getParent()).removeView(getCustomView());
         }
@@ -107,14 +135,16 @@ public abstract class OnBindView<D> {
             lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
         }
         parentView.addView(getCustomView(), lp);
-        return this;
     }
     
-    public OnBindView<D> bindParent(ViewGroup parentView, BaseDialog dialog) {
-        if (getCustomView() == null) return this;
+    public void bindParent(ViewGroup parentView, BaseDialog dialog) {
+        if (getCustomView() == null) {
+            waitBind(parentView, null);
+            return;
+        }
         if (getCustomView().getParent() != null) {
             if (getCustomView().getParent() == parentView) {
-                return this;
+                return;
             }
             ((ViewGroup) getCustomView().getParent()).removeView(getCustomView());
         }
@@ -143,6 +173,22 @@ public abstract class OnBindView<D> {
                 }
             }
         });
-        return this;
+    }
+    
+    private Runnable waitBindRunnable;
+    
+    private void waitBind(ViewGroup parentView, BaseDialog dialog) {
+        waitBindRunnable = new Runnable() {
+            @Override
+            public void run() {
+                if (getCustomView() == null) {
+                    if (dialog == null) {
+                        bindParent(parentView);
+                    } else {
+                        bindParent(parentView, dialog);
+                    }
+                }
+            }
+        };
     }
 }

+ 0 - 1
DialogX/src/main/java/com/kongzue/dialogx/util/BottomDialogTouchEventInterceptor.java

@@ -2,7 +2,6 @@ package com.kongzue.dialogx.util;
 
 import android.animation.ObjectAnimator;
 import android.content.res.Resources;
-import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
 

+ 0 - 7
DialogX/src/main/java/com/kongzue/dialogx/util/BottomMenuArrayAdapter.java

@@ -5,23 +5,16 @@ import static com.kongzue.dialogx.interfaces.BaseDialog.useTextInfo;
 
 import android.content.Context;
 import android.content.res.ColorStateList;
-import android.graphics.Typeface;
-import android.graphics.drawable.StateListDrawable;
 import android.os.Build;
 import android.text.TextUtils;
-import android.util.Log;
-import android.util.TypedValue;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
-import android.widget.SimpleAdapter;
 import android.widget.Space;
 import android.widget.TextView;
 
-import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.dialogs.BottomMenu;
 

+ 0 - 3
DialogX/src/main/java/com/kongzue/dialogx/util/PopMenuArrayAdapter.java

@@ -5,18 +5,15 @@ import static com.kongzue.dialogx.interfaces.BaseDialog.useTextInfo;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.os.Build;
-import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
-import android.widget.LinearLayout;
 import android.widget.Space;
 import android.widget.TextView;
 
-import com.kongzue.dialogx.DialogX;
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.dialogs.PopMenu;
 

+ 0 - 7
DialogX/src/main/java/com/kongzue/dialogx/util/views/ActivityScreenShotImageView.java

@@ -5,23 +5,16 @@ import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
-import android.graphics.Paint;
 import android.graphics.Path;
 import android.graphics.Rect;
 import android.os.Build;
 import android.util.AttributeSet;
-import android.util.Log;
-import android.view.Display;
-import android.view.Gravity;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.Window;
-import android.view.WindowManager;
 import android.widget.FrameLayout;
 
 import androidx.appcompat.widget.AppCompatImageView;
 
-import com.kongzue.dialogx.dialogs.PopTip;
 import com.kongzue.dialogx.impl.ActivityLifecycleImpl;
 import com.kongzue.dialogx.interfaces.BaseDialog;
 import com.kongzue.dialogx.util.DialogXFloatingWindowActivity;

+ 0 - 8
DialogX/src/main/java/com/kongzue/dialogx/util/views/BottomDialogListView.java

@@ -1,20 +1,12 @@
 package com.kongzue.dialogx.util.views;
 
 import android.content.Context;
-import android.content.ContextWrapper;
 import android.content.res.Resources;
-import android.os.Build;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewParent;
 import android.widget.ListAdapter;
 import android.widget.ListView;
-import android.widget.ScrollView;
 
-import androidx.annotation.RequiresApi;
 import androidx.appcompat.view.ContextThemeWrapper;
 
 import com.kongzue.dialogx.dialogs.BottomDialog;

+ 0 - 1
DialogX/src/main/java/com/kongzue/dialogx/util/views/MaxLinearLayout.java

@@ -5,7 +5,6 @@ import static android.view.View.MeasureSpec.EXACTLY;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.View;
 import android.widget.LinearLayout;
 import android.widget.RelativeLayout;

+ 0 - 3
DialogX/src/main/java/com/kongzue/dialogx/util/views/MaxRelativeLayout.java

@@ -4,14 +4,11 @@ import android.animation.ValueAnimator;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
-import android.graphics.Color;
 import android.graphics.Paint;
 import android.os.Build;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewParent;
 import android.widget.RelativeLayout;
 import android.widget.ScrollView;
 

+ 0 - 1
DialogX/src/main/java/com/kongzue/dialogx/util/views/NoArticulatedProgressView.java

@@ -10,7 +10,6 @@ import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.RectF;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.HapticFeedbackConstants;
 import android.view.View;
 import android.view.animation.AccelerateDecelerateInterpolator;

+ 0 - 1
DialogX/src/main/java/com/kongzue/dialogx/util/views/PopMenuListView.java

@@ -2,7 +2,6 @@ package com.kongzue.dialogx.util.views;
 
 import android.content.Context;
 import android.util.AttributeSet;
-import android.view.View;
 import android.widget.ListView;
 
 /**

+ 14 - 18
DialogX/src/main/java/com/kongzue/dialogx/util/views/ProgressView.java

@@ -148,8 +148,9 @@ public class ProgressView extends View implements ProgressViewInterface {
         oval = new RectF(mCenterX - mRadius, mCenterY - mRadius, mCenterX + mRadius, mCenterY + mRadius);
     }
     
-    protected float oldAnimAngle;
     private int successStep = 0;
+    private float nowLoadingProgressValue;
+    private float nowLoadingProgressEndAngle;
     
     @Override
     protected void onDraw(Canvas canvas) {
@@ -164,9 +165,14 @@ public class ProgressView extends View implements ProgressViewInterface {
             return;
         }
         
-        float sweepAngle = (float) (halfSweepA * Math.sin(Math.toRadians(followRotateDegrees))) + halfSweepA + halfSweepAMinValue / 2;
         switch (status) {
             case STATUS_LOADING:
+                float sweepAngle = (float) (halfSweepA * Math.sin(Math.toRadians(followRotateDegrees))) + halfSweepA + halfSweepAMinValue / 2;
+                nowLoadingProgressValue = currentRotateDegrees - sweepAngle;
+                if (nowLoadingProgressValue < 0) {
+                    nowLoadingProgressValue = 360 + nowLoadingProgressValue;
+                }
+                nowLoadingProgressEndAngle = sweepAngle;
                 canvas.drawArc(oval, currentRotateDegrees, -sweepAngle, false, mPaint);
                 break;
             case STATUS_SUCCESS:
@@ -174,22 +180,13 @@ public class ProgressView extends View implements ProgressViewInterface {
             case STATUS_ERROR:
                 switch (successStep) {
                     case 0:
-                        canvas.drawArc(oval, currentRotateDegrees, -sweepAngle, false, mPaint);
-                        if ((currentRotateDegrees - sweepAngle) > 270) {
+                        nowLoadingProgressEndAngle = nowLoadingProgressEndAngle + 5;
+                        canvas.drawArc(oval, nowLoadingProgressValue, nowLoadingProgressEndAngle, false, mPaint);
+                        if (nowLoadingProgressEndAngle - 360 >= nowLoadingProgressValue) {
                             successStep = 1;
                         }
                         break;
                     case 1:
-                        float aimAngle = currentRotateDegrees > 270 ? currentRotateDegrees - 270 : 90 + currentRotateDegrees;
-                        canvas.drawArc(oval, 270, aimAngle, false, mPaint);
-                        if (oldAnimAngle > aimAngle && oldAnimAngle > 300) {
-                            successStep = 2;
-                            canvas.drawArc(oval, 0, 360, false, mPaint);
-                            break;
-                        }
-                        oldAnimAngle = aimAngle;
-                        break;
-                    case 2:
                         canvas.drawArc(oval, 0, 360, false, mPaint);
                         drawDoneMark(status, canvas);
                         break;
@@ -331,7 +328,7 @@ public class ProgressView extends View implements ProgressViewInterface {
                 @Override
                 public void run() {
                     tickStep = 0;
-                    successStep = 2;
+                    successStep = 1;
                     interpolator = new AccelerateDecelerateInterpolator();
                     status = STATUS_SUCCESS;
                 }
@@ -351,7 +348,7 @@ public class ProgressView extends View implements ProgressViewInterface {
                 @Override
                 public void run() {
                     tickStep = 0;
-                    successStep = 2;
+                    successStep = 1;
                     interpolator = new DecelerateInterpolator(2);
                     status = STATUS_WARNING;
                 }
@@ -371,7 +368,7 @@ public class ProgressView extends View implements ProgressViewInterface {
                 @Override
                 public void run() {
                     tickStep = 0;
-                    successStep = 2;
+                    successStep = 1;
                     interpolator = new DecelerateInterpolator(2);
                     status = STATUS_ERROR;
                 }
@@ -414,7 +411,6 @@ public class ProgressView extends View implements ProgressViewInterface {
     
     public void loading() {
         noShowLoading = false;
-        oldAnimAngle = 0;
         successStep = 0;
         line1X = 0;
         line1Y = 0;

+ 6 - 6
app/src/main/java/com/kongzue/dialogxdemo/activity/MainActivity.java

@@ -67,6 +67,7 @@ import com.kongzue.dialogxmaterialyou.style.MaterialYouStyle;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Random;
 
 @Layout(R.layout.activity_main)
 @DarkStatusBarTheme(true)
@@ -183,7 +184,7 @@ public class MainActivity extends BaseActivity {
         if (showBreak) {
             txtTitle.setText("显示Dialog时关闭Activity演示");
             MessageDialog.show("提示", "接下来会直接运行一个 WaitDialog,2 秒后直接关闭 Activity,并回到原 Activity,保证程序不会出现 WindowLeaked 错误。\n\n" +
-                            "Android 原生 AlertDialog 常出现因 Dialog 先于 Activity 关闭而导致此错误引发程序崩溃。\n\n" +
+                            "Android 原生 AlertDialog 常出现因 Activity 先于 Dialog 关闭而导致此错误引发程序崩溃。\n\n" +
                             "而使用 DialogX 构建的对话框不仅仅不会出现此问题,还可避免因句柄持续持有导致的内存泄漏。", "开始测试", "取消")
                     .setOkButton(new OnDialogButtonClickListener() {
                         @Override
@@ -406,7 +407,6 @@ public class MainActivity extends BaseActivity {
             public void onClick(View view) {
                 new InputDialog("标题", "正文内容", "确定", "取消", "正在输入的文字")
                         .setInputText("Hello World")
-                        .setCancelable(false)
                         .setOkButton(new OnInputDialogButtonClickListener<InputDialog>() {
                             @Override
                             public boolean onClick(InputDialog baseDialog, View v, String inputStr) {
@@ -433,7 +433,7 @@ public class MainActivity extends BaseActivity {
                     public void run() {
                         WaitDialog.dismiss();
                     }
-                }, 2000);
+                }, 1500);
             }
         });
         
@@ -463,7 +463,7 @@ public class MainActivity extends BaseActivity {
                     public void run() {
                         if (!closeFlag) TipDialog.show("完成!", WaitDialog.TYPE.SUCCESS);
                     }
-                }, 2000);
+                }, 1500 + new Random().nextInt(1000));
             }
         });
         
@@ -723,7 +723,7 @@ public class MainActivity extends BaseActivity {
             
             @Override
             public void onClick(View v) {
-                onBindView = new OnBindView<FullScreenDialog>(R.layout.layout_full_login) {
+                onBindView = new OnBindView<FullScreenDialog>(R.layout.layout_full_login, true) {
                     @Override
                     public void onBind(FullScreenDialog dialog, View v) {
                         btnCancel = v.findViewById(R.id.btn_cancel);
@@ -931,7 +931,7 @@ public class MainActivity extends BaseActivity {
         
         btnCancel.setText("取消");
         btnSubmit.setText("下一步");
-    
+        
         btnLicense.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {

+ 1 - 1
gradle.properties

@@ -19,5 +19,5 @@ android.useAndroidX=true
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 
-BUILD_VERSION=0.0.45.beta15
+BUILD_VERSION=0.0.45.beta16
 BUILD_VERSION_INT=44