kongzue 3 лет назад
Родитель
Сommit
3a1033c3ad

+ 6 - 6
DialogX/src/main/java/com/kongzue/dialogx/dialogs/FullScreenDialog.java

@@ -108,7 +108,12 @@ public class FullScreenDialog extends BaseDialog {
         public MaxRelativeLayout bkg;
         public RelativeLayout boxCustom;
         public ScrollController scrollView;
-        
+    
+        public DialogImpl setScrollView(ScrollController scrollView) {
+            this.scrollView = scrollView;
+            return this;
+        }
+    
         public DialogImpl(View convertView) {
             if (convertView == null) return;
             imgZoomActivity = convertView.findViewById(R.id.img_zoom_activity);
@@ -524,9 +529,4 @@ public class FullScreenDialog extends BaseDialog {
         this.dialogImplMode = dialogImplMode;
         return this;
     }
-    
-    public FullScreenDialog setDurabilityDialogImplMode(DialogX.IMPL_MODE dialogImplMode) {
-        durabilityDialogImplMode = new DialogXImplModeAgent(dialogImplMode, this);
-        return this;
-    }
 }

+ 1 - 13
DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java

@@ -67,8 +67,7 @@ public abstract class BaseDialog {
     private static List<BaseDialog> runningDialogList;
     private WeakReference<View> dialogView;
     protected WeakReference<DialogFragmentImpl> ownDialogFragmentImpl;
-    protected DialogX.IMPL_MODE dialogImplMode;
-    protected static DialogXImplModeAgent durabilityDialogImplMode = null;
+    protected DialogX.IMPL_MODE dialogImplMode = DialogX.implIMPLMode;
     protected WeakReference<DialogXFloatingWindowActivity> floatingWindowActivity;
     
     public static void init(Context context) {
@@ -360,10 +359,6 @@ public abstract class BaseDialog {
             return;
         }
         final BaseDialog baseDialog = (BaseDialog) dialogView.getTag();
-        if (durabilityDialogImplMode!=null && durabilityDialogImplMode.getDialog() == baseDialog) {
-            durabilityDialogImplMode.recycle();
-            durabilityDialogImplMode = null;
-        }
         log(baseDialog.dialogKey() + ".dismiss");
         removeDialogToRunningList(baseDialog);
         if (baseDialog.dialogView != null) {
@@ -625,13 +620,6 @@ public abstract class BaseDialog {
             error("DialogX 所引用的 Style 不符合当前适用版本:" + DialogXStyle.styleVer + " 引入的 Style(" + style.getClass().getSimpleName() + ") 版本" + style.styleVer);
         }
         
-        if (dialogImplMode == null) {
-            if (durabilityDialogImplMode != null && durabilityDialogImplMode.getDialog() != null) {
-                dialogImplMode = durabilityDialogImplMode.getImplMode();
-            } else {
-                dialogImplMode = DialogX.implIMPLMode;
-            }
-        }
         if (dialogImplMode != DialogX.IMPL_MODE.VIEW && getContext() instanceof LifecycleOwner) {
             Lifecycle lifecycle = ((LifecycleOwner) getContext()).getLifecycle();
             lifecycle.addObserver(new LifecycleEventObserver() {

+ 8 - 3
DialogX/src/main/java/com/kongzue/dialogx/util/DialogXFloatingWindowActivity.java

@@ -1,6 +1,7 @@
 package com.kongzue.dialogx.util;
 
 import android.app.Activity;
+import android.content.Intent;
 import android.os.Build;
 import android.os.Bundle;
 import android.view.MotionEvent;
@@ -58,7 +59,7 @@ public class DialogXFloatingWindowActivity extends AppCompatActivity {
             @Override
             public boolean onTouch(View v, MotionEvent event) {
                 if (event.getAction() != MotionEvent.ACTION_CANCEL) {
-                    if (BaseDialog.getContext() != null) {
+                    if (BaseDialog.getContext() != null && !(BaseDialog.getContext() instanceof DialogXFloatingWindowActivity)) {
                         return ((Activity) BaseDialog.getContext()).dispatchTouchEvent(event);
                     }
                 }
@@ -96,7 +97,9 @@ public class DialogXFloatingWindowActivity extends AppCompatActivity {
     public void finish(String dialogXKey) {
         shownDialogXList.remove(dialogXKey);
         if (shownDialogXList.isEmpty()) {
-            dialogXFloatingWindowActivity.clear();
+            if (dialogXFloatingWindowActivity != null) {
+                dialogXFloatingWindowActivity.clear();
+            }
             dialogXFloatingWindowActivity = null;
             super.finish();
             int version = Integer.valueOf(Build.VERSION.SDK_INT);
@@ -107,7 +110,9 @@ public class DialogXFloatingWindowActivity extends AppCompatActivity {
     }
     
     public void finish() {
-        dialogXFloatingWindowActivity.clear();
+        if (dialogXFloatingWindowActivity != null) {
+            dialogXFloatingWindowActivity.clear();
+        }
         dialogXFloatingWindowActivity = null;
         super.finish();
         int version = Integer.valueOf(Build.VERSION.SDK_INT);

+ 4 - 3
DialogX/src/main/java/com/kongzue/dialogx/util/WindowUtil.java

@@ -49,7 +49,7 @@ public class WindowUtil {
     
     private static void showNow(Activity activity, View dialogView, boolean touchEnable) {
         FrameLayout rootLayout = new FrameLayout(activity);
-        rootLayout.addView(dialogView,new FrameLayout.LayoutParams(MATCH_PARENT,MATCH_PARENT));
+        rootLayout.addView(dialogView, new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));
         WindowManager manager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
         WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
         
@@ -65,8 +65,9 @@ public class WindowUtil {
             dialogView.setOnTouchListener(new View.OnTouchListener() {
                 @Override
                 public boolean onTouch(View v, MotionEvent event) {
-                    for (BaseDialog baseDialog : BaseDialog.getRunningDialogList()) {
-                        if (!(baseDialog instanceof PopTip) && !baseDialog.isCancelable() && baseDialog.getActivity() == activity) {
+                    for (int i = BaseDialog.getRunningDialogList().size() - 1; i >= 0; i--) {
+                        BaseDialog baseDialog = BaseDialog.getRunningDialogList().get(i);
+                        if (!(baseDialog instanceof PopTip)  && baseDialog.getActivity() == activity) {
                             if (baseDialog.getDialogView() == null) {
                                 return false;
                             }

+ 53 - 16
DialogX/src/main/java/com/kongzue/dialogx/util/views/ActivityScreenShotImageView.java

@@ -14,16 +14,20 @@ 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;
 
+import java.lang.ref.WeakReference;
+
 /**
  * @author: Kongzue
  * @github: https://github.com/kongzue/
@@ -61,7 +65,6 @@ public class ActivityScreenShotImageView extends AppCompatImageView {
         invalidate();
     }
     
-    
     @Override
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
         super.onLayout(changed, left, top, right, bottom);
@@ -113,35 +116,52 @@ public class ActivityScreenShotImageView extends AppCompatImageView {
     }
     
     private void doScreenshotActivityAndZoom() {
+        View contentView = getContentView();
+        if (contentView == null) {
+            return;
+        }
+        //先执行一次绘制,防止出现闪屏问题
+        if (!inited) drawViewImage(contentView);
+        contentView.post(new Runnable() {
+            @Override
+            public void run() {
+                //当view渲染完成后再次通知刷新一下界面(当旋转屏幕执行时,很可能出现渲染延迟的问题)
+                drawViewImage(contentView);
+                inited = true;
+            }
+        });
+    }
+    
+    private View getContentView() {
         Activity screenshotActivity = ActivityLifecycleImpl.getTopActivity();
         if (screenshotActivity == null) {
-            return;
+            return null;
         }
-        View activityView;
+//        for (int i = BaseDialog.getRunningDialogList().size() - 1; i >= 0; i--) {
+//            BaseDialog baseDialog = BaseDialog.getRunningDialogList().get(i);
+//            if (!(baseDialog instanceof PopTip) && baseDialog.getActivity() == activity) {
+//                if (baseDialog.getDialogView() == null) {
+//                    return false;
+//                }
+//                return baseDialog.getDialogView().dispatchTouchEvent(event);
+//            }
+//        }
         if (screenshotActivity instanceof DialogXFloatingWindowActivity) {
             if (((DialogXFloatingWindowActivity) screenshotActivity).isScreenshot()) {
-                activityView = (FrameLayout) screenshotActivity.getWindow().getDecorView();
+                return (FrameLayout) screenshotActivity.getWindow().getDecorView();
             } else {
-                activityView = BaseDialog.getRootFrameLayout();
                 ((DialogXFloatingWindowActivity) screenshotActivity).setScreenshot(true);
+                return BaseDialog.getRootFrameLayout();
             }
         } else {
-            activityView = BaseDialog.getRootFrameLayout();
+            return BaseDialog.getRootFrameLayout();
         }
-        //先执行一次绘制,防止出现闪屏问题
-        if (!inited) drawViewImage(activityView);
-        activityView.post(new Runnable() {
-            @Override
-            public void run() {
-                //当view渲染完成后再次通知刷新一下界面(当旋转屏幕执行时,很可能出现渲染延迟的问题)
-                drawViewImage(activityView);
-                inited = true;
-            }
-        });
     }
     
     private boolean inited = false;
     private boolean isScreenshotSuccess;
+    private WeakReference<View> contentView;
+    public static boolean hideContentView = false;
     
     private void drawViewImage(View view) {
         if (view.getWidth() == 0 || view.getHeight() == 0) return;
@@ -151,6 +171,23 @@ public class ActivityScreenShotImageView extends AppCompatImageView {
         view.setDrawingCacheEnabled(true);
         setImageBitmap(Bitmap.createBitmap(view.getDrawingCache(), 0, 0, view.getWidth(), view.getHeight()));
         view.destroyDrawingCache();
+        if (hideContentView) {
+            if (contentView != null && contentView.get() != null) {
+                contentView.get().setVisibility(VISIBLE);
+            }
+            View childView = ((ViewGroup) view).getChildAt(0);
+            childView.setVisibility(GONE);
+            contentView = new WeakReference<>(childView);
+        }
         isScreenshotSuccess = true;
     }
+    
+    @Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        if (contentView != null && contentView.get() != null && hideContentView) {
+            contentView.get().setVisibility(VISIBLE);
+            contentView.clear();
+        }
+    }
 }

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

@@ -240,6 +240,7 @@ public class MainActivity extends BaseActivity {
     private EditText editUserName;
     private RelativeLayout boxPassword;
     private EditText editPassword;
+    private TextView btnLicense;
     
     private TextView btnClose;
     private WebView webView;
@@ -738,6 +739,7 @@ public class MainActivity extends BaseActivity {
                         editUserName = v.findViewById(R.id.edit_userName);
                         boxPassword = v.findViewById(R.id.box_password);
                         editPassword = v.findViewById(R.id.edit_password);
+                        btnLicense = v.findViewById(R.id.btn_license);
                         
                         initFullScreenLoginDemo(dialog);
                     }
@@ -936,6 +938,14 @@ public class MainActivity extends BaseActivity {
         
         btnCancel.setText("取消");
         btnSubmit.setText("下一步");
+    
+        btnLicense.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                PopTip.show("点击用户服务条款");
+            }
+        });
+        
         btnSubmit.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {

+ 1 - 0
app/src/main/res/layout/layout_full_login.xml

@@ -153,6 +153,7 @@
                 android:textSize="13dp" />
 
             <TextView
+                android:id="@+id/btn_license"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="25dp"

+ 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.beta12
+BUILD_VERSION=0.0.45.beta13
 BUILD_VERSION_INT=44