Selaa lähdekoodia

0.0.49.beta21
- 修复 #394、#392 相关问题;
- 修复 #393 相关问题;

0.0.49.beta20
- 尝试修复 activity 处于全屏情况下可能存在的输入法弹出对话框无法上移的问题;

0.0.49.beta19
- 尝试修复 #387 #388 bug

0.0.49.beta18
- 尝试修复 #370 bug

0.0.49.beta17
- 修复<=API29的部分设备上存在的非安全区不回调的问题;
- 合并 #377 的 PR
- 其他问题修复

0.0.49.beta14 ready
- 修复 PopNotification 存在的显示位置错误问题;
- 修复 InputDialog 点击背景无法关闭的问题;
- 修复 FullScreenDialog 滑动错位问题;
- 修复 OnBindView 回调 view 不为 customView 的问题;

0.0.49.beta13
- FullScreenDialog 增加 maskColor 设置;
- 修复 IOS 主题下 MessageDialog 使用 build() 构建模式时无法设置背景颜色的问题;
- 修复 CustomDialog 设置 FullScreen 属性无效的问题;

0.0.49.beta12 ready
- 尝试修正 padding属性设置错误的bug(via @Matcha-xiaobin #356);
- 修复了 PopTip 在频繁弹出时某些已经显示的 PopTip 可能存在的导致异常显示在屏幕顶部的问题;
- BottomDialog 增加 setScrollableWhenContentLargeThanVisibleRange(boolean) 允许将自定义布局添加到对话框本身存在的 ScrollView 外,请注意此方法将会使自定义布局添加到 Title Text、Content(Message Text)之间;

0.0.49.beta11
- 修复部分已知问题;

0.0.49.beta10
- 完善 OnBindView 内部逻辑,当dialog和view相同时不重复执行onBind事件;
- WaitDialog新增onShow(DialogXRunnable)和onDismiss(DialogXRunnable);
- 尝试修复可能存在的问题;

0.0.49.beta9
- 菜单布局结构优化;

0.0.49.beta8
- 对话框内的 dialogView 引用进行了处理,以及 PopTip 的 baseView,减少在低版本安卓系统上出现内存泄漏的可能性
- FullScreenDialog 新增了方法 hideActivityContentView(boolean) 用于设置是否在显示 FullScreenDialog 时不对 activity 的界面内容进行渲染,这将提升一定的性能,此方法只可以在使用 build 方法构建且在执行show方法之前使用,但这将引发一些问题,例如输入法弹出时 FullScreenDialog 无法上浮等;
- 其他问题修复;

0.0.49.beta6
- 对 BottomMenu 的 setOkButton、setCancelButton、setOtherButton 提供了单独的 OnBottomMenuButtonClickListener 参数接口,可直接提供 BottomMenu 参数的 onClick 回调事件;
- BottomDialog/BottomMenu 新增 set/get OkTextInfo 和 OtherTextInfo 方法;
- 修复 DialogXBaseRelativeLayout 可能存在的嵌套循环调用 requestFocus() 方法的问题;
- 修复关于 WaitDialog 设置背景颜色不生效的问题;

0.0.49.beta5 ready
- ActivityScreenShotImageView 增加静态方法 useHardwareRenderingMode,开启可使用硬件加速渲染模式;
- 修复部分系统下 ActivityScreenShotImageView 在执行回收时触发的“Software rendering doesn't support hardware bitmaps.”异常;
- 其他问题修复;

0.0.49.beta4 ready
- 修复部分系统下 BlurRelativeLayout 或 BlurRelativeLayout 在执行回收时触发的“Calling RS with no Context active.”异常;
- ActivityScreenShotImageView 截图方案更新;

0.0.49.beta4 ready
- 修复在部分设备上由 DialogXBaseRelativeLayout 引发的 StackOverflowError,此问题猜测跟特定版本系统固件存在问题有关;

0.0.49.beta3
- 修复 ActivityScreenShotImageView 可能引发的“Software rendering doesn’t support hardware bitmaps” 异常;
- 修复 BottomDialog/FullScreenDialog 的滑动事件在内部存在 ScrollController 时,若触摸位置处于 ScrollController 布局外无法滑动对话框的问题;

0.0.49.beta2
- InputInfo新增方法:`getInputFilters()`、`setInputFilters(InputFilter[] inputFilters)`、`addInputFilter(InputFilter inputFilter)` 和 `removeInputFilter(InputFilter inputFilter)`(issues:332);
- 尝试性修复 DialogFragment 模式实现下的 WaitDialog 内存泄漏问题(issues:334);
- 修复关于DialogFragmentImpl引发的空指针问题此问题(issues:335);

0.0.49.beta1
- 修复 BlurRelativeLayout 和 BlurLinearLayout 在 iOS 主题下使用 DialogFragment 模式时存在的渲染宽度和高度 <=0 导致的异常(issues:324);
- 修复 IOS 主题下可能存在的 `RSInvalidStateException: Calling RS with no Context active` 异常问题(issues:327);
- 修复可能存在的高频启关对话框过程中,因UI未完成构建被关闭引发的空指针异常(issues:331);

Kongzue 1 vuosi sitten
vanhempi
commit
f35f9119e5

+ 27 - 8
DialogX/src/main/java/com/kongzue/dialogx/util/views/FitSystemBarUtils.java

@@ -4,6 +4,9 @@ package com.kongzue.dialogx.util.views;
 import static androidx.core.view.WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_CONTINUE_ON_SUBTREE;
 
 import android.app.Activity;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Rect;
@@ -155,6 +158,7 @@ public class FitSystemBarUtils {
         });
         //带平滑变化的,但是支支持android R及以上
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+            log("FitSystemBarUtils: setWindowInsetsAnimationCallback");
             ViewCompat.setWindowInsetsAnimationCallback(contentView,
                     new WindowInsetsAnimationCompat.Callback(DISPATCH_MODE_CONTINUE_ON_SUBTREE) {
 
@@ -164,6 +168,7 @@ public class FitSystemBarUtils {
                                 @NonNull WindowInsetsCompat insets,
                                 @NonNull List<WindowInsetsAnimationCompat> runningAnimations
                         ) {
+                            log("FitSystemBarUtils: setWindowInsetsAnimationCallback#onProgress: " + insets);
                             if (smoothPadding) {
                                 formatInsets(insets, new RelativePadding(initialPadding));
                             }
@@ -172,6 +177,7 @@ public class FitSystemBarUtils {
 
                         @Override
                         public void onEnd(@NonNull WindowInsetsAnimationCompat animation) {
+                            log("FitSystemBarUtils: setWindowInsetsAnimationCallback#onEnd ");
                             inSmoothingPadding = false;
                             super.onEnd(animation);
                         }
@@ -185,17 +191,17 @@ public class FitSystemBarUtils {
         }
 
         if (ViewCompat.isAttachedToWindow(contentView)) {
-            log("KONGZUE DEBUG DIALOGX FitSystemBarUtils: AttachedToWindow ok");
+            log("FitSystemBarUtils: AttachedToWindow ok");
             ViewCompat.requestApplyInsets(contentView);
         } else {
-            log("KONGZUE DEBUG DIALOGX FitSystemBarUtils: wait AttachedToWindow");
+            log("FitSystemBarUtils: wait AttachedToWindow");
             contentView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
                 @Override
                 public void onViewAttachedToWindow(View view) {
                     view.removeOnAttachStateChangeListener(this);
 
-                    log("KONGZUE DEBUG DIALOGX FitSystemBarUtils: onViewAttachedToWindow");
-                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH && Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
+                    log("FitSystemBarUtils: onViewAttachedToWindow");
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH && (Build.VERSION.SDK_INT < Build.VERSION_CODES.R || getAppTargetSDKVersion() < Build.VERSION_CODES.R)) {
                         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                             //修复<=API29的部分设备上存在的非安全区不回调的问题
                             View parentView = (View) view.getParent();
@@ -207,10 +213,10 @@ public class FitSystemBarUtils {
                                 public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                                     WindowInsets windowInsets = v.getRootView().getRootWindowInsets();
                                     if (windowInsets != null) {
-                                        log("    KONGZUE DEBUG DIALOGX FitSystemBarUtils: RootView get Insets");
+                                        log("    FitSystemBarUtils: RootView get Insets");
                                         formatInsets(WindowInsetsCompat.toWindowInsetsCompat(windowInsets), new RelativePadding(initialPadding));
                                     } else {
-                                        log("    KONGZUE DEBUG DIALOGX FitSystemBarUtils: RootView not get Insets");
+                                        log("    FitSystemBarUtils: RootView not get Insets");
                                     }
                                 }
                             };
@@ -290,7 +296,7 @@ public class FitSystemBarUtils {
             systemWindowInsetTop = systemBars.top;
         }
         if (isWrongInsets(systemBars)) {
-            log("    KONGZUE DEBUG DIALOGX FitSystemBarUtils: isWrongInsets try special mode...");
+            log("    FitSystemBarUtils: isWrongInsets try special mode...");
             switch (checkOrientationAndStatusBarSide()) {
                 case 0:
                     initialPadding.start = getStatusBarHeight();
@@ -521,10 +527,23 @@ public class FitSystemBarUtils {
                 int keypadHeight = screenHeight - r.bottom;
                 if (keypadHeight != specialModeImeHeight) {
                     specialModeImeHeight = keypadHeight;
-                    log("    KONGZUE DEBUG DIALOGX FitSystemBarUtils: specialModeImeHeight=" + specialModeImeHeight);
+                    log("    FitSystemBarUtils: specialModeImeHeight=" + specialModeImeHeight);
                     applyCallBack();
                 }
             }
         });
     }
+
+    private int getAppTargetSDKVersion() {
+        try {
+            Context context = BaseDialog.getApplicationContext();
+            PackageManager pm = context.getPackageManager();
+            ApplicationInfo applicationInfo = pm.getApplicationInfo(context.getPackageName(), 0);
+            int targetSdkVersion = applicationInfo.targetSdkVersion;
+            return targetSdkVersion;
+        } catch (PackageManager.NameNotFoundException e) {
+            e.printStackTrace();
+        }
+        return -1;
+    }
 }

+ 47 - 21
app/src/main/java/com/kongzue/dialogxdemo/activity/TestMainActivity.java

@@ -1,10 +1,17 @@
 package com.kongzue.dialogxdemo.activity;
 
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
 import android.widget.ImageView;
+import android.widget.TextView;
 
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
@@ -15,6 +22,7 @@ import androidx.core.view.WindowInsetsCompat;
 
 import com.kongzue.dialogx.dialogs.BottomDialog;
 import com.kongzue.dialogx.dialogs.CustomDialog;
+import com.kongzue.dialogx.dialogs.FullScreenDialog;
 import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
 import com.kongzue.dialogx.interfaces.OnBindView;
 import com.kongzue.dialogxdemo.R;
@@ -34,34 +42,52 @@ public class TestMainActivity extends AppCompatActivity {
 //                    .setCancelButton("取消", (dialog, v) -> false)
 //                    .setOkButton("确定", (dialog, v) -> false);
 
-            MainActivity mainActivity = MainActivity.getActivity(MainActivity.class);
-            CustomDialog.build(new OnBindView<CustomDialog>(R.layout.layout_custom_dialog) {
+            FullScreenDialog.show(new OnBindView<FullScreenDialog>(R.layout.layout_full_webview) {
+                private TextView btnClose;
+                private WebView webView;
+                @Override
+                public void onBind(final FullScreenDialog dialog, View v) {
+                    btnClose = v.findViewById(R.id.btn_close);
+                    webView = v.findViewById(R.id.webView);
+
+                    btnClose.setOnClickListener(new View.OnClickListener() {
                         @Override
-                        public void onBind(final CustomDialog dialog, View v) {
-                            ImageView btnOk;
-                            btnOk = v.findViewById(R.id.btn_ok);
-                            btnOk.setOnClickListener(new View.OnClickListener() {
-                                @Override
-                                public void onClick(View v) {
-                                    dialog.dismiss();
-                                }
-                            });
+                        public void onClick(View v) {
+                            dialog.dismiss();
                         }
-                    })
-                    .setDialogLifecycleCallback(new DialogLifecycleCallback<CustomDialog>() {
+                    });
+
+                    WebSettings webSettings = webView.getSettings();
+                    webSettings.setJavaScriptEnabled(true);
+                    webSettings.setLoadWithOverviewMode(true);
+                    webSettings.setUseWideViewPort(true);
+                    webSettings.setSupportZoom(false);
+                    webSettings.setAllowFileAccess(true);
+                    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
+                    webSettings.setLoadsImagesAutomatically(true);
+                    webSettings.setDefaultTextEncodingName("utf-8");
+
+                    webView.setWebViewClient(new WebViewClient() {
                         @Override
-                        public void onShow(CustomDialog dialog) {
-                            Log.e(">>>", "onShow " );
-                            super.onShow(dialog);
+                        public boolean shouldOverrideUrlLoading(WebView view, String url) {
+                            try {
+                                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+                                startActivity(intent);
+                            } catch (ActivityNotFoundException e) {
+                                e.printStackTrace();
+                            }
+                            return true;
                         }
 
                         @Override
-                        public void onDismiss(CustomDialog dialog) {
-                            Log.e(">>>", "onDismiss " );
-                            super.onDismiss(dialog);
+                        public void onPageFinished(WebView view, String url) {
+                            super.onPageFinished(view, url);
                         }
-                    })
-                    .show(mainActivity);
+                    });
+
+                    webView.loadUrl("https://github.com/kongzue/DialogX");
+                }
+            });
         });
     }
 }