kongzue 3 éve
szülő
commit
5cda6e5074

+ 5 - 5
.idea/compiler.xml

@@ -2,11 +2,11 @@
 <project version="4">
   <component name="CompilerConfiguration">
     <bytecodeTargetLevel target="1.7">
-      <module name="DialogXDemo.app" target="1.8" />
-      <module name="DialogXDemo.DialogX" target="1.8" />
-      <module name="DialogXDemo.DialogXIOSStyle" target="1.8" />
-      <module name="DialogXDemo.DialogXKongzueStyle" target="1.8" />
-      <module name="DialogXDemo.DialogXMIUIStyle" target="1.8" />
+      <module name="DialogXDemo.app" target="11" />
+      <module name="DialogXDemo.DialogX" target="11" />
+      <module name="DialogXDemo.DialogXIOSStyle" target="11" />
+      <module name="DialogXDemo.DialogXKongzueStyle" target="11" />
+      <module name="DialogXDemo.DialogXMIUIStyle" target="11" />
       <module name="DialogXInterface" target="1.7" />
     </bytecodeTargetLevel>
   </component>

+ 1 - 2
.idea/gradle.xml

@@ -4,7 +4,7 @@
   <component name="GradleSettings">
     <option name="linkedExternalProjectsSettings">
       <GradleProjectSettings>
-        <option name="testRunner" value="PLATFORM" />
+        <option name="testRunner" value="GRADLE" />
         <option name="distributionType" value="DEFAULT_WRAPPED" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
         <option name="gradleJvm" value="1.8 (2)" />
@@ -20,7 +20,6 @@
           </set>
         </option>
         <option name="resolveModulePerSourceSet" value="false" />
-        <option name="useQualifiedModuleNames" value="true" />
       </GradleProjectSettings>
     </option>
   </component>

+ 10 - 2
.idea/misc.xml

@@ -1,5 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="DesignSurface">
+    <option name="filePathToZoomLevelMap">
+      <map>
+        <entry key="..\:/WorkSpace/Android/DialogXDemo/app/src/main/res/layout/activity_main.xml" value="0.5328205128205128" />
+      </map>
+    </option>
+  </component>
   <component name="MarkdownNavigator.ProfileManager" plain-text-search-scope="Project Files" />
   <component name="MarkdownProjectSettings" wasCopied="true">
     <PreviewSettings splitEditorLayout="SPLIT" splitEditorPreview="PREVIEW" useGrayscaleRendering="false" zoomFactor="1.0" maxImageWidth="0" showGitHubPageIfSynced="false" allowBrowsingInPreview="false" synchronizePreviewPosition="true" highlightPreviewType="NONE" highlightFadeOut="5" highlightOnTyping="true" synchronizeSourcePosition="true" verticallyAlignSourceAndPreviewSyncPosition="true" showSearchHighlightsInPreview="false" showSelectionInPreview="true" openRemoteLinks="true" replaceUnicodeEmoji="false" lastLayoutSetsDefault="false">
@@ -110,7 +117,7 @@
     </option>
     <option name="myNotNulls">
       <value>
-        <list size="14">
+        <list size="15">
           <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
           <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
           <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
@@ -125,11 +132,12 @@
           <item index="11" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.NonNull" />
           <item index="12" class="java.lang.String" itemvalue="io.reactivex.annotations.NonNull" />
           <item index="13" class="java.lang.String" itemvalue="io.reactivex.rxjava3.annotations.NonNull" />
+          <item index="14" class="java.lang.String" itemvalue="lombok.NonNull" />
         </list>
       </value>
     </option>
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="false" project-jdk-name="1.8 (2)" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8 (2)" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">

+ 0 - 13
.idea/runConfigurations.xml

@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="RunConfigurationProducerService">
-    <option name="ignoredProducers">
-      <set>
-        <option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
-      </set>
-    </option>
-  </component>
-</project>

+ 5 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomDialog.java

@@ -955,4 +955,9 @@ public class BottomDialog extends BaseDialog {
             getDialogView().setVisibility(View.GONE);
         }
     }
+    
+    @Override
+    protected void shutdown() {
+        dismiss();
+    }
 }

+ 5 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomMenu.java

@@ -1060,4 +1060,9 @@ public class BottomMenu extends BottomDialog {
     public SELECT_MODE getSelectMode() {
         return selectMode;
     }
+    
+    @Override
+    protected void shutdown() {
+        dismiss();
+    }
 }

+ 5 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/CustomDialog.java

@@ -495,4 +495,9 @@ public class CustomDialog extends BaseDialog {
             getDialogView().setVisibility(View.GONE);
         }
     }
+    
+    @Override
+    protected void shutdown() {
+        dismiss();
+    }
 }

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

@@ -450,4 +450,9 @@ public class FullScreenDialog extends BaseDialog {
             getDialogView().setVisibility(View.GONE);
         }
     }
+    
+    @Override
+    protected void shutdown() {
+        dismiss();
+    }
 }

+ 5 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/MessageDialog.java

@@ -1071,4 +1071,9 @@ public class MessageDialog extends BaseDialog {
         customExitAnimResId = exitResId;
         return this;
     }
+    
+    @Override
+    protected void shutdown() {
+        dismiss();
+    }
 }

+ 5 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopTip.java

@@ -924,4 +924,9 @@ public class PopTip extends BaseDialog {
         this.exitAnimResId = exitResId;
         return this;
     }
+    
+    @Override
+    protected void shutdown() {
+        dismiss();
+    }
 }

+ 5 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/WaitDialog.java

@@ -839,4 +839,9 @@ public class WaitDialog extends BaseDialog {
             getInstanceNotNull(activity).refreshUI();
         }
     }
+    
+    @Override
+    protected void shutdown() {
+        dismiss();
+    }
 }

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

@@ -251,12 +251,19 @@ public abstract class BaseDialog {
         return contextWeakReference.get();
     }
     
+    /**
+     * 自动执行,不建议自行调用此方法
+     *
+     * @hide
+     */
     public static void cleanContext() {
-        contextWeakReference.clear();
+        if (contextWeakReference != null) contextWeakReference.clear();
         contextWeakReference = null;
         System.gc();
     }
     
+    protected abstract void shutdown();
+    
     protected boolean cancelable = true;
     protected OnBackPressedListener onBackPressedListener;
     protected boolean isShow;
@@ -440,6 +447,18 @@ public abstract class BaseDialog {
     
     protected void cleanActivityContext() {
         if (ownActivity != null) ownActivity.clear();
+        ownActivity = null;
+    }
+    
+    public static void cleanAll(){
+        if (runningDialogList != null) {
+            CopyOnWriteArrayList<BaseDialog> copyOnWriteList = new CopyOnWriteArrayList<>(runningDialogList);
+            for (BaseDialog baseDialog : copyOnWriteList) {
+                if (baseDialog.isShow())baseDialog.shutdown();
+                baseDialog.cleanActivityContext();
+                runningDialogList.remove(baseDialog);
+            }
+        }
     }
     
     public static void recycleDialog(Activity activity) {
@@ -464,6 +483,20 @@ public abstract class BaseDialog {
                     }
                 }
                 break;
+            default:
+                if (runningDialogList != null) {
+                    CopyOnWriteArrayList<BaseDialog> copyOnWriteList = new CopyOnWriteArrayList<>(runningDialogList);
+                    for (BaseDialog baseDialog : copyOnWriteList) {
+                        if (baseDialog.getActivity() == activity) {
+                            baseDialog.cleanActivityContext();
+                            runningDialogList.remove(baseDialog);
+                        }
+                    }
+                }
+                break;
+        }
+        if (activity == getContext()) {
+            cleanContext();
         }
     }
     

+ 5 - 2
DialogX/src/main/java/com/kongzue/dialogx/util/views/ActivityScreenShotImageView.java

@@ -87,7 +87,7 @@ public class ActivityScreenShotImageView extends AppCompatImageView {
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
         
-        refreshImage();
+        if (isAttachedToWindow()) refreshImage();
     }
     
     private int screenWidth, screenHeight;
@@ -104,16 +104,19 @@ public class ActivityScreenShotImageView extends AppCompatImageView {
         if (BaseDialog.getRootFrameLayout() == null) return;
         final View view = BaseDialog.getRootFrameLayout().getChildAt(0);
         //先执行一次绘制,防止出现闪屏问题
-        drawViewImage(view);
+        if (!inited) drawViewImage(view);
         view.post(new Runnable() {
             @Override
             public void run() {
                 //当view渲染完成后再次通知刷新一下界面(当旋转屏幕执行时,很可能出现渲染延迟的问题)
                 drawViewImage(view);
+                inited = true;
             }
         });
     }
     
+    private boolean inited = false;
+    
     private void drawViewImage(View view) {
         view.destroyDrawingCache();
         view.setDrawingCacheEnabled(true);

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

@@ -66,6 +66,10 @@ public class MainActivity extends BaseActivity {
     private ImageView btnShare;
     private TextView txtTitle;
     private LinearLayout boxBody;
+    private RadioGroup grpMode;
+    private RadioButton rdoModeView;
+    private RadioButton rdoModeWindow;
+    private RadioButton rdoModeDialogFragment;
     private RadioGroup grpStyle;
     private RadioButton rdoMaterial;
     private RadioButton rdoIos;
@@ -107,6 +111,10 @@ public class MainActivity extends BaseActivity {
         btnShare = findViewById(R.id.btn_share);
         txtTitle = findViewById(R.id.txt_title);
         boxBody = findViewById(R.id.box_body);
+        grpMode = findViewById(R.id.grp_mode);
+        rdoModeView = findViewById(R.id.rdo_mode_view);
+        rdoModeWindow = findViewById(R.id.rdo_mode_window);
+        rdoModeDialogFragment = findViewById(R.id.rdo_mode_dialogFragment);
         grpStyle = findViewById(R.id.grp_style);
         rdoMaterial = findViewById(R.id.rdo_material);
         rdoIos = findViewById(R.id.rdo_ios);
@@ -172,6 +180,20 @@ public class MainActivity extends BaseActivity {
                     })
                     .setCancelable(false);
         }
+        
+        switch (DialogX.implIMPLMode){
+            case VIEW:
+                rdoModeView.setChecked(true);
+                break;
+            case WINDOW:
+                rdoModeWindow.setChecked(true);
+                break;
+            case DIALOG_FRAGMENT:
+                rdoModeDialogFragment.setChecked(true);
+                break;
+        }
+        
+        txtTitle.setText("Kongzue DialogX (" + BuildConfig.VERSION_NAME +")");
     }
     
     //用于模拟进度提示
@@ -201,6 +223,24 @@ public class MainActivity extends BaseActivity {
     
     @Override
     public void setEvents() {
+        grpMode.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(RadioGroup group, int checkedId) {
+                BaseDialog.cleanAll();
+                switch (checkedId){
+                    case R.id.rdo_mode_view:
+                        DialogX.implIMPLMode = DialogX.IMPL_MODE.VIEW;
+                        break;
+                    case R.id.rdo_mode_window:
+                        DialogX.implIMPLMode = DialogX.IMPL_MODE.WINDOW;
+                        break;
+                    case R.id.rdo_mode_dialogFragment:
+                        DialogX.implIMPLMode = DialogX.IMPL_MODE.DIALOG_FRAGMENT;
+                        break;
+                }
+            }
+        });
+        
         grpTheme.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
             @Override
             public void onCheckedChanged(RadioGroup group, int checkedId) {

+ 54 - 0
app/src/main/res/layout/activity_main.xml

@@ -112,6 +112,60 @@
                 android:paddingLeft="15dp"
                 android:paddingRight="15dp">
 
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="15dp"
+                    android:text="实现方式"
+                    android:textColor="#dc000000"
+                    android:textSize="14dp"
+                    android:textStyle="bold" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="2dp"
+                    android:text="请注意后两者属于测试阶段,且存在已知未解决bug。"
+                    android:textColor="#80000000"
+                    android:textSize="14dp" />
+
+                <RadioGroup
+                    android:id="@+id/grp_mode"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="5dp"
+                    android:layout_marginBottom="5dp"
+                    android:orientation="horizontal">
+
+                    <RadioButton
+                        android:id="@+id/rdo_mode_view"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:checked="true"
+                        android:padding="10dp"
+                        android:text="View"
+                        android:textColor="#7b000000"
+                        android:textSize="12dp" />
+
+                    <RadioButton
+                        android:id="@+id/rdo_mode_window"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:padding="10dp"
+                        android:text="Window"
+                        android:textColor="#7b000000"
+                        android:textSize="12dp" />
+
+                    <RadioButton
+                        android:id="@+id/rdo_mode_dialogFragment"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:padding="10dp"
+                        android:text="DialogFragment"
+                        android:textColor="#7b000000" />
+
+                </RadioGroup>
+
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"

+ 1 - 1
gradle.properties

@@ -18,5 +18,5 @@ android.useAndroidX=true
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 
-BUILD_VERSION=0.0.41.beta4
+BUILD_VERSION=0.0.41.beta5
 BUILD_VERSION_INT=40