From 55c3fc2eb9344eb3278b2690b32488d8a200adaa Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Fri, 8 Mar 2019 17:46:44 +0800 Subject: [PATCH 001/194] see 03/08 log --- CHANGELOG.md | 1 + config.gradle | 17 ++++++------- gradle.properties | 4 ++- .../com/blankj/launcher/pkg/MainActivity.kt | 2 +- .../pkg/src/main/res/layout/activity_main.xml | 18 ++++++------- lib/base/build.gradle | 6 ++--- .../java/com/blankj/lib/base/BaseActivity.kt | 2 +- .../com/blankj/lib/base/BaseApplication.kt | 2 +- .../com/blankj/lib/base/BaseDrawerActivity.kt | 6 ++--- .../java/com/blankj/lib/base/BaseFragment.kt | 6 ++--- .../blankj/lib/base/rv/BaseViewHolder.java | 4 +-- .../lib/base/rv/RecycleViewDivider.java | 10 ++++---- .../lib/base/rv/adapter/BaseAdapter.java | 6 ++--- .../lib/base/rv/adapter/SingleAdapter.java | 2 +- .../src/main/res/layout/activity_back.xml | 14 +++++------ .../src/main/res/layout/activity_drawer.xml | 6 ++--- subutil/lib/build.gradle | 6 ++--- .../blankj/subutil/util/LocationUtils.java | 2 +- .../com/blankj/subutil/util/PinyinUtils.java | 2 +- .../java/com/blankj/subutil/util/Utils.java | 4 +-- .../blankj/subutil/pkg/helper/DialogHelper.kt | 2 +- utilcode/lib/build.gradle | 8 +++--- utilcode/lib/project.properties | 2 +- .../utilcode/constant/MemoryConstants.java | 2 +- .../constant/PermissionConstants.java | 2 +- .../utilcode/constant/TimeConstants.java | 2 +- .../blankj/utilcode/util/ActivityUtils.java | 9 ++++--- .../blankj/utilcode/util/AntiShakeUtils.java | 5 ++-- .../com/blankj/utilcode/util/AppUtils.java | 5 ++-- .../com/blankj/utilcode/util/BarUtils.java | 11 ++++---- .../blankj/utilcode/util/BrightnessUtils.java | 5 ++-- .../utilcode/util/CacheDiskStaticUtils.java | 3 ++- .../blankj/utilcode/util/CacheDiskUtils.java | 3 ++- .../utilcode/util/CacheDoubleStaticUtils.java | 3 ++- .../utilcode/util/CacheDoubleUtils.java | 2 +- .../utilcode/util/CacheMemoryStaticUtils.java | 2 +- .../utilcode/util/CacheMemoryUtils.java | 4 +-- .../com/blankj/utilcode/util/ColorUtils.java | 12 ++++----- .../com/blankj/utilcode/util/CrashUtils.java | 4 +-- .../com/blankj/utilcode/util/DeviceUtils.java | 4 +-- .../blankj/utilcode/util/FragmentUtils.java | 21 ++++++++-------- .../com/blankj/utilcode/util/ImageUtils.java | 14 +++++------ .../com/blankj/utilcode/util/IntentUtils.java | 4 +-- .../com/blankj/utilcode/util/LogUtils.java | 8 +++--- .../blankj/utilcode/util/MetaDataUtils.java | 2 +- .../blankj/utilcode/util/NetworkUtils.java | 2 +- .../utilcode/util/NotificationUtils.java | 6 ++--- .../com/blankj/utilcode/util/ObjectUtils.java | 6 ++--- .../blankj/utilcode/util/PermissionUtils.java | 8 +++--- .../com/blankj/utilcode/util/PhoneUtils.java | 2 +- .../blankj/utilcode/util/ProcessUtils.java | 4 +-- .../com/blankj/utilcode/util/RegexUtils.java | 2 +- .../blankj/utilcode/util/ResourceUtils.java | 2 +- .../blankj/utilcode/util/SPStaticUtils.java | 2 +- .../com/blankj/utilcode/util/SPUtils.java | 2 +- .../com/blankj/utilcode/util/ScreenUtils.java | 5 ++-- .../blankj/utilcode/util/SnackbarUtils.java | 14 +++++------ .../com/blankj/utilcode/util/SpanUtils.java | 16 ++++++------ .../com/blankj/utilcode/util/StringUtils.java | 4 +-- .../com/blankj/utilcode/util/ThreadUtils.java | 7 +++--- .../com/blankj/utilcode/util/TimeUtils.java | 2 +- .../com/blankj/utilcode/util/ToastUtils.java | 10 ++++---- .../com/blankj/utilcode/util/UriUtils.java | 25 +++++++++++++------ .../java/com/blankj/utilcode/util/Utils.java | 2 +- .../blankj/utilcode/util/VibrateUtils.java | 2 +- .../blankj/utilcode/util/ObjectUtilsTest.java | 5 ++-- .../pkg/feature/activity/ActivityActivity.kt | 2 +- .../feature/activity/SubActivityActivity.kt | 2 +- .../feature/bar/BarStatusFragmentActivity.kt | 16 ++++++------ .../pkg/feature/fragment/ContainerFragment.kt | 6 ++--- .../pkg/feature/fragment/FragmentActivity.kt | 6 ++--- .../pkg/feature/image/ImageActivity.kt | 8 +++--- .../pkg/feature/snackbar/SnackbarActivity.kt | 2 +- .../utilcode/pkg/feature/span/SpanActivity.kt | 2 +- .../utilcode/pkg/feature/toast/CustomToast.kt | 2 +- .../pkg/feature/toast/ToastActivity.kt | 2 +- .../utilcode/pkg/helper/DialogHelper.kt | 2 +- .../main/res/layout/activity_adaptscreen.xml | 4 +-- .../res/layout/activity_adaptscreen_close.xml | 4 +-- .../layout/activity_adaptscreen_height.xml | 4 +-- .../res/layout/activity_adaptscreen_width.xml | 4 +-- .../layout/activity_bar_status_fragment.xml | 4 +-- .../src/main/res/layout/activity_fragment.xml | 2 +- .../src/main/res/layout/activity_image.xml | 2 +- 84 files changed, 241 insertions(+), 220 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8271c33548..a1706be701 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ +* `19/03/09` [fix] UriUtils#uri2File. * `19/03/08` [add] LogUtils support multi process. Publish v1.23.7. * `19/03/02` [fix] LogUtils#file. * `19/02/28` [fix] ImageUtils#calculateInSampleSize. Publish v1.23.6. diff --git a/config.gradle b/config.gradle index 57c3d35e99..106f066059 100644 --- a/config.gradle +++ b/config.gradle @@ -2,7 +2,7 @@ ext { applicationId = 'com.blankj.androidutilcode' appName = 'Util' - compileSdkVersion = 27 + compileSdkVersion = 28 minSdkVersion = 14 targetSdkVersion = 27 versionCode = 1_023_007 @@ -16,8 +16,8 @@ ext { // lib version kotlin_version = '1.3.0' - support_version = '27.1.1' leakcanary_version = '1.6.3' + androidx_version = '1.0.0' dep = [ plugin : [ @@ -30,19 +30,18 @@ ext { ], // lib - support : [ - appcompat_v7: "com.android.support:appcompat-v7:$support_version", - design : "com.android.support:design:$support_version", - multidex : "com.android.support:multidex:1.0.2", - ], - constraint : "com.android.support.constraint:constraint-layout:1.1.3", + appcompat : "androidx.appcompat:appcompat:$androidx_version", + design : "com.google.android.material:material:$androidx_version", + multidex : "androidx.multidex:multidex:2.0.1", + constraint : "androidx.constraintlayout:constraintlayout:1.1.3", + kotlin : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version", leakcanary : [ android : "com.squareup.leakcanary:leakcanary-android:$leakcanary_version", android_no_op : "com.squareup.leakcanary:leakcanary-android-no-op:$leakcanary_version", support_fragment: "com.squareup.leakcanary:leakcanary-support-fragment:$leakcanary_version" ], - free_proguard: "com.blankj:free-proguard:0.0.7", + free_proguard: "com.blankj:free-proguard:0.0.12", adapt_screen : "com.blankj:adapt-screen:0.0.3", gson : "com.google.code.gson:gson:2.8.2", diff --git a/gradle.properties b/gradle.properties index e98b0a89fc..ad5471a961 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,4 +17,6 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -#org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 \ No newline at end of file +#org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 +android.enableJetifier=true +android.useAndroidX=true \ No newline at end of file diff --git a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt index 27d29a032a..e6dc516ed6 100644 --- a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt +++ b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt @@ -2,7 +2,7 @@ package com.blankj.launcher.pkg import android.graphics.Color import android.os.Bundle -import android.support.v7.app.ActionBarDrawerToggle +import androidx.appcompat.app.ActionBarDrawerToggle import android.view.View import android.widget.ImageView import com.blankj.lib.base.BaseDrawerActivity diff --git a/launcher/pkg/src/main/res/layout/activity_main.xml b/launcher/pkg/src/main/res/layout/activity_main.xml index 3b31dafe32..ee8b62a6fa 100644 --- a/launcher/pkg/src/main/res/layout/activity_main.xml +++ b/launcher/pkg/src/main/res/layout/activity_main.xml @@ -1,17 +1,17 @@ - - - - - - + + - @@ -69,5 +69,5 @@ android:text="@string/sub_util" /> - - + + diff --git a/lib/base/build.gradle b/lib/base/build.gradle index bd369d23ee..8c6cb29835 100644 --- a/lib/base/build.gradle +++ b/lib/base/build.gradle @@ -7,9 +7,9 @@ dependencies { api project(':utilcode-lib') api project(':subutil-lib') - api dep.support.appcompat_v7 - api dep.support.design - api dep.support.multidex + api dep.appcompat + api dep.design + api dep.multidex api dep.constraint api dep.kotlin api dep.free_proguard diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.kt b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.kt index deb05718a9..b1b3086f14 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.kt +++ b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.kt @@ -2,7 +2,7 @@ package com.blankj.lib.base import android.app.Activity import android.os.Bundle -import android.support.v7.app.AppCompatActivity +import androidx.appcompat.app.AppCompatActivity import android.view.LayoutInflater import android.view.View import com.blankj.utilcode.util.AntiShakeUtils diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.kt b/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.kt index f3eb078f79..873c71fa49 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.kt +++ b/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.kt @@ -2,7 +2,7 @@ package com.blankj.lib.base import android.app.Application import android.content.Context -import android.support.multidex.MultiDex +import androidx.multidex.MultiDex import com.blankj.utilcode.util.AppUtils import com.blankj.utilcode.util.CrashUtils import com.blankj.utilcode.util.LogUtils diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.kt b/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.kt index a29cc60cc8..3514d2fdd3 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.kt +++ b/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.kt @@ -2,8 +2,8 @@ package com.blankj.lib.base import android.content.Intent import android.net.Uri -import android.support.annotation.StringRes -import android.support.v4.widget.DrawerLayout +import androidx.annotation.StringRes +import androidx.drawerlayout.widget.DrawerLayout import android.view.LayoutInflater import android.widget.FrameLayout import com.blankj.utilcode.util.ActivityUtils @@ -20,7 +20,7 @@ import kotlinx.android.synthetic.main.activity_drawer.* */ abstract class BaseDrawerActivity : BaseActivity() { - protected lateinit var mBaseDrawerRootLayout: DrawerLayout + protected lateinit var mBaseDrawerRootLayout: androidx.drawerlayout.widget.DrawerLayout protected lateinit var mBaseDrawerContainerView: FrameLayout override fun isSwipeBack(): Boolean { diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.kt b/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.kt index 42e7073529..3db893bea2 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.kt +++ b/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.kt @@ -3,8 +3,8 @@ package com.blankj.lib.base import android.app.Activity import android.content.Context import android.os.Bundle -import android.support.annotation.IdRes -import android.support.v4.app.Fragment +import androidx.annotation.IdRes +import androidx.fragment.app.Fragment import android.util.Log import android.view.LayoutInflater import android.view.View @@ -19,7 +19,7 @@ import com.blankj.utilcode.util.AntiShakeUtils * desc : base about v4-fragment * ``` */ -abstract class BaseFragment : Fragment(), IBaseView { +abstract class BaseFragment : androidx.fragment.app.Fragment(), IBaseView { companion object { private const val TAG = "BaseFragment" diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java index ee47e751f5..6441f8c1fd 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java +++ b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java @@ -1,7 +1,7 @@ package com.blankj.lib.base.rv; -import android.support.annotation.IdRes; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.IdRes; +import androidx.recyclerview.widget.RecyclerView; import android.util.SparseArray; import android.view.View; diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java b/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java index 3d2b90f302..dd20894e10 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java +++ b/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java @@ -5,11 +5,11 @@ import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; -import android.support.annotation.DrawableRes; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; -import android.support.v4.view.ViewCompat; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.core.view.ViewCompat; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import android.widget.LinearLayout; diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/BaseAdapter.java b/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/BaseAdapter.java index f5acee0bb3..b8cf5ae12d 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/BaseAdapter.java +++ b/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/BaseAdapter.java @@ -1,9 +1,9 @@ package com.blankj.lib.base.rv.adapter; import android.content.Context; -import android.support.annotation.LayoutRes; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/SingleAdapter.java b/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/SingleAdapter.java index 619c8fc688..b7e81b892b 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/SingleAdapter.java +++ b/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/SingleAdapter.java @@ -1,6 +1,6 @@ package com.blankj.lib.base.rv.adapter; -import android.support.annotation.LayoutRes; +import androidx.annotation.LayoutRes; import java.util.List; diff --git a/lib/base/src/main/res/layout/activity_back.xml b/lib/base/src/main/res/layout/activity_back.xml index 5747922950..848cc885fe 100644 --- a/lib/base/src/main/res/layout/activity_back.xml +++ b/lib/base/src/main/res/layout/activity_back.xml @@ -1,26 +1,26 @@ - - - - + - - - + + diff --git a/lib/base/src/main/res/layout/activity_drawer.xml b/lib/base/src/main/res/layout/activity_drawer.xml index 1fec3fc953..697e83f643 100644 --- a/lib/base/src/main/res/layout/activity_drawer.xml +++ b/lib/base/src/main/res/layout/activity_drawer.xml @@ -1,5 +1,5 @@ - - - + diff --git a/subutil/lib/build.gradle b/subutil/lib/build.gradle index a8b9264e6c..8f8aa8198f 100644 --- a/subutil/lib/build.gradle +++ b/subutil/lib/build.gradle @@ -1,7 +1,7 @@ apply { from "${rootDir.path}/config_lib.gradle" - plugin "tech.harmonysoft.oss.traute" +// plugin "tech.harmonysoft.oss.traute" plugin "com.github.dcendents.android-maven" plugin "com.jfrog.bintray" plugin "readme-sub" @@ -13,8 +13,8 @@ readme { } dependencies { - compileOnly dep.support.appcompat_v7 - compileOnly dep.support.design + compileOnly dep.appcompat + compileOnly dep.design api(dep.glide) { exclude group: "com.android.support" } diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java index 7ee8747902..0c177b534c 100755 --- a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java +++ b/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java @@ -11,7 +11,7 @@ import android.location.LocationProvider; import android.os.Bundle; import android.provider.Settings; -import android.support.annotation.RequiresPermission; +import androidx.annotation.RequiresPermission; import android.util.Log; import java.io.IOException; diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java index 22486b3a91..934408c65e 100644 --- a/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java +++ b/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java @@ -1,6 +1,6 @@ package com.blankj.subutil.util; -import android.support.v4.util.SimpleArrayMap; +import androidx.collection.SimpleArrayMap; /** *
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
index 9cbf4e06fd..91b336abcf 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
@@ -7,8 +7,8 @@
 import android.content.Context;
 import android.database.Cursor;
 import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
index 45e67a4a0d..9eba25c622 100644
--- a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
+++ b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
@@ -1,6 +1,6 @@
 package com.blankj.subutil.pkg.helper
 
-import android.support.v7.app.AlertDialog
+import androidx.appcompat.app.AlertDialog
 import com.blankj.subutil.pkg.R
 import com.blankj.utilcode.util.ActivityUtils
 import com.blankj.utilcode.util.PermissionUtils
diff --git a/utilcode/lib/build.gradle b/utilcode/lib/build.gradle
index 3570124816..41b0dacaa4 100644
--- a/utilcode/lib/build.gradle
+++ b/utilcode/lib/build.gradle
@@ -1,7 +1,7 @@
 apply {
     from "${rootDir.path}/config_lib.gradle"
 
-    plugin "tech.harmonysoft.oss.traute"
+//    plugin "tech.harmonysoft.oss.traute"
     plugin "com.github.dcendents.android-maven"
     plugin "com.jfrog.bintray"
     plugin "readme-core"
@@ -17,10 +17,10 @@ apply from: "${rootDir.path}/gradle/bintrayUploadAndroid.gradle"
 dependencies {
     compile dep.gson
 
-    compileOnly dep.support.appcompat_v7
-    compileOnly dep.support.design
+    compileOnly dep.appcompat
+    compileOnly dep.design
 
     testImplementation dep.junit
     testImplementation dep.robolectric
-    testImplementation dep.support.appcompat_v7
+    testImplementation dep.appcompat
 }
\ No newline at end of file
diff --git a/utilcode/lib/project.properties b/utilcode/lib/project.properties
index 22ae3b8603..d0f2a3f7e0 100644
--- a/utilcode/lib/project.properties
+++ b/utilcode/lib/project.properties
@@ -1,7 +1,7 @@
 #project
 project.name=UtilCode
 project.groupId=com.blankj
-project.artifactId=utilcode
+project.artifactId=utilcodex
 project.packaging=aar
 project.siteUrl=https://github.com/Blankj/AndroidUtilCode
 project.gitUrl=https://github.com/Blankj/AndroidUtilCode.git
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
index b68bfcb113..5c05c0163e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.constant;
 
-import android.support.annotation.IntDef;
+import androidx.annotation.IntDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
index 76f7e9a217..6db826e4ab 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
@@ -4,7 +4,7 @@
 import android.Manifest.permission;
 import android.annotation.SuppressLint;
 import android.os.Build;
-import android.support.annotation.StringDef;
+import androidx.annotation.StringDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
index 9932037bf8..45090576e3 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.constant;
 
-import android.support.annotation.IntDef;
+import androidx.annotation.IntDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
index 4b8a9a07b5..9dd16d6e48 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
@@ -10,15 +10,16 @@
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.annotation.AnimRes;
-import android.support.annotation.NonNull;
-import android.support.v4.app.ActivityOptionsCompat;
-import android.support.v4.util.Pair;
 import android.util.Log;
 import android.view.View;
 
 import java.util.List;
 
+import androidx.annotation.AnimRes;
+import androidx.annotation.NonNull;
+import androidx.core.app.ActivityOptionsCompat;
+import androidx.core.util.Pair;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
index 7e87e73474..ca9036225e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
@@ -1,9 +1,10 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
 import android.view.View;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
index 136f27b5ed..357c423fc6 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
@@ -17,8 +17,6 @@
 import android.net.Uri;
 import android.os.Build;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.v4.content.FileProvider;
 import android.util.Log;
 
 import java.io.File;
@@ -27,6 +25,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
index 7b5509b2b5..22178a5c20 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
@@ -8,11 +8,6 @@
 import android.graphics.Color;
 import android.graphics.Point;
 import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RequiresPermission;
-import android.support.v4.widget.DrawerLayout;
 import android.util.Log;
 import android.util.TypedValue;
 import android.view.Display;
@@ -27,6 +22,12 @@
 
 import java.lang.reflect.Method;
 
+import androidx.annotation.ColorInt;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
+import androidx.drawerlayout.widget.DrawerLayout;
+
 import static android.Manifest.permission.EXPAND_STATUS_BAR;
 
 /**
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
index f9344b0a59..bacc519540 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
@@ -2,11 +2,12 @@
 
 import android.content.ContentResolver;
 import android.provider.Settings;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
 import android.view.Window;
 import android.view.WindowManager;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
index bb48a4b5cf..c5a9a17a6d 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
@@ -3,13 +3,14 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
 
 import org.json.JSONArray;
 import org.json.JSONObject;
 
 import java.io.Serializable;
 
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
index 99aef6b078..2e6637febf 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
@@ -8,7 +8,6 @@
 import android.graphics.drawable.Drawable;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
 import com.blankj.utilcode.constant.CacheConstants;
@@ -37,6 +36,8 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
index 2ef267bd01..6dbb9f7475 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
@@ -3,13 +3,14 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
 
 import org.json.JSONArray;
 import org.json.JSONObject;
 
 import java.io.Serializable;
 
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
index c800423c78..aca1c25837 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
@@ -3,7 +3,7 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import com.blankj.utilcode.constant.CacheConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
index 56abfba117..aedcfa7fc4 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
index d0e06e394d..ddaa2baed9 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
@@ -1,7 +1,7 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
-import android.support.v4.util.LruCache;
+import androidx.annotation.NonNull;
+import androidx.collection.LruCache;
 
 import com.blankj.utilcode.constant.CacheConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
index 4c0c22232b..a6603cfc44 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
@@ -1,12 +1,12 @@
 package com.blankj.utilcode.util;
 
 import android.graphics.Color;
-import android.support.annotation.ColorInt;
-import android.support.annotation.ColorRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.ColorRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
index 9ef930c467..a096321cf4 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
@@ -5,8 +5,8 @@
 import android.content.pm.PackageManager;
 import android.os.Build;
 import android.os.Environment;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
 import android.util.Log;
 
 import java.io.BufferedWriter;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
index c1c2c3c76e..d0c1788a02 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
@@ -8,8 +8,8 @@
 import android.os.Build;
 import android.os.PowerManager;
 import android.provider.Settings;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
 import android.text.TextUtils;
 
 import java.io.File;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
index 43b8537e75..9e8ae14ef1 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
@@ -3,16 +3,6 @@
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.annotation.AnimRes;
-import android.support.annotation.AnimatorRes;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IdRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
 import android.util.Log;
 import android.view.View;
 
@@ -20,6 +10,17 @@
 import java.util.Collections;
 import java.util.List;
 
+import androidx.annotation.AnimRes;
+import androidx.annotation.AnimatorRes;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.IdRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
index 83e01eb1ad..cbee7dd4bd 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
@@ -27,13 +27,13 @@
 import android.renderscript.Element;
 import android.renderscript.RenderScript;
 import android.renderscript.ScriptIntrinsicBlur;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
 import android.view.View;
 
 import java.io.BufferedOutputStream;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
index 6faa37d043..1e26dc8a9a 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
@@ -8,8 +8,8 @@
 import android.os.Bundle;
 import android.provider.MediaStore;
 import android.provider.Settings;
-import android.support.annotation.RequiresPermission;
-import android.support.v4.content.FileProvider;
+import androidx.annotation.RequiresPermission;
+import androidx.core.content.FileProvider;
 
 import java.io.File;
 import java.util.ArrayList;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
index e1e2e78600..f5d814207d 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
@@ -12,10 +12,10 @@
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.RequiresApi;
-import android.support.v4.util.SimpleArrayMap;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.RequiresApi;
+import androidx.collection.SimpleArrayMap;
 import android.util.Log;
 
 import com.google.gson.Gson;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
index 6f6cf85b80..bd4b8da935 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
@@ -8,7 +8,7 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ServiceInfo;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
index f281d777c2..3171837f46 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
@@ -7,7 +7,7 @@
 import android.net.NetworkInfo;
 import android.net.wifi.WifiManager;
 import android.os.Build;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
 import android.telephony.TelephonyManager;
 import android.text.format.Formatter;
 import android.util.Log;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
index b8163d2e66..73a900b465 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
@@ -5,9 +5,9 @@
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
-import android.support.annotation.Nullable;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationManagerCompat;
+import androidx.annotation.Nullable;
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationManagerCompat;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
index be5491ece0..3c0c087a39 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
@@ -1,9 +1,9 @@
 package com.blankj.utilcode.util;
 
 import android.os.Build;
-import android.support.annotation.RequiresApi;
-import android.support.v4.util.LongSparseArray;
-import android.support.v4.util.SimpleArrayMap;
+import androidx.annotation.RequiresApi;
+import androidx.collection.LongSparseArray;
+import androidx.collection.SimpleArrayMap;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
index 235a0f3f94..1cb3df0156 100755
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
@@ -10,10 +10,10 @@
 import android.os.Build;
 import android.os.Bundle;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RequiresApi;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.WindowManager;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
index 99068781a4..f407f81b5f 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
@@ -7,7 +7,7 @@
 import android.content.pm.PackageManager;
 import android.net.Uri;
 import android.os.Build;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
 import android.telephony.SmsManager;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
index 7db75522d9..00c2bf6f73 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
@@ -10,8 +10,8 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
 import android.util.Log;
 
 import java.io.BufferedReader;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
index ba57fab956..817a94149f 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.v4.util.SimpleArrayMap;
+import androidx.collection.SimpleArrayMap;
 
 import com.blankj.utilcode.constant.RegexConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
index 92424163bb..ee41e95958 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.RawRes;
+import androidx.annotation.RawRes;
 
 import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
index d3e21fb873..21274c3023 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
@@ -1,7 +1,7 @@
 package com.blankj.utilcode.util;
 
 import android.content.SharedPreferences;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.util.Map;
 import java.util.Set;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
index 554a2ed586..a9d18a1a55 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
@@ -3,7 +3,7 @@
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.util.Collections;
 import java.util.HashMap;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
index c3e089a90f..f55e4a21db 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
@@ -7,12 +7,11 @@
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
-import android.graphics.Canvas;
 import android.graphics.Point;
 import android.os.Build;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
 import android.util.DisplayMetrics;
 import android.view.Surface;
 import android.view.View;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
index b164e6154e..eab1990d29 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
@@ -1,12 +1,12 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.design.widget.Snackbar;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import com.google.android.material.snackbar.Snackbar;
 import android.text.SpannableString;
 import android.text.Spanned;
 import android.text.style.ForegroundColorSpan;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
index 641204fd63..d79cf9262b 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
@@ -14,14 +14,14 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
 import android.text.Layout;
 import android.text.Layout.Alignment;
 import android.text.SpannableStringBuilder;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
index c3254e3d32..70f0defe50 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
@@ -1,8 +1,8 @@
 package com.blankj.utilcode.util;
 
 import android.content.res.Resources;
-import android.support.annotation.ArrayRes;
-import android.support.annotation.StringRes;
+import androidx.annotation.ArrayRes;
+import androidx.annotation.StringRes;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
index ba7122e366..819af790e8 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
@@ -2,9 +2,6 @@
 
 import android.os.Handler;
 import android.os.Looper;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 import android.util.Log;
 import android.util.SparseArray;
 
@@ -21,6 +18,10 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
index adaa920474..a5286b0fbe 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import com.blankj.utilcode.constant.TimeConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
index b4fe658945..b25360e52c 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
@@ -14,11 +14,11 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.StringRes;
-import android.support.v4.app.NotificationManagerCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.StringRes;
+import androidx.core.app.NotificationManagerCompat;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
index 98f3ef66a8..8e4fd9d09c 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
@@ -8,12 +8,14 @@
 import android.os.Environment;
 import android.provider.DocumentsContract;
 import android.provider.MediaStore;
-import android.support.annotation.NonNull;
-import android.support.v4.content.FileProvider;
+import android.text.TextUtils;
 import android.util.Log;
 
 import java.io.File;
 
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
+
 /**
  * 
  *     author: Blankj
@@ -70,12 +72,19 @@ public static File uri2File(@NonNull final Uri uri) {
                 Log.d("UriUtils", uri.toString() + " parse failed. -> 1");
                 return null;
             } else if ("com.android.providers.downloads.documents".equals(authority)) {
-                final String id = DocumentsContract.getDocumentId(uri);
-                final Uri contentUri = ContentUris.withAppendedId(
-                        Uri.parse("content://downloads/public_downloads"),
-                        Long.valueOf(id)
-                );
-                return getFileFromUri(contentUri, 2);
+                String id = DocumentsContract.getDocumentId(uri);
+                if (!TextUtils.isEmpty(id)) {
+                    if (id.startsWith("raw:")) {
+                        return new File(id.substring(4));
+                    }
+                    final Uri contentUri = ContentUris.withAppendedId(
+                            Uri.parse(Environment.DIRECTORY_DOWNLOADS),
+                            Long.valueOf(id)
+                    );
+                    return getFileFromUri(contentUri, 2);
+                }
+                Log.d("UriUtils", uri.toString() + " parse failed. -> 3");
+                return null;
             } else if ("com.android.providers.media.documents".equals(authority)) {
                 final String docId = DocumentsContract.getDocumentId(uri);
                 final String[] split = docId.split(":");
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
index 52b82376e1..d858e4ad22 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
@@ -7,7 +7,7 @@
 import android.app.Application.ActivityLifecycleCallbacks;
 import android.content.Context;
 import android.os.Bundle;
-import android.support.v4.content.FileProvider;
+import androidx.core.content.FileProvider;
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
index a57bbb8241..622d657817 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
@@ -2,7 +2,7 @@
 
 import android.content.Context;
 import android.os.Vibrator;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
 
 import static android.Manifest.permission.VIBRATE;
 
diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
index a0203f78fc..ed12c24d8d 100644
--- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
+++ b/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
@@ -1,7 +1,5 @@
 package com.blankj.utilcode.util;
 
-import android.support.v4.util.LongSparseArray;
-import android.support.v4.util.SimpleArrayMap;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
@@ -12,6 +10,9 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 
+import androidx.collection.LongSparseArray;
+import androidx.collection.SimpleArrayMap;
+
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
index 5ace21f5b1..f3d3600a27 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
@@ -6,7 +6,7 @@ import android.graphics.Bitmap
 import android.graphics.drawable.BitmapDrawable
 import android.os.Build
 import android.os.Bundle
-import android.support.v4.app.ActivityOptionsCompat
+import androidx.core.app.ActivityOptionsCompat
 import android.view.View
 import android.view.Window
 import com.blankj.lib.base.BaseTitleBarActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
index 4815032936..864f1c12b4 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
@@ -2,7 +2,7 @@ package com.blankj.utilcode.pkg.feature.activity
 
 import android.os.Build
 import android.os.Bundle
-import android.support.v4.app.ActivityCompat
+import androidx.core.app.ActivityCompat
 import android.view.View
 import android.view.Window
 import com.blankj.lib.base.BaseTitleBarActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
index b2633ddf5c..0dac18c72c 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
@@ -3,10 +3,10 @@ package com.blankj.utilcode.pkg.feature.bar
 import android.content.Context
 import android.content.Intent
 import android.os.Bundle
-import android.support.design.widget.BottomNavigationView
-import android.support.v4.app.Fragment
-import android.support.v4.app.FragmentPagerAdapter
-import android.support.v4.view.ViewPager
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentPagerAdapter
+import androidx.viewpager.widget.ViewPager
 import android.view.View
 import com.blankj.lib.base.BaseActivity
 import com.blankj.utilcode.pkg.R
@@ -37,7 +37,7 @@ class BarStatusFragmentActivity : BaseActivity() {
             R.id.barStatusFragmentNavigationCustom
     )
 
-    private val mFragmentList = ArrayList()
+    private val mFragmentList = ArrayList()
 
     private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener l@{ item ->
         when (item.itemId) {
@@ -78,8 +78,8 @@ class BarStatusFragmentActivity : BaseActivity() {
         mFragmentList.add(BarStatusCustomFragment.newInstance())
 
         barStatusFragmentVp.offscreenPageLimit = 3
-        barStatusFragmentVp.adapter = object : FragmentPagerAdapter(supportFragmentManager) {
-            override fun getItem(position: Int): Fragment {
+        barStatusFragmentVp.adapter = object : androidx.fragment.app.FragmentPagerAdapter(supportFragmentManager) {
+            override fun getItem(position: Int): androidx.fragment.app.Fragment {
                 return mFragmentList[position]
             }
 
@@ -88,7 +88,7 @@ class BarStatusFragmentActivity : BaseActivity() {
             }
         }
 
-        barStatusFragmentVp.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+        barStatusFragmentVp.addOnPageChangeListener(object : androidx.viewpager.widget.ViewPager.OnPageChangeListener {
             override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
 
             override fun onPageSelected(position: Int) {
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
index ca0289a158..117c7d121e 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
@@ -2,8 +2,8 @@ package com.blankj.utilcode.pkg.feature.fragment
 
 import android.os.Build
 import android.os.Bundle
-import android.support.annotation.RequiresApi
-import android.support.v4.app.Fragment
+import androidx.annotation.RequiresApi
+import androidx.fragment.app.Fragment
 import android.transition.*
 import android.view.View
 import com.blankj.lib.base.BaseLazyFragment
@@ -129,7 +129,7 @@ class ContainerFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener
         }
     }
 
-    private fun addSharedElement(fragment: Fragment): Fragment {
+    private fun addSharedElement(fragment: androidx.fragment.app.Fragment): androidx.fragment.app.Fragment {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             fragment.sharedElementEnterTransition = DetailTransition()
             fragment.enterTransition = Fade()
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
index b768f563e5..6e3137b9c6 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
@@ -4,8 +4,8 @@ import android.content.Context
 import android.content.Intent
 import android.os.Bundle
 import android.os.PersistableBundle
-import android.support.design.widget.BottomNavigationView
-import android.support.v4.app.Fragment
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import androidx.fragment.app.Fragment
 import android.view.View
 import com.blankj.lib.base.BaseActivity
 import com.blankj.utilcode.pkg.R
@@ -30,7 +30,7 @@ class FragmentActivity : BaseActivity() {
         }
     }
 
-    private val mFragments = arrayListOf()
+    private val mFragments = arrayListOf()
     private var curIndex: Int = 0
 
     private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
index 496c5a4032..636d92c030 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
@@ -6,9 +6,9 @@ import android.graphics.Bitmap
 import android.graphics.Color
 import android.os.Build
 import android.os.Bundle
-import android.support.annotation.LayoutRes
-import android.support.annotation.StringRes
-import android.support.v7.widget.LinearLayoutManager
+import androidx.annotation.LayoutRes
+import androidx.annotation.StringRes
+import androidx.recyclerview.widget.LinearLayoutManager
 import android.view.View
 import android.widget.ImageView
 import android.widget.TextView
@@ -92,7 +92,7 @@ class ImageActivity : BaseActivity() {
         }
 
         imageRv.adapter = ImageAdapter(mList, R.layout.item_image)
-        imageRv.layoutManager = LinearLayoutManager(this)
+        imageRv.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this)
     }
 
     override fun doBusiness() {}
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
index 4bd07d274e..34d3914fe1 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
@@ -4,7 +4,7 @@ import android.content.Context
 import android.content.Intent
 import android.graphics.Color
 import android.os.Bundle
-import android.support.annotation.StringRes
+import androidx.annotation.StringRes
 import android.text.SpannableStringBuilder
 import android.view.View
 import android.view.ViewGroup
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
index f3a1a3ee02..7c5fd45308 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
@@ -5,7 +5,7 @@ import android.content.Context
 import android.content.Intent
 import android.graphics.*
 import android.os.Bundle
-import android.support.annotation.ColorInt
+import androidx.annotation.ColorInt
 import android.text.Layout
 import android.text.SpannableStringBuilder
 import android.text.TextPaint
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
index 314ba33d59..458ecbb3fb 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
@@ -2,7 +2,7 @@ package com.blankj.utilcode.pkg.feature.toast
 
 import android.os.Handler
 import android.os.Looper
-import android.support.annotation.StringRes
+import androidx.annotation.StringRes
 import android.widget.TextView
 import android.widget.Toast
 
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
index ea6c10c24d..40055d14b9 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
@@ -4,7 +4,7 @@ import android.content.Context
 import android.content.Intent
 import android.graphics.Color
 import android.os.Bundle
-import android.support.v4.content.ContextCompat
+import androidx.core.content.ContextCompat
 import android.view.Gravity
 import android.view.View
 import com.blankj.lib.base.BaseTitleBarActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
index 7e6094414a..c3247b1312 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.pkg.helper
 
-import android.support.v7.app.AlertDialog
+import androidx.appcompat.app.AlertDialog
 import android.text.method.ScrollingMovementMethod
 import android.view.LayoutInflater
 import android.view.View
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
index 003c6f5840..e33848b84d 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
@@ -1,5 +1,5 @@
 
-
 
-
+
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
index c3f88ecba3..e43cbb2bb5 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
@@ -8,7 +8,7 @@
     android:background="@color/white"
     tools:context=".feature.adaptScreen.CloseAdaptActivity">
 
-    
 
@@ -42,6 +42,6 @@
             android:textSize="30pt"
             app:layout_constraintTop_toBottomOf="@id/adaptScreenCloseAdaptDpTv" />
 
-    
+    
 
 
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
index 0b207d97f5..07c76be55b 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
@@ -8,7 +8,7 @@
     android:background="@color/white"
     tools:context=".feature.adaptScreen.HeightActivity">
 
-    
 
@@ -94,6 +94,6 @@
         
 
 
-    
+    
 
 
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
index 46e0f2f1a2..5a791d924f 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
@@ -8,7 +8,7 @@
     android:background="@color/white"
     tools:context=".feature.adaptScreen.WidthActivity">
 
-    
 
@@ -147,6 +147,6 @@
 
         
 
-    
+    
 
 
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml b/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
index c5f975b58f..1a36770b58 100644
--- a/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
@@ -7,7 +7,7 @@
     android:background="@color/white"
     android:orientation="vertical">
 
-    
 
-    
 
-    
 
-    

From 70b6089109b6e58734d0a500820f54cb41858eba Mon Sep 17 00:00:00 2001
From: Blankj <625783482@qq.com>
Date: Fri, 8 Mar 2019 18:07:14 +0800
Subject: [PATCH 002/194] see 03/08 log

---
 utilcode/README-CN.md | 3 +++
 utilcode/README.md    | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/utilcode/README-CN.md b/utilcode/README-CN.md
index f3756be966..7fc06ebf99 100644
--- a/utilcode/README-CN.md
+++ b/utilcode/README-CN.md
@@ -3,6 +3,9 @@
 Gradle:
 ```groovy
 implementation 'com.blankj:utilcode:1.23.7'
+
+// if u use AndroidX, use the following
+implementation 'com.blankj:utilcodex:1.23.7'
 ```
 
 
diff --git a/utilcode/README.md b/utilcode/README.md
index 75d8757892..094cc44c08 100644
--- a/utilcode/README.md
+++ b/utilcode/README.md
@@ -3,6 +3,9 @@
 Gradle:
 ```groovy
 implementation 'com.blankj:utilcode:1.23.7'
+
+// if u use AndroidX, use the following
+implementation 'com.blankj:utilcodex:1.23.7'
 ```
 
 

From 2fa66306221456a5be12d9d201c7495958596fb4 Mon Sep 17 00:00:00 2001
From: Blankj <625783482@qq.com>
Date: Mon, 11 Mar 2019 20:45:31 +0800
Subject: [PATCH 003/194] see 03/11 log

---
 utilcode/lib/project.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/utilcode/lib/project.properties b/utilcode/lib/project.properties
index d0f2a3f7e0..d238eda740 100644
--- a/utilcode/lib/project.properties
+++ b/utilcode/lib/project.properties
@@ -1,9 +1,9 @@
 #project
-project.name=UtilCode
+project.name=UtilCodeX
 project.groupId=com.blankj
 project.artifactId=utilcodex
 project.packaging=aar
 project.siteUrl=https://github.com/Blankj/AndroidUtilCode
 project.gitUrl=https://github.com/Blankj/AndroidUtilCode.git
 #javadoc
-javadoc.name=UtilCode
\ No newline at end of file
+javadoc.name=UtilCodeX
\ No newline at end of file

From 6b0ff9575675cf0ae15c9c9a85eb249b5591c3a8 Mon Sep 17 00:00:00 2001
From: Blankj <625783482@qq.com>
Date: Mon, 3 Jun 2019 20:49:21 +0800
Subject: [PATCH 004/194] see 06/03 log

---
 .gitignore                                    |  2 +-
 CHANGELOG.md                                  |  1 +
 gradle.properties                             |  8 +++++-
 gradle/config/config.gradle                   | 10 ++++----
 gradle/config/configApp.gradle                |  5 +++-
 launcher/app/build.gradle                     |  6 ++---
 launcher/pkg/build.gradle                     |  2 +-
 .../com/blankj/launcher/pkg/MainActivity.kt   |  2 +-
 .../pkg/src/main/res/layout/activity_main.xml | 18 ++++++-------
 lib/base/build.gradle                         |  2 +-
 .../com/blankj/lib/base/BaseActivity.java     |  5 ++--
 .../com/blankj/lib/base/BaseApplication.java  |  3 ++-
 .../blankj/lib/base/BaseDrawerActivity.java   | 11 ++++----
 .../com/blankj/lib/base/BaseFragment.java     | 13 +++++-----
 .../blankj/lib/base/BaseTitleActivity.java    |  9 ++++---
 .../java/com/blankj/lib/base/IBaseView.java   |  5 ++--
 .../com/blankj/lib/base/rv/BaseAdapter.java   |  5 ++--
 .../java/com/blankj/lib/base/rv/BaseCell.java |  3 ++-
 .../blankj/lib/base/rv/BaseViewHolder.java    |  4 +--
 .../lib/base/rv/RecycleViewDivider.java       | 10 ++++----
 .../main/res/layout/activity_base_title.xml   | 11 ++++----
 .../activity_base_title_stub_scroll.xml       |  4 +--
 .../src/main/res/layout/activity_drawer.xml   |  6 ++---
 subutil/app/build.gradle                      |  2 +-
 subutil/lib/build.gradle                      |  2 +-
 .../blankj/subutil/util/LocationUtils.java    |  2 +-
 .../com/blankj/subutil/util/PinyinUtils.java  |  2 +-
 .../java/com/blankj/subutil/util/Utils.java   |  4 +--
 .../subutil/util/http/ExecutorFactory.java    |  3 ++-
 .../blankj/subutil/util/http/HttpUtils.java   |  3 ++-
 .../com/blankj/subutil/util/http/Request.java |  3 ++-
 .../blankj/subutil/util/http/SSLConfig.java   |  3 ++-
 subutil/pkg/build.gradle                      |  2 +-
 .../blankj/subutil/pkg/helper/DialogHelper.kt |  2 +-
 utilcode/README-CN.md                         |  2 +-
 utilcode/README.md                            |  2 +-
 utilcode/app/build.gradle                     |  2 +-
 utilcode/lib/build.gradle                     |  2 +-
 utilcode/lib/project.properties               |  6 ++---
 .../utilcode/constant/MemoryConstants.java    |  2 +-
 .../constant/PermissionConstants.java         |  2 +-
 .../utilcode/constant/TimeConstants.java      |  2 +-
 .../blankj/utilcode/util/ActivityUtils.java   | 11 ++++----
 .../blankj/utilcode/util/AntiShakeUtils.java  |  5 ++--
 .../com/blankj/utilcode/util/AppUtils.java    |  5 ++--
 .../com/blankj/utilcode/util/BarUtils.java    | 11 ++++----
 .../blankj/utilcode/util/BrightnessUtils.java |  5 ++--
 .../com/blankj/utilcode/util/BusUtils.java    |  5 ++--
 .../utilcode/util/CacheDiskStaticUtils.java   |  3 ++-
 .../blankj/utilcode/util/CacheDiskUtils.java  |  3 ++-
 .../utilcode/util/CacheDoubleStaticUtils.java |  3 ++-
 .../utilcode/util/CacheDoubleUtils.java       |  2 +-
 .../utilcode/util/CacheMemoryStaticUtils.java |  2 +-
 .../utilcode/util/CacheMemoryUtils.java       |  4 +--
 .../com/blankj/utilcode/util/ColorUtils.java  | 12 ++++-----
 .../com/blankj/utilcode/util/CrashUtils.java  |  4 +--
 .../com/blankj/utilcode/util/DeviceUtils.java |  5 ++--
 .../blankj/utilcode/util/FragmentUtils.java   | 21 ++++++++--------
 .../com/blankj/utilcode/util/ImageUtils.java  | 14 +++++------
 .../com/blankj/utilcode/util/IntentUtils.java |  4 +--
 .../blankj/utilcode/util/KeyboardUtils.java   |  3 ++-
 .../com/blankj/utilcode/util/LogUtils.java    |  8 +++---
 .../blankj/utilcode/util/MetaDataUtils.java   |  2 +-
 .../blankj/utilcode/util/NetworkUtils.java    |  5 ++--
 .../utilcode/util/NotificationUtils.java      |  6 ++---
 .../com/blankj/utilcode/util/ObjectUtils.java |  6 ++---
 .../blankj/utilcode/util/PermissionUtils.java |  8 +++---
 .../com/blankj/utilcode/util/PhoneUtils.java  |  2 +-
 .../blankj/utilcode/util/ProcessUtils.java    |  4 +--
 .../com/blankj/utilcode/util/RegexUtils.java  |  2 +-
 .../blankj/utilcode/util/ResourceUtils.java   |  2 +-
 .../blankj/utilcode/util/SPStaticUtils.java   |  2 +-
 .../com/blankj/utilcode/util/SPUtils.java     |  2 +-
 .../com/blankj/utilcode/util/ScreenUtils.java |  4 +--
 .../com/blankj/utilcode/util/ShellUtils.java  |  2 +-
 .../blankj/utilcode/util/SnackbarUtils.java   | 14 +++++------
 .../com/blankj/utilcode/util/SpanUtils.java   | 16 ++++++------
 .../com/blankj/utilcode/util/StringUtils.java |  4 +--
 .../com/blankj/utilcode/util/ThreadUtils.java |  5 ++--
 .../com/blankj/utilcode/util/TimeUtils.java   |  2 +-
 .../com/blankj/utilcode/util/ToastUtils.java  | 10 ++++----
 .../com/blankj/utilcode/util/UriUtils.java    | 25 +++++++++++++------
 .../java/com/blankj/utilcode/util/Utils.java  |  3 ++-
 .../blankj/utilcode/util/VibrateUtils.java    |  2 +-
 .../com/blankj/utilcode/util/BaseTest.java    | 11 +++-----
 .../blankj/utilcode/util/ObjectUtilsTest.java |  5 ++--
 utilcode/pkg/build.gradle                     |  2 +-
 .../pkg/feature/activity/ActivityActivity.kt  |  2 +-
 .../feature/activity/SubActivityActivity.kt   |  2 +-
 .../feature/bar/BarStatusFragmentActivity.kt  | 16 ++++++------
 .../pkg/feature/fragment/ContainerFragment.kt |  6 ++---
 .../pkg/feature/fragment/FragmentActivity.kt  |  6 ++---
 .../pkg/feature/image/ImageActivity.kt        |  4 +--
 .../pkg/feature/snackbar/SnackbarActivity.kt  |  2 +-
 .../utilcode/pkg/feature/span/SpanActivity.kt |  2 +-
 .../utilcode/pkg/feature/toast/CustomToast.kt |  2 +-
 .../pkg/feature/toast/ToastActivity.kt        |  2 +-
 .../utilcode/pkg/helper/DialogHelper.kt       |  5 ++--
 .../main/res/layout/activity_adaptscreen.xml  |  4 +--
 .../res/layout/activity_adaptscreen_close.xml |  4 +--
 .../layout/activity_adaptscreen_height.xml    |  7 +++---
 .../res/layout/activity_adaptscreen_width.xml |  4 +--
 .../layout/activity_bar_status_fragment.xml   |  4 +--
 .../src/main/res/layout/activity_fragment.xml |  2 +-
 .../src/main/res/layout/activity_image.xml    |  3 +--
 105 files changed, 293 insertions(+), 253 deletions(-)

diff --git a/.gitignore b/.gitignore
index 201b88771a..193619553c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,4 +9,4 @@
 .externalNativeBuild
 /apk
 *.phrof
-/maven
+/busMaven
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 95dfb60cc3..9c48786e89 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@
 * `19/04/24` [upd] The swipe panel.
 * `19/03/17` [fix] The ugly UI.
 * `19/03/14` [fix] AdaptScreenUtils didn't work on some HaWei tablet.
+* `19/03/09` [fix] UriUtils#uri2File.
 * `19/03/08` [add] LogUtils support multi process. Publish v1.23.7.
 * `19/03/02` [fix] LogUtils#file.
 * `19/02/28` [fix] ImageUtils#calculateInSampleSize. Publish v1.23.6.
diff --git a/gradle.properties b/gradle.properties
index 110f0cb7ef..c209c08b84 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -19,4 +19,10 @@
 
 #org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
 
-org.gradle.jvmargs=-XX:MaxHeapSize=1024m -Xmx1024m
\ No newline at end of file
+org.gradle.jvmargs=-Xmx8192m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+org.gradle.daemon=true
+org.gradle.configureondemand=true
+org.gradle.parallel=true
+
+android.enableJetifier=true
+android.useAndroidX=true
\ No newline at end of file
diff --git a/gradle/config/config.gradle b/gradle/config/config.gradle
index e455c4dba6..e8c793b6b3 100644
--- a/gradle/config/config.gradle
+++ b/gradle/config/config.gradle
@@ -5,7 +5,7 @@ gradle.ext {
     applicationId = 'com.blankj.androidutilcode'
     appName = 'Util'
 
-    compileSdkVersion = 27
+    compileSdkVersion = 28
     minSdkVersion = 14
     targetSdkVersion = 27
     versionCode = 1_024_000
@@ -13,8 +13,8 @@ gradle.ext {
 
     // lib version
     kotlin_version = '1.3.10'
-    support_version = '27.1.1'
     leakcanary_version = '1.6.3'
+    androidx_version = '1.0.0'
 
     dep = [:]
 
@@ -36,11 +36,11 @@ gradle.ext {
             subutil_lib                : new DepConfig(":subutil:lib"),
             subutil_pkg                : new DepConfig(":subutil:pkg"),
             utilcode_app               : new DepConfig(":utilcode:app"),
-            utilcode_lib               : new DepConfig(false, ":utilcode:lib", "com.blankj:utilcode:$versionName"),
+            utilcode_lib               : new DepConfig(true, ":utilcode:lib", "com.blankj:utilcode:$versionName"),
             utilcode_pkg               : new DepConfig(":utilcode:pkg"),
 
-            support_appcompat_v7       : new DepConfig("com.android.support:appcompat-v7:$support_version"),
-            support_design             : new DepConfig("com.android.support:design:$support_version"),
+            support_appcompat_v7       : new DepConfig("androidx.appcompat:appcompat:$androidx_version"),
+            support_material           : new DepConfig("com.google.android.material:material:$androidx_version"),
             support_multidex           : new DepConfig("com.android.support:multidex:1.0.2"),
 
             constraint                 : new DepConfig("com.android.support.constraint:constraint-layout:1.1.3"),
diff --git a/gradle/config/configApp.gradle b/gradle/config/configApp.gradle
index cb8d5a290a..809cb07cd4 100644
--- a/gradle/config/configApp.gradle
+++ b/gradle/config/configApp.gradle
@@ -42,8 +42,11 @@ android {
     }
 
     dexOptions {
+        preDexLibraries true
         javaMaxHeapSize "8g"
         maxProcessCount 8
+        incremental true
+        dexInProcess = true
     }
 }
 
@@ -57,7 +60,7 @@ dependencies {
 
 private String getSuffix() {
     if (project.path == ":launcher:app") return ""
-    return project.path.replace(":" , "_").substring(0, project.path.length() - 4)
+    return project.path.replace(":", "_").substring(0, project.path.length() - 4)
 }
 
 def configSigning(Project pro) {
diff --git a/launcher/app/build.gradle b/launcher/app/build.gradle
index eb9f8d906f..bf68fb45ff 100644
--- a/launcher/app/build.gradle
+++ b/launcher/app/build.gradle
@@ -4,7 +4,7 @@ apply {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    implementation project(':launcher:pkg')
-    implementation project(':subutil:pkg')
-    implementation project(':utilcode:pkg')
+    implementation gradle.ext.dep.launcher_pkg
+    implementation gradle.ext.dep.subutil_pkg
+    implementation gradle.ext.dep.utilcode_pkg
 }
\ No newline at end of file
diff --git a/launcher/pkg/build.gradle b/launcher/pkg/build.gradle
index 9fe360a5dd..881637b34a 100644
--- a/launcher/pkg/build.gradle
+++ b/launcher/pkg/build.gradle
@@ -4,5 +4,5 @@ apply {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    api project(':lib:base')
+    api gradle.ext.dep.lib_base
 }
\ No newline at end of file
diff --git a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
index 02491cd88d..0e9f0a8477 100644
--- a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
+++ b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
@@ -2,7 +2,7 @@ package com.blankj.launcher.pkg
 
 import android.graphics.Color
 import android.os.Bundle
-import android.support.v7.app.ActionBarDrawerToggle
+import androidx.appcompat.app.ActionBarDrawerToggle
 import android.view.View
 import android.widget.ImageView
 import com.blankj.lib.base.BaseDrawerActivity
diff --git a/launcher/pkg/src/main/res/layout/activity_main.xml b/launcher/pkg/src/main/res/layout/activity_main.xml
index 3b31dafe32..ee8b62a6fa 100644
--- a/launcher/pkg/src/main/res/layout/activity_main.xml
+++ b/launcher/pkg/src/main/res/layout/activity_main.xml
@@ -1,17 +1,17 @@
 
-
 
-    
 
-        
 
-            
 
-        
-    
+        
+    
 
     
 
-    
@@ -69,5 +69,5 @@
                 android:text="@string/sub_util" />
 
         
-    
-
+    
+
diff --git a/lib/base/build.gradle b/lib/base/build.gradle
index 370036c062..67f9762d82 100644
--- a/lib/base/build.gradle
+++ b/lib/base/build.gradle
@@ -8,7 +8,7 @@ dependencies {
     api gradle.ext.dep.subutil_lib
 
     api gradle.ext.dep.support_appcompat_v7
-    api gradle.ext.dep.support_design
+    api gradle.ext.dep.support_material
     api gradle.ext.dep.support_multidex
     api gradle.ext.dep.constraint
     api gradle.ext.dep.kotlin
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java
index caae1d45cf..0c9d8fa419 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java
@@ -3,11 +3,12 @@
 import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.os.Bundle;
-import android.support.annotation.LayoutRes;
-import android.support.v7.app.AppCompatActivity;
 import android.view.LayoutInflater;
 import android.view.View;
 
+import androidx.annotation.LayoutRes;
+import androidx.appcompat.app.AppCompatActivity;
+
 import com.blankj.swipepanel.SwipePanel;
 import com.blankj.utilcode.util.AntiShakeUtils;
 import com.blankj.utilcode.util.AppUtils;
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.java b/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.java
index 1e0ddc0b27..5d2eba8260 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.java
@@ -2,7 +2,8 @@
 
 import android.app.Application;
 import android.content.Context;
-import android.support.multidex.MultiDex;
+
+import androidx.multidex.MultiDex;
 
 import com.blankj.utilcode.util.AppUtils;
 import com.blankj.utilcode.util.CrashUtils;
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java b/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java
index c7f7f1daea..ec3c895f6e 100755
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java
@@ -3,17 +3,18 @@
 import android.annotation.SuppressLint;
 import android.content.Intent;
 import android.net.Uri;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.StringRes;
-import android.support.design.widget.NavigationView;
-import android.support.v4.widget.DrawerLayout;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.widget.FrameLayout;
 
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.StringRes;
+import androidx.drawerlayout.widget.DrawerLayout;
+
 import com.blankj.utilcode.util.ActivityUtils;
 import com.blankj.utilcode.util.StringUtils;
+import com.google.android.material.navigation.NavigationView;
 
 
 /**
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java b/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java
index 5667f3f02c..0e4e7ba5cc 100755
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java
@@ -4,17 +4,18 @@
 import android.app.Activity;
 import android.content.Context;
 import android.os.Bundle;
-import android.support.annotation.IdRes;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
+import androidx.annotation.IdRes;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentTransaction;
+
 import com.blankj.utilcode.util.AntiShakeUtils;
 
 /**
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java b/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java
index a40230420d..e0ed3ed10a 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java
@@ -1,16 +1,17 @@
 package com.blankj.lib.base;
 
 import android.annotation.SuppressLint;
-import android.support.annotation.LayoutRes;
-import android.support.design.widget.CoordinatorLayout;
-import android.support.v7.app.ActionBar;
-import android.support.v7.widget.Toolbar;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewStub;
 import android.widget.FrameLayout;
 
+import androidx.annotation.LayoutRes;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.widget.Toolbar;
+import androidx.coordinatorlayout.widget.CoordinatorLayout;
+
 import com.blankj.utilcode.util.BarUtils;
 import com.blankj.utilcode.util.ColorUtils;
 
diff --git a/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java b/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java
index 29e8553899..b0550f126c 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java
@@ -1,10 +1,11 @@
 package com.blankj.lib.base;
 
 import android.os.Bundle;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.Nullable;
 import android.view.View;
 
+import androidx.annotation.LayoutRes;
+import androidx.annotation.Nullable;
+
 
 /**
  * 
diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseAdapter.java b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseAdapter.java
index 11aa94e015..e69be6c6df 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseAdapter.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseAdapter.java
@@ -1,12 +1,13 @@
 package com.blankj.lib.base.rv;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
 import java.util.List;
 
 /**
diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseCell.java b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseCell.java
index cdf42c7882..332c4caee0 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseCell.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseCell.java
@@ -1,10 +1,11 @@
 package com.blankj.lib.base.rv;
 
-import android.support.annotation.NonNull;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
 import android.view.View;
 
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: blankj
diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java
index ceb1c46eac..0bd892f317 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java
@@ -1,7 +1,7 @@
 package com.blankj.lib.base.rv;
 
-import android.support.annotation.IdRes;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.IdRes;
+import androidx.recyclerview.widget.RecyclerView;
 import android.util.SparseArray;
 import android.view.View;
 
diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java b/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java
index 3d2b90f302..dd20894e10 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java
@@ -5,11 +5,11 @@
 import android.graphics.Canvas;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
+import androidx.core.view.ViewCompat;
+import androidx.recyclerview.widget.RecyclerView;
 import android.view.View;
 import android.widget.LinearLayout;
 
diff --git a/lib/base/src/main/res/layout/activity_base_title.xml b/lib/base/src/main/res/layout/activity_base_title.xml
index b11ecf7341..986d3669b6 100644
--- a/lib/base/src/main/res/layout/activity_base_title.xml
+++ b/lib/base/src/main/res/layout/activity_base_title.xml
@@ -1,24 +1,23 @@
 
-
 
-    
 
-        
-    
+    
 
     
 
-
+
diff --git a/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml b/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml
index 96f5e09d49..bd031cfb67 100644
--- a/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml
+++ b/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml
@@ -1,5 +1,5 @@
 
-
 
-
+
 
diff --git a/lib/base/src/main/res/layout/activity_drawer.xml b/lib/base/src/main/res/layout/activity_drawer.xml
index 72f70ed969..be44cd718c 100644
--- a/lib/base/src/main/res/layout/activity_drawer.xml
+++ b/lib/base/src/main/res/layout/activity_drawer.xml
@@ -1,5 +1,5 @@
 
-
 
-    
 
-
+
diff --git a/subutil/app/build.gradle b/subutil/app/build.gradle
index a2e0172413..a7027c15ef 100644
--- a/subutil/app/build.gradle
+++ b/subutil/app/build.gradle
@@ -4,5 +4,5 @@ apply {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    implementation project(':subutil:pkg')
+    implementation gradle.ext.dep.subutil_pkg
 }
\ No newline at end of file
diff --git a/subutil/lib/build.gradle b/subutil/lib/build.gradle
index 9dcbe0b542..f3140b4f0b 100644
--- a/subutil/lib/build.gradle
+++ b/subutil/lib/build.gradle
@@ -14,7 +14,7 @@ readme {
 
 dependencies {
     compileOnly gradle.ext.dep.support_appcompat_v7
-    compileOnly gradle.ext.dep.support_design
+    compileOnly gradle.ext.dep.support_material
     api(gradle.ext.dep.glide) {
         exclude group: "com.android.support"
     }
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java
index 7ee8747902..0c177b534c 100755
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java
@@ -11,7 +11,7 @@
 import android.location.LocationProvider;
 import android.os.Bundle;
 import android.provider.Settings;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
 import android.util.Log;
 
 import java.io.IOException;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java
index 22486b3a91..934408c65e 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.subutil.util;
 
-import android.support.v4.util.SimpleArrayMap;
+import androidx.collection.SimpleArrayMap;
 
 /**
  * 
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
index 9cbf4e06fd..91b336abcf 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
@@ -7,8 +7,8 @@
 import android.content.Context;
 import android.database.Cursor;
 import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java
index f5583397d9..2f26fb9c24 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java
@@ -2,7 +2,8 @@
 
 import android.os.Handler;
 import android.os.Looper;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
 
 import java.util.concurrent.Executor;
 import java.util.concurrent.LinkedBlockingQueue;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java
index b952f318cb..bdd4174486 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java
@@ -1,7 +1,8 @@
 package com.blankj.subutil.util.http;
 
 import android.accounts.NetworkErrorException;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
 
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayOutputStream;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java
index fe39b1299c..c6eddf9b96 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java
@@ -1,6 +1,7 @@
 package com.blankj.subutil.util.http;
 
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
 
 import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java
index b8624af490..0cf43662f2 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java
@@ -2,7 +2,8 @@
 
 import android.annotation.SuppressLint;
 import android.os.Build;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
 
 import java.io.IOException;
 import java.net.InetAddress;
diff --git a/subutil/pkg/build.gradle b/subutil/pkg/build.gradle
index 9fe360a5dd..881637b34a 100644
--- a/subutil/pkg/build.gradle
+++ b/subutil/pkg/build.gradle
@@ -4,5 +4,5 @@ apply {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    api project(':lib:base')
+    api gradle.ext.dep.lib_base
 }
\ No newline at end of file
diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
index 45e67a4a0d..9eba25c622 100644
--- a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
+++ b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
@@ -1,6 +1,6 @@
 package com.blankj.subutil.pkg.helper
 
-import android.support.v7.app.AlertDialog
+import androidx.appcompat.app.AlertDialog
 import com.blankj.subutil.pkg.R
 import com.blankj.utilcode.util.ActivityUtils
 import com.blankj.utilcode.util.PermissionUtils
diff --git a/utilcode/README-CN.md b/utilcode/README-CN.md
index 445f206121..0bdb622940 100644
--- a/utilcode/README-CN.md
+++ b/utilcode/README-CN.md
@@ -5,7 +5,7 @@ Gradle:
 implementation 'com.blankj:utilcode:1.24.0'
 
 // if u use AndroidX, use the following
-implementation 'com.blankj:utilcodex:1.23.7'
+implementation 'com.blankj:utilcodex:1.24.0'
 ```
 
 
diff --git a/utilcode/README.md b/utilcode/README.md
index f449736061..5a6a295b4c 100644
--- a/utilcode/README.md
+++ b/utilcode/README.md
@@ -5,7 +5,7 @@ Gradle:
 implementation 'com.blankj:utilcode:1.24.0'
 
 // if u use AndroidX, use the following
-implementation 'com.blankj:utilcodex:1.23.7'
+implementation 'com.blankj:utilcodex:1.24.0'
 ```
 
 
diff --git a/utilcode/app/build.gradle b/utilcode/app/build.gradle
index 5616386892..ea5c172cd7 100644
--- a/utilcode/app/build.gradle
+++ b/utilcode/app/build.gradle
@@ -4,5 +4,5 @@ apply {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    implementation project(':utilcode:pkg')
+    implementation gradle.ext.dep.utilcode_pkg
 }
\ No newline at end of file
diff --git a/utilcode/lib/build.gradle b/utilcode/lib/build.gradle
index e4dd3a6716..6d6c599298 100644
--- a/utilcode/lib/build.gradle
+++ b/utilcode/lib/build.gradle
@@ -18,7 +18,7 @@ dependencies {
     compile gradle.ext.dep.gson
 
     compileOnly gradle.ext.dep.support_appcompat_v7
-    compileOnly gradle.ext.dep.support_design
+    compileOnly gradle.ext.dep.support_material
 
     testImplementation gradle.ext.dep.junit
     testImplementation gradle.ext.dep.robolectric
diff --git a/utilcode/lib/project.properties b/utilcode/lib/project.properties
index 22ae3b8603..d238eda740 100644
--- a/utilcode/lib/project.properties
+++ b/utilcode/lib/project.properties
@@ -1,9 +1,9 @@
 #project
-project.name=UtilCode
+project.name=UtilCodeX
 project.groupId=com.blankj
-project.artifactId=utilcode
+project.artifactId=utilcodex
 project.packaging=aar
 project.siteUrl=https://github.com/Blankj/AndroidUtilCode
 project.gitUrl=https://github.com/Blankj/AndroidUtilCode.git
 #javadoc
-javadoc.name=UtilCode
\ No newline at end of file
+javadoc.name=UtilCodeX
\ No newline at end of file
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
index b68bfcb113..5c05c0163e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.constant;
 
-import android.support.annotation.IntDef;
+import androidx.annotation.IntDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
index 76f7e9a217..6db826e4ab 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
@@ -4,7 +4,7 @@
 import android.Manifest.permission;
 import android.annotation.SuppressLint;
 import android.os.Build;
-import android.support.annotation.StringDef;
+import androidx.annotation.StringDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
index 9932037bf8..45090576e3 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.constant;
 
-import android.support.annotation.IntDef;
+import androidx.annotation.IntDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
index d6a671e4fe..de1bfeb005 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
@@ -10,14 +10,15 @@
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.annotation.AnimRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.ActivityOptionsCompat;
-import android.support.v4.util.Pair;
 import android.util.Log;
 import android.view.View;
 
+import androidx.annotation.AnimRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.app.ActivityOptionsCompat;
+import androidx.core.util.Pair;
+
 import java.util.List;
 
 /**
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
index 7e87e73474..ca9036225e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
@@ -1,9 +1,10 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
 import android.view.View;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
index a9368be59f..5a9194ce66 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
@@ -17,8 +17,6 @@
 import android.net.Uri;
 import android.os.Build;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.v4.content.FileProvider;
 import android.util.Log;
 
 import java.io.File;
@@ -27,6 +25,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
index 7b5509b2b5..22178a5c20 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
@@ -8,11 +8,6 @@
 import android.graphics.Color;
 import android.graphics.Point;
 import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RequiresPermission;
-import android.support.v4.widget.DrawerLayout;
 import android.util.Log;
 import android.util.TypedValue;
 import android.view.Display;
@@ -27,6 +22,12 @@
 
 import java.lang.reflect.Method;
 
+import androidx.annotation.ColorInt;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
+import androidx.drawerlayout.widget.DrawerLayout;
+
 import static android.Manifest.permission.EXPAND_STATUS_BAR;
 
 /**
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
index f9344b0a59..bacc519540 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
@@ -2,11 +2,12 @@
 
 import android.content.ContentResolver;
 import android.provider.Settings;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
 import android.view.Window;
 import android.view.WindowManager;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
index f04202043e..d272c99b98 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
@@ -16,11 +16,12 @@
 import android.os.Message;
 import android.os.Messenger;
 import android.os.RemoteException;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 import android.text.TextUtils;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
index bb48a4b5cf..c5a9a17a6d 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
@@ -3,13 +3,14 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
 
 import org.json.JSONArray;
 import org.json.JSONObject;
 
 import java.io.Serializable;
 
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
index 67e6b3fb0e..a8ae8afa5b 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
@@ -8,9 +8,10 @@
 import android.graphics.drawable.Drawable;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+
 import com.blankj.utilcode.constant.CacheConstants;
 
 import org.json.JSONArray;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
index 2ef267bd01..6dbb9f7475 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
@@ -3,13 +3,14 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
 
 import org.json.JSONArray;
 import org.json.JSONObject;
 
 import java.io.Serializable;
 
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
index c800423c78..aca1c25837 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
@@ -3,7 +3,7 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import com.blankj.utilcode.constant.CacheConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
index 56abfba117..aedcfa7fc4 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
index d0e06e394d..ddaa2baed9 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
@@ -1,7 +1,7 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
-import android.support.v4.util.LruCache;
+import androidx.annotation.NonNull;
+import androidx.collection.LruCache;
 
 import com.blankj.utilcode.constant.CacheConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
index 4c0c22232b..a6603cfc44 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
@@ -1,12 +1,12 @@
 package com.blankj.utilcode.util;
 
 import android.graphics.Color;
-import android.support.annotation.ColorInt;
-import android.support.annotation.ColorRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.ColorRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
index 18b5f814a3..081dd09761 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
@@ -5,8 +5,8 @@
 import android.content.pm.PackageManager;
 import android.os.Build;
 import android.os.Environment;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
 import android.util.Log;
 
 import java.io.BufferedWriter;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
index e6b1910cfc..c641c9bdae 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
@@ -11,11 +11,12 @@
 import android.os.Debug;
 import android.os.PowerManager;
 import android.provider.Settings;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RequiresPermission;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
+
 import java.io.File;
 import java.net.InetAddress;
 import java.net.NetworkInterface;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
index 43b8537e75..9e8ae14ef1 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
@@ -3,16 +3,6 @@
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.annotation.AnimRes;
-import android.support.annotation.AnimatorRes;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IdRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
 import android.util.Log;
 import android.view.View;
 
@@ -20,6 +10,17 @@
 import java.util.Collections;
 import java.util.List;
 
+import androidx.annotation.AnimRes;
+import androidx.annotation.AnimatorRes;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.IdRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
index 83e01eb1ad..cbee7dd4bd 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
@@ -27,13 +27,13 @@
 import android.renderscript.Element;
 import android.renderscript.RenderScript;
 import android.renderscript.ScriptIntrinsicBlur;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
 import android.view.View;
 
 import java.io.BufferedOutputStream;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
index 6faa37d043..1e26dc8a9a 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
@@ -8,8 +8,8 @@
 import android.os.Bundle;
 import android.provider.MediaStore;
 import android.provider.Settings;
-import android.support.annotation.RequiresPermission;
-import android.support.v4.content.FileProvider;
+import androidx.annotation.RequiresPermission;
+import androidx.core.content.FileProvider;
 
 import java.io.File;
 import java.util.ArrayList;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
index cfa568fa7c..de3eb285cc 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
@@ -7,7 +7,6 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.ResultReceiver;
-import android.support.annotation.NonNull;
 import android.util.Log;
 import android.view.View;
 import android.view.ViewTreeObserver.OnGlobalLayoutListener;
@@ -16,6 +15,8 @@
 import android.view.inputmethod.InputMethodManager;
 import android.widget.FrameLayout;
 
+import androidx.annotation.NonNull;
+
 import java.lang.reflect.Field;
 
 /**
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
index 1372ecd40b..9a7e11cbf5 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
@@ -10,10 +10,10 @@
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.RequiresApi;
-import android.support.v4.util.SimpleArrayMap;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.RequiresApi;
+import androidx.collection.SimpleArrayMap;
 import android.util.Log;
 
 import com.google.gson.Gson;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
index 6f6cf85b80..bd4b8da935 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
@@ -8,7 +8,7 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ServiceInfo;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
index d59eb28240..24a05a26b7 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
@@ -7,13 +7,14 @@
 import android.net.NetworkInfo;
 import android.net.wifi.WifiManager;
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.text.format.Formatter;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
+
 import java.lang.reflect.Method;
 import java.net.InetAddress;
 import java.net.InterfaceAddress;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
index b8163d2e66..73a900b465 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
@@ -5,9 +5,9 @@
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
-import android.support.annotation.Nullable;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationManagerCompat;
+import androidx.annotation.Nullable;
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationManagerCompat;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
index be5491ece0..3c0c087a39 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
@@ -1,9 +1,9 @@
 package com.blankj.utilcode.util;
 
 import android.os.Build;
-import android.support.annotation.RequiresApi;
-import android.support.v4.util.LongSparseArray;
-import android.support.v4.util.SimpleArrayMap;
+import androidx.annotation.RequiresApi;
+import androidx.collection.LongSparseArray;
+import androidx.collection.SimpleArrayMap;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
index d35cbcc620..602efcb5db 100755
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
@@ -9,10 +9,10 @@
 import android.os.Build;
 import android.os.Bundle;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RequiresApi;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.WindowManager;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
index 99068781a4..f407f81b5f 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
@@ -7,7 +7,7 @@
 import android.content.pm.PackageManager;
 import android.net.Uri;
 import android.os.Build;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
 import android.telephony.SmsManager;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
index adcd265f72..619b175549 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
@@ -10,8 +10,8 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
 import android.util.Log;
 
 import java.util.Arrays;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
index ba57fab956..817a94149f 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.v4.util.SimpleArrayMap;
+import androidx.collection.SimpleArrayMap;
 
 import com.blankj.utilcode.constant.RegexConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
index 81d10f08cf..3fb515c06b 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.RawRes;
+import androidx.annotation.RawRes;
 
 import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
index d3e21fb873..21274c3023 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
@@ -1,7 +1,7 @@
 package com.blankj.utilcode.util;
 
 import android.content.SharedPreferences;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.util.Map;
 import java.util.Set;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
index 554a2ed586..a9d18a1a55 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
@@ -3,7 +3,7 @@
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.util.Collections;
 import java.util.HashMap;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
index 7390fceed0..3245eb115c 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
@@ -10,8 +10,8 @@
 import android.graphics.Point;
 import android.os.Build;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
 import android.util.DisplayMetrics;
 import android.view.Surface;
 import android.view.View;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java
index b7ad2fa9d2..fc10a601ae 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
index b164e6154e..eab1990d29 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
@@ -1,12 +1,12 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.design.widget.Snackbar;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import com.google.android.material.snackbar.Snackbar;
 import android.text.SpannableString;
 import android.text.Spanned;
 import android.text.style.ForegroundColorSpan;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
index b8d9d53aed..4d49451ec0 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
@@ -14,14 +14,14 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
 import android.text.Layout;
 import android.text.Layout.Alignment;
 import android.text.SpannableStringBuilder;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
index c3254e3d32..70f0defe50 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
@@ -1,8 +1,8 @@
 package com.blankj.utilcode.util;
 
 import android.content.res.Resources;
-import android.support.annotation.ArrayRes;
-import android.support.annotation.StringRes;
+import androidx.annotation.ArrayRes;
+import androidx.annotation.StringRes;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
index 0545a27fa0..19de94ca33 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
@@ -2,10 +2,11 @@
 
 import android.os.Handler;
 import android.os.Looper;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.Executor;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
index adaa920474..a5286b0fbe 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import com.blankj.utilcode.constant.TimeConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
index 150425cdba..0dd47cfa3e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
@@ -12,11 +12,11 @@
 import android.os.Build;
 import android.os.Handler;
 import android.os.Message;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.StringRes;
-import android.support.v4.app.NotificationManagerCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.StringRes;
+import androidx.core.app.NotificationManagerCompat;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
index 9ad408912a..20fdc39b81 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
@@ -8,12 +8,14 @@
 import android.os.Environment;
 import android.provider.DocumentsContract;
 import android.provider.MediaStore;
-import android.support.annotation.NonNull;
-import android.support.v4.content.FileProvider;
+import android.text.TextUtils;
 import android.util.Log;
 
 import java.io.File;
 
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
+
 /**
  * 
  *     author: Blankj
@@ -75,12 +77,19 @@ public static File uri2File(@NonNull final Uri uri) {
                 Log.d("UriUtils", uri.toString() + " parse failed. -> 1");
                 return null;
             } else if ("com.android.providers.downloads.documents".equals(authority)) {
-                final String id = DocumentsContract.getDocumentId(uri);
-                final Uri contentUri = ContentUris.withAppendedId(
-                        Uri.parse("content://downloads/public_downloads"),
-                        Long.valueOf(id)
-                );
-                return getFileFromUri(contentUri, 2);
+                String id = DocumentsContract.getDocumentId(uri);
+                if (!TextUtils.isEmpty(id)) {
+                    if (id.startsWith("raw:")) {
+                        return new File(id.substring(4));
+                    }
+                    final Uri contentUri = ContentUris.withAppendedId(
+                            Uri.parse(Environment.DIRECTORY_DOWNLOADS),
+                            Long.valueOf(id)
+                    );
+                    return getFileFromUri(contentUri, 2);
+                }
+                Log.d("UriUtils", uri.toString() + " parse failed. -> 3");
+                return null;
             } else if ("com.android.providers.media.documents".equals(authority)) {
                 final String docId = DocumentsContract.getDocumentId(uri);
                 final String[] split = docId.split(":");
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
index d0c98afc96..1992a2c902 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
@@ -13,13 +13,14 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
-import android.support.v4.content.FileProvider;
 import android.text.TextUtils;
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 
+import androidx.core.content.FileProvider;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
index a57bbb8241..622d657817 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
@@ -2,7 +2,7 @@
 
 import android.content.Context;
 import android.os.Vibrator;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
 
 import static android.Manifest.permission.VIBRATE;
 
diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
index 85bc9d8ac2..2dadedff8c 100644
--- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
+++ b/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
@@ -1,8 +1,5 @@
 package com.blankj.utilcode.util;
 
-
-import android.support.annotation.NonNull;
-
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -29,7 +26,7 @@ public BaseTest() {
         ShadowLog.stream = System.out;
         ThreadUtils.setDeliver(new Executor() {
             @Override
-            public void execute(@NonNull Runnable command) {
+            public void execute(Runnable command) {
                 command.run();
             }
         });
@@ -201,8 +198,8 @@ public void onFail(Throwable t) {
     static class Person implements Comparable {
 
         String name;
-        int age;
-        int time;
+        int    age;
+        int    time;
 
         public Person(String name) {
             this.name = name;
@@ -220,7 +217,7 @@ public String toString() {
         }
 
         @Override
-        public int compareTo(@NonNull Person o) {
+        public int compareTo(Person o) {
             int res = o.age - age;
             if (res != 0) {
                 return res;
diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
index a0203f78fc..ed12c24d8d 100644
--- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
+++ b/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
@@ -1,7 +1,5 @@
 package com.blankj.utilcode.util;
 
-import android.support.v4.util.LongSparseArray;
-import android.support.v4.util.SimpleArrayMap;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
@@ -12,6 +10,9 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 
+import androidx.collection.LongSparseArray;
+import androidx.collection.SimpleArrayMap;
+
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
diff --git a/utilcode/pkg/build.gradle b/utilcode/pkg/build.gradle
index 9fe360a5dd..881637b34a 100644
--- a/utilcode/pkg/build.gradle
+++ b/utilcode/pkg/build.gradle
@@ -4,5 +4,5 @@ apply {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    api project(':lib:base')
+    api gradle.ext.dep.lib_base
 }
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
index e784f98401..9982c948b7 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
@@ -6,7 +6,7 @@ import android.graphics.Bitmap
 import android.graphics.drawable.BitmapDrawable
 import android.os.Build
 import android.os.Bundle
-import android.support.v4.app.ActivityOptionsCompat
+import androidx.core.app.ActivityOptionsCompat
 import android.view.View
 import android.view.Window
 import com.blankj.lib.base.BaseTitleActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
index 0c63773639..abf0151bbc 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
@@ -2,7 +2,7 @@ package com.blankj.utilcode.pkg.feature.activity
 
 import android.os.Build
 import android.os.Bundle
-import android.support.v4.app.ActivityCompat
+import androidx.core.app.ActivityCompat
 import android.view.View
 import android.view.Window
 import com.blankj.lib.base.BaseTitleActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
index d4f0d60530..fc8020b3e5 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
@@ -3,10 +3,10 @@ package com.blankj.utilcode.pkg.feature.bar
 import android.content.Context
 import android.content.Intent
 import android.os.Bundle
-import android.support.design.widget.BottomNavigationView
-import android.support.v4.app.Fragment
-import android.support.v4.app.FragmentPagerAdapter
-import android.support.v4.view.ViewPager
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentPagerAdapter
+import androidx.viewpager.widget.ViewPager
 import android.view.View
 import com.blankj.lib.base.BaseActivity
 import com.blankj.utilcode.pkg.R
@@ -37,7 +37,7 @@ class BarStatusFragmentActivity : BaseActivity() {
             R.id.barStatusFragmentNavigationCustom
     )
 
-    private val mFragmentList = ArrayList()
+    private val mFragmentList = ArrayList()
 
     private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener l@{ item ->
         when (item.itemId) {
@@ -78,8 +78,8 @@ class BarStatusFragmentActivity : BaseActivity() {
         mFragmentList.add(BarStatusCustomFragment.newInstance())
 
         barStatusFragmentVp.offscreenPageLimit = 3
-        barStatusFragmentVp.adapter = object : FragmentPagerAdapter(supportFragmentManager) {
-            override fun getItem(position: Int): Fragment {
+        barStatusFragmentVp.adapter = object : androidx.fragment.app.FragmentPagerAdapter(supportFragmentManager) {
+            override fun getItem(position: Int): androidx.fragment.app.Fragment {
                 return mFragmentList[position]
             }
 
@@ -88,7 +88,7 @@ class BarStatusFragmentActivity : BaseActivity() {
             }
         }
 
-        barStatusFragmentVp.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+        barStatusFragmentVp.addOnPageChangeListener(object : androidx.viewpager.widget.ViewPager.OnPageChangeListener {
             override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
 
             override fun onPageSelected(position: Int) {
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
index ada9dd0d10..86972c449d 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
@@ -2,8 +2,8 @@ package com.blankj.utilcode.pkg.feature.fragment
 
 import android.os.Build
 import android.os.Bundle
-import android.support.annotation.RequiresApi
-import android.support.v4.app.Fragment
+import androidx.annotation.RequiresApi
+import androidx.fragment.app.Fragment
 import android.transition.*
 import android.view.View
 import com.blankj.lib.base.BaseLazyFragment
@@ -128,7 +128,7 @@ class ContainerFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener
         }
     }
 
-    private fun addSharedElement(fragment: Fragment): Fragment {
+    private fun addSharedElement(fragment: androidx.fragment.app.Fragment): androidx.fragment.app.Fragment {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             fragment.sharedElementEnterTransition = DetailTransition()
             fragment.enterTransition = Fade()
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
index 446271b366..b18a2e236b 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
@@ -4,8 +4,8 @@ import android.content.Context
 import android.content.Intent
 import android.os.Bundle
 import android.os.PersistableBundle
-import android.support.design.widget.BottomNavigationView
-import android.support.v4.app.Fragment
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import androidx.fragment.app.Fragment
 import android.view.View
 import com.blankj.lib.base.BaseActivity
 import com.blankj.utilcode.pkg.R
@@ -29,7 +29,7 @@ class FragmentActivity : BaseActivity() {
         }
     }
 
-    private val mFragments = arrayListOf()
+    private val mFragments = arrayListOf()
     private var curIndex: Int = 0
 
     private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
index 0e092e0062..2c6656f220 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
@@ -6,12 +6,12 @@ import android.graphics.Bitmap
 import android.graphics.Color
 import android.os.Build
 import android.os.Bundle
-import android.support.annotation.StringRes
-import android.support.v7.widget.LinearLayoutManager
 import android.view.View
 import android.widget.Button
 import android.widget.ImageView
 import android.widget.TextView
+import androidx.annotation.StringRes
+import androidx.recyclerview.widget.LinearLayoutManager
 import com.blankj.lib.base.BaseTaskActivity
 import com.blankj.lib.base.rv.BaseAdapter
 import com.blankj.lib.base.rv.BaseCell
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
index a0ea36d528..cd1c1b0d99 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
@@ -4,7 +4,7 @@ import android.content.Context
 import android.content.Intent
 import android.graphics.Color
 import android.os.Bundle
-import android.support.annotation.StringRes
+import androidx.annotation.StringRes
 import android.text.SpannableStringBuilder
 import android.view.View
 import android.view.ViewGroup
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
index d84ced168c..202069ed61 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
@@ -5,7 +5,7 @@ import android.content.Context
 import android.content.Intent
 import android.graphics.*
 import android.os.Bundle
-import android.support.annotation.ColorInt
+import androidx.annotation.ColorInt
 import android.text.Layout
 import android.text.SpannableStringBuilder
 import android.text.TextPaint
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
index 314ba33d59..458ecbb3fb 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
@@ -2,7 +2,7 @@ package com.blankj.utilcode.pkg.feature.toast
 
 import android.os.Handler
 import android.os.Looper
-import android.support.annotation.StringRes
+import androidx.annotation.StringRes
 import android.widget.TextView
 import android.widget.Toast
 
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
index 51c9e53774..47f91e826e 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
@@ -4,7 +4,7 @@ import android.content.Context
 import android.content.Intent
 import android.graphics.Color
 import android.os.Bundle
-import android.support.v4.content.ContextCompat
+import androidx.core.content.ContextCompat
 import android.view.Gravity
 import android.view.View
 import com.blankj.lib.base.BaseTitleActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
index 344a69e448..a495a13013 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
@@ -3,7 +3,6 @@ package com.blankj.utilcode.pkg.helper
 import android.app.Dialog
 import android.graphics.Bitmap
 import android.graphics.drawable.ColorDrawable
-import android.support.v7.app.AlertDialog
 import android.text.method.ScrollingMovementMethod
 import android.view.Gravity
 import android.view.LayoutInflater
@@ -12,9 +11,9 @@ import android.widget.Button
 import android.widget.EditText
 import android.widget.ImageView
 import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
 import com.blankj.utilcode.pkg.R
 import com.blankj.utilcode.util.*
-import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldRequest
 
 /**
  * ```
@@ -26,7 +25,7 @@ import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldReques
  */
 object DialogHelper {
 
-    fun showRationaleDialog(shouldRequest: ShouldRequest) {
+    fun showRationaleDialog(shouldRequest: PermissionUtils.OnRationaleListener.ShouldRequest) {
         val topActivity = ActivityUtils.getTopActivity()
         AlertDialog.Builder(topActivity)
                 .setTitle(android.R.string.dialog_alert_title)
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
index 792ae5672e..9be8749952 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
@@ -1,5 +1,5 @@
 
-
 
-
+
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
index ccc88dddb6..1522b0741b 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
@@ -8,7 +8,7 @@
     android:fillViewport="true"
     tools:context=".feature.adaptScreen.AdaptCloseActivity">
 
-    
 
@@ -43,6 +43,6 @@
             android:textSize="30pt"
             app:layout_constraintTop_toBottomOf="@id/adaptScreenCloseAdaptDpTv" />
 
-    
+    
 
 
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
index 350921b04d..75fa87e8e5 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
@@ -1,13 +1,12 @@
 
-
 
-    
 
@@ -94,6 +93,6 @@
                 android:textSize="30pt" />
         
 
-    
+    
 
 
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
index 121415e1b6..dd9f9f40c7 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
@@ -8,7 +8,7 @@
     android:fillViewport="true"
     tools:context=".feature.adaptScreen.AdaptWidthActivity">
 
-    
 
@@ -149,6 +149,6 @@
 
         
 
-    
+    
 
 
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml b/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
index 3ce196004b..bd6e43e7a7 100644
--- a/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
@@ -6,7 +6,7 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    
 
-    
 
-    
-
Date: Tue, 18 Jun 2019 23:12:05 +0800
Subject: [PATCH 005/194] see 06/18 log

---
 gradle/config/config.gradle                   |     8 +-
 .../com/blankj/launcher/pkg/MainActivity.kt   |    18 +-
 .../com/blankj/launcher/pkg/SplashActivity.kt |     2 +-
 .../com/blankj/lib/base/BaseActivity.java     |    17 +-
 .../com/blankj/lib/base/BaseFragment.java     |    16 +-
 .../java/com/blankj/lib/base/IBaseView.java   |     6 +-
 subutil/export/.gitignore                     |     1 +
 subutil/export/build.gradle                   |     3 +
 subutil/export/proguard-rules.pro             |    21 +
 subutil/export/src/main/AndroidManifest.xml   |     1 +
 .../blankj/subutil/export/api/SubUtilApi.java |    16 +
 subutil/lib/build.gradle                      |     1 +
 subutil/lib/src/main/AndroidManifest.xml      |    12 +-
 .../blankj/subutil/util/AppStoreUtils.java    |   166 +
 .../blankj/subutil/util/ClipboardUtils.java   |     2 +
 .../com/blankj/subutil/util/CountryUtils.java |   303 +
 .../blankj/subutil/util/LocationUtils.java    |     2 +
 .../java/com/blankj/subutil/util/Utils.java   |   143 -
 .../blankj/subutil/util/http/SSLConfig.java   |    16 +-
 .../npm/node_modules/extend/index.js          |     2 +-
 subutil/pkg/build.gradle                      |     1 +
 subutil/pkg/src/main/AndroidManifest.xml      |     8 +
 .../subutil/pkg/feature/SubUtilActivity.kt    |    29 +-
 .../pkg/feature/appStore/AppStoreActivity.kt  |    55 +
 .../countryCode/CountryCodeActivity.kt        |    52 +
 .../pkg/feature/location/LocationActivity.kt  |     2 +-
 .../pkg/feature/pinyin/PinyinActivity.kt      |     2 +-
 .../subutil/pkg/impl/SubUtilApiImpl.java      |    23 +
 .../main/res/layout/activity_app_store.xml    |    16 +
 .../main/res/layout/activity_country_code.xml |    15 +
 .../src/main/res/layout/activity_util_sub.xml |    18 +-
 subutil/pkg/src/main/res/values/strings.xml   |     7 +-
 utilcode/export/.gitignore                    |     1 +
 utilcode/export/build.gradle                  |     3 +
 utilcode/export/proguard-rules.pro            |    21 +
 utilcode/export/src/main/AndroidManifest.xml  |     1 +
 utilcode/lib/src/main/AndroidManifest.xml     |     6 +-
 .../blankj/utilcode/util/ActivityUtils.java   |    11 +
 .../utilcode/util/AdaptScreenUtils.java       |    10 +-
 .../blankj/utilcode/util/AntiShakeUtils.java  |    40 -
 .../com/blankj/utilcode/util/ClickUtils.java  |   193 +
 .../blankj/utilcode/util/KeyboardUtils.java   |    32 +-
 .../com/blankj/utilcode/util/PathUtils.java   |     4 +-
 .../com/blankj/utilcode/util/RomUtils.java    |    12 +-
 .../com/blankj/utilcode/util/SpanUtils.java   |     4 +
 .../com/blankj/utilcode/util/ToastUtils.java  |     6 +-
 .../com/blankj/utilcode/util/UriUtils.java    |    65 +-
 .../java/com/blankj/utilcode/util/Utils.java  |     2 +-
 .../com/blankj/utilcode/util/ViewUtils.java   |    36 +
 .../blankj/utilcode/util/GsonUtilsTest.java   | 18655 +++++++++++++++-
 utilcode/pkg/build.gradle                     |     1 +
 utilcode/pkg/src/main/AndroidManifest.xml     |     6 +
 .../utilcode/pkg/feature/CoreUtilActivity.kt  |   193 +-
 .../pkg/feature/activity/ActivityActivity.kt  |    62 +-
 .../feature/activity/SubActivityActivity.kt   |     2 +-
 .../feature/adaptScreen/AdaptCloseActivity.kt |     2 +-
 .../adaptScreen/AdaptHeightActivity.kt        |     2 +-
 .../adaptScreen/AdaptScreenActivity.kt        |    10 +-
 .../feature/adaptScreen/AdaptWidthActivity.kt |     2 +-
 .../utilcode/pkg/feature/app/AppActivity.kt   |    20 +-
 .../utilcode/pkg/feature/bar/BarActivity.kt   |    22 +-
 .../pkg/feature/bar/BarNavActivity.kt         |     4 +-
 .../feature/bar/BarNotificationActivity.kt    |     4 +-
 .../pkg/feature/bar/BarStatusActivity.kt      |     2 +-
 .../pkg/feature/bar/BarStatusAlphaActivity.kt |     4 +-
 .../pkg/feature/bar/BarStatusAlphaFragment.kt |     4 +-
 .../pkg/feature/bar/BarStatusColorActivity.kt |     4 +-
 .../pkg/feature/bar/BarStatusColorFragment.kt |     4 +-
 .../feature/bar/BarStatusCustomActivity.kt    |     2 +-
 .../feature/bar/BarStatusCustomFragment.kt    |     2 +-
 .../feature/bar/BarStatusDrawerActivity.kt    |     8 +-
 .../feature/bar/BarStatusFragmentActivity.kt  |     2 +-
 .../feature/bar/BarStatusImageViewActivity.kt |     4 +-
 .../feature/bar/BarStatusImageViewFragment.kt |     4 +-
 .../feature/brightness/BrightnessActivity.kt  |     2 +-
 .../utilcode/pkg/feature/bus/BusActivity.kt   |     8 +-
 .../pkg/feature/bus/BusRemoteActivity.kt      |     8 +-
 .../pkg/feature/clean/CleanActivity.kt        |    14 +-
 .../pkg/feature/click/ClickActivity.kt        |    47 +
 .../pkg/feature/device/DeviceActivity.kt      |    11 +-
 .../feature/flashlight/FlashlightActivity.kt  |     2 +-
 .../pkg/feature/fragment/ChildFragment.kt     |    10 +-
 .../pkg/feature/fragment/ContainerFragment.kt |    23 +-
 .../pkg/feature/fragment/FragmentActivity.kt  |     2 +-
 .../pkg/feature/fragment/RootFragment.kt      |     2 +-
 .../pkg/feature/image/ImageActivity.kt        |     2 +-
 .../pkg/feature/keyboard/KeyboardActivity.kt  |    12 +-
 .../utilcode/pkg/feature/log/LogActivity.kt   |    34 +-
 .../pkg/feature/metaData/MetaDataActivity.kt  |     2 +-
 .../pkg/feature/network/NetworkActivity.kt    |     4 +-
 .../utilcode/pkg/feature/path/PathActivity.kt |     2 +-
 .../feature/permission/PermissionActivity.kt  |    16 +-
 .../pkg/feature/phone/PhoneActivity.kt        |    12 +-
 .../pkg/feature/process/ProcessActivity.kt    |     4 +-
 .../pkg/feature/reflect/ReflectActivity.kt    |     2 +-
 .../pkg/feature/resource/ResourceActivity.kt  |     8 +-
 .../utilcode/pkg/feature/rom/RomActivity.kt   |     2 +-
 .../pkg/feature/screen/ScreenActivity.kt      |    18 +-
 .../pkg/feature/sdcard/SDCardActivity.kt      |     2 +-
 .../pkg/feature/snackbar/SnackbarActivity.kt  |    28 +-
 .../pkg/feature/spStatic/SPStaticActivity.kt  |    16 +-
 .../utilcode/pkg/feature/span/SpanActivity.kt |   146 +-
 .../pkg/feature/toast/ToastActivity.kt        |    24 +-
 .../pkg/feature/vibrate/VibrateActivity.kt    |     2 +-
 .../res/drawable/click_shape_round_rect.xml   |     7 +
 .../src/main/res/layout/activity_click.xml    |    24 +
 .../main/res/layout/activity_util_core.xml    |    67 +-
 utilcode/pkg/src/main/res/values/strings.xml  |     9 +-
 108 files changed, 20276 insertions(+), 752 deletions(-)
 create mode 100644 subutil/export/.gitignore
 create mode 100644 subutil/export/build.gradle
 create mode 100644 subutil/export/proguard-rules.pro
 create mode 100644 subutil/export/src/main/AndroidManifest.xml
 create mode 100644 subutil/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java
 create mode 100644 subutil/lib/src/main/java/com/blankj/subutil/util/AppStoreUtils.java
 create mode 100644 subutil/lib/src/main/java/com/blankj/subutil/util/CountryUtils.java
 delete mode 100644 subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
 create mode 100644 subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt
 create mode 100644 subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/countryCode/CountryCodeActivity.kt
 create mode 100644 subutil/pkg/src/main/java/com/blankj/subutil/pkg/impl/SubUtilApiImpl.java
 create mode 100755 subutil/pkg/src/main/res/layout/activity_app_store.xml
 create mode 100755 subutil/pkg/src/main/res/layout/activity_country_code.xml
 create mode 100644 utilcode/export/.gitignore
 create mode 100644 utilcode/export/build.gradle
 create mode 100644 utilcode/export/proguard-rules.pro
 create mode 100644 utilcode/export/src/main/AndroidManifest.xml
 delete mode 100644 utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
 create mode 100644 utilcode/lib/src/main/java/com/blankj/utilcode/util/ClickUtils.java
 create mode 100644 utilcode/lib/src/main/java/com/blankj/utilcode/util/ViewUtils.java
 create mode 100644 utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt
 create mode 100644 utilcode/pkg/src/main/res/drawable/click_shape_round_rect.xml
 create mode 100644 utilcode/pkg/src/main/res/layout/activity_click.xml

diff --git a/gradle/config/config.gradle b/gradle/config/config.gradle
index f1f1b2a479..8ce373681b 100644
--- a/gradle/config/config.gradle
+++ b/gradle/config/config.gradle
@@ -8,8 +8,8 @@ gradle.ext {
     compileSdkVersion = 27
     minSdkVersion = 14
     targetSdkVersion = 27
-    versionCode = 1_024_002
-    versionName = '1.24.2'// E.g. 1.9.72 => 1,009,072
+    versionCode = 1_024_003
+    versionName = '1.24.3'// E.g. 1.9.72 => 1,009,072
 
     // lib version
     kotlin_version = '1.3.10'
@@ -33,10 +33,14 @@ gradle.ext {
             launcher_pkg               : new DepConfig(":launcher:pkg"),
             lib_base                   : new DepConfig(":lib:base"),
             lib_common                 : new DepConfig(":lib:common"),
+
             subutil_app                : new DepConfig(":subutil:app"),
+            subutil_export             : new DepConfig(":subutil:export"),
             subutil_lib                : new DepConfig(":subutil:lib"),
             subutil_pkg                : new DepConfig(":subutil:pkg"),
+
             utilcode_app               : new DepConfig(":utilcode:app"),
+            utilcode_export            : new DepConfig(":utilcode:export"),
             utilcode_lib               : new DepConfig(true/*是否本地调试*/, ":utilcode:lib", "com.blankj:utilcode:$versionName"),
             utilcode_pkg               : new DepConfig(":utilcode:pkg"),
 
diff --git a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
index 310b67e132..d51a2e0dee 100644
--- a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
+++ b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
@@ -55,18 +55,20 @@ class MainActivity : CommonDrawerActivity() {
         BarUtils.setStatusBarColor4Drawer(mBaseDrawerRootLayout, launcherMainFakeStatusBar, Color.TRANSPARENT, false)
         BarUtils.addMarginTopEqualStatusBarHeight(launcherMainToolbar)
 
-        launcherMainCoreUtilBtn.setOnClickListener {
-            BusUtils.postStatic("CoreUtilActivity#start", this)
-        }
-
-        launcherMainSubUtilBtn.setOnClickListener {
-            BusUtils.postStatic("SubUtilActivity#start", this)
-        }
+        applyDebouncingClickListener(
+                launcherMainCoreUtilBtn,
+                launcherMainSubUtilBtn
+        )
     }
 
     override fun doBusiness() {}
 
-    override fun onWidgetClick(view: View) {}
+    override fun onDebouncingClick(view: View) {
+        when (view.id) {
+            R.id.launcherMainCoreUtilBtn -> BusUtils.postStatic("CoreUtilActivity#start", this)
+            R.id.launcherMainSubUtilBtn -> BusUtils.postStatic("SubUtilActivity#start", this)
+        }
+    }
 
     override fun onBackPressed() {
         ActivityUtils.startHomeActivity()
diff --git a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/SplashActivity.kt b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/SplashActivity.kt
index 502aacd523..81f8dd019d 100644
--- a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/SplashActivity.kt
+++ b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/SplashActivity.kt
@@ -25,7 +25,7 @@ class SplashActivity : CommonBackActivity() {
         TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
 
-    override fun onWidgetClick(view: View) {
+    override fun onDebouncingClick(view: View) {
         TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
 }
\ No newline at end of file
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java
index c346f7c2d3..ef210d0e6b 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java
@@ -8,7 +8,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 
-import com.blankj.utilcode.util.AntiShakeUtils;
+import com.blankj.utilcode.util.ClickUtils;
 
 /**
  * 
@@ -21,6 +21,13 @@
 public abstract class BaseActivity extends AppCompatActivity
         implements IBaseView {
 
+    private View.OnClickListener mClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            onDebouncingClick(v);
+        }
+    };
+
     protected View     mContentView;
     protected Activity mActivity;
 
@@ -41,11 +48,9 @@ public void setRootLayout(@LayoutRes int layoutId) {
         setContentView(mContentView = LayoutInflater.from(this).inflate(layoutId, null));
     }
 
-    @Override
-    public void onClick(View view) {
-        if (AntiShakeUtils.isValid(view)) {
-            onWidgetClick(view);
-        }
+    public void applyDebouncingClickListener(View... views) {
+        ClickUtils.applyGlobalDebouncing(views, mClickListener);
+        ClickUtils.applyScale(views);
     }
 }
 
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java b/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java
index 85416a13fe..692ad8a213 100755
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java
@@ -15,7 +15,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import com.blankj.utilcode.util.AntiShakeUtils;
+import com.blankj.utilcode.util.ClickUtils;
 
 /**
  * 
@@ -31,12 +31,17 @@ public abstract class BaseFragment extends Fragment
     private static final String TAG                  = "BaseFragment";
     private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN";
 
+    private ClickUtils.OnDebouncingClickListener mDebouncingClick = new ClickUtils.OnDebouncingClickListener() {
+        @Override
+        public void onDebouncingClick(View v) {
+            BaseFragment.this.onDebouncingClick(v);
+        }
+    };
+
     protected Activity       mActivity;
     protected LayoutInflater mInflater;
     protected View           mContentView;
 
-    private long lastClick = 0;
-
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
@@ -113,9 +118,8 @@ public void onDestroy() {
         super.onDestroy();
     }
 
-    @Override
-    public void onClick(View view) {
-        if (AntiShakeUtils.isValid(view)) onWidgetClick(view);
+    public void applyDebouncingClickListener(View... views) {
+        ClickUtils.applyGlobalDebouncing(views, mDebouncingClick);
     }
 
     public  T findViewById(@IdRes int id) {
diff --git a/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java b/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java
index 29e8553899..d221737d07 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java
@@ -2,6 +2,7 @@
 
 import android.os.Bundle;
 import android.support.annotation.LayoutRes;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.view.View;
 
@@ -14,8 +15,7 @@
  *     desc  :
  * 
*/ -public interface IBaseView extends View.OnClickListener { - +public interface IBaseView { void initData(@Nullable Bundle bundle); @@ -27,5 +27,5 @@ public interface IBaseView extends View.OnClickListener { void doBusiness(); - void onWidgetClick(View view); + void onDebouncingClick(@NonNull View view); } diff --git a/subutil/export/.gitignore b/subutil/export/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/subutil/export/.gitignore @@ -0,0 +1 @@ +/build diff --git a/subutil/export/build.gradle b/subutil/export/build.gradle new file mode 100644 index 0000000000..8bee85e640 --- /dev/null +++ b/subutil/export/build.gradle @@ -0,0 +1,3 @@ +apply { + from "${rootDir.path}/gradle/config/configLib.gradle" +} \ No newline at end of file diff --git a/subutil/export/proguard-rules.pro b/subutil/export/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/subutil/export/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/subutil/export/src/main/AndroidManifest.xml b/subutil/export/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..de00a6d73e --- /dev/null +++ b/subutil/export/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/subutil/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java b/subutil/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java new file mode 100644 index 0000000000..cbc9e35c08 --- /dev/null +++ b/subutil/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java @@ -0,0 +1,16 @@ +package com.blankj.subutil.export.api; + +import android.content.Context; + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/06/09
+ *     desc  :
+ * 
+ */ +public interface SubUtilApi { + + void startSubUtilActivity(Context context); +} diff --git a/subutil/lib/build.gradle b/subutil/lib/build.gradle index 9dcbe0b542..1c7c5996c0 100644 --- a/subutil/lib/build.gradle +++ b/subutil/lib/build.gradle @@ -15,6 +15,7 @@ readme { dependencies { compileOnly gradle.ext.dep.support_appcompat_v7 compileOnly gradle.ext.dep.support_design + compileOnly gradle.ext.dep.utilcode_lib api(gradle.ext.dep.glide) { exclude group: "com.android.support" } diff --git a/subutil/lib/src/main/AndroidManifest.xml b/subutil/lib/src/main/AndroidManifest.xml index a698fc9a44..728d4495b0 100644 --- a/subutil/lib/src/main/AndroidManifest.xml +++ b/subutil/lib/src/main/AndroidManifest.xml @@ -1,11 +1 @@ - - - - - - + diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/AppStoreUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/AppStoreUtils.java new file mode 100644 index 0000000000..cf6e49cedc --- /dev/null +++ b/subutil/lib/src/main/java/com/blankj/subutil/util/AppStoreUtils.java @@ -0,0 +1,166 @@ +package com.blankj.subutil.util; + +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; +import android.text.TextUtils; +import android.util.Log; + +import com.blankj.utilcode.util.RomUtils; +import com.blankj.utilcode.util.Utils; + +import java.util.List; + +/** + *
+ *     author: Blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/05/20
+ *     desc  : utils about app store
+ * 
+ */ +public class AppStoreUtils { + + private static final String TAG = "AppStoreUtils"; + + private static final String GOOGLE_PLAY_APP_STORE_PACKAGE_NAME = "com.android.vending"; + + /** + * 获取跳转到应用商店的 Intent + * + * @return 跳转到应用商店的 Intent + */ + public static Intent getAppStoreIntent() { + return getAppStoreIntent(Utils.getApp().getPackageName(), false); + } + + /** + * 获取跳转到应用商店的 Intent + * + * @param isIncludeGooglePlayStore 是否包括 Google Play 商店 + * @return 跳转到应用商店的 Intent + */ + public static Intent getAppStoreIntent(boolean isIncludeGooglePlayStore) { + return getAppStoreIntent(Utils.getApp().getPackageName(), isIncludeGooglePlayStore); + } + + /** + * 获取跳转到应用商店的 Intent + * + * @param packageName 包名 + * @return 跳转到应用商店的 Intent + */ + public static Intent getAppStoreIntent(final String packageName) { + return getAppStoreIntent(packageName, false); + } + + /** + * 获取跳转到应用商店的 Intent + *

优先跳转到手机自带的应用市场

+ * + * @param packageName 包名 + * @param isIncludeGooglePlayStore 是否包括 Google Play 商店 + * @return 跳转到应用商店的 Intent + */ + public static Intent getAppStoreIntent(final String packageName, boolean isIncludeGooglePlayStore) { + if (RomUtils.isSamsung()) {// 三星单独处理跳转三星市场 + Intent samsungAppStoreIntent = getSamsungAppStoreIntent(packageName); + if (samsungAppStoreIntent != null) return samsungAppStoreIntent; + } + if (RomUtils.isLeeco()) {// 乐视单独处理跳转乐视市场 + Intent leecoAppStoreIntent = getLeecoAppStoreIntent(packageName); + if (leecoAppStoreIntent != null) return leecoAppStoreIntent; + } + + Uri uri = Uri.parse("market://details?id=" + packageName); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + List resolveInfos = Utils.getApp().getPackageManager() + .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); + if (resolveInfos == null || resolveInfos.size() == 0) { + Log.e(TAG, "No app store!"); + return null; + } + Intent googleIntent = null; + for (ResolveInfo resolveInfo : resolveInfos) { + String pkgName = resolveInfo.activityInfo.packageName; + if (!GOOGLE_PLAY_APP_STORE_PACKAGE_NAME.equals(pkgName)) { + if (isAppSystem(pkgName)) { + intent.setPackage(pkgName); + return intent; + } + } else { + intent.setPackage(GOOGLE_PLAY_APP_STORE_PACKAGE_NAME); + googleIntent = intent; + } + } + if (isIncludeGooglePlayStore && googleIntent != null) { + return googleIntent; + } + + intent.setPackage(resolveInfos.get(0).activityInfo.packageName); + return intent; + } + + private static boolean go2NormalAppStore(String packageName) { + Intent intent = getNormalAppStoreIntent(); + if (intent == null) return false; + intent.setData(Uri.parse("market://details?id=" + packageName)); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + Utils.getApp().startActivity(intent); + return true; + } + + private static Intent getNormalAppStoreIntent() { + Intent intent = new Intent(Intent.ACTION_VIEW); + Uri uri = Uri.parse("market://details?id=" + Utils.getApp().getPackageName()); + intent.setData(uri); + if (getAvailableIntentSize(intent) > 0) { + return intent; + } + return null; + } + + private static Intent getSamsungAppStoreIntent(final String packageName) { + Intent intent = new Intent(); + intent.setClassName("com.sec.android.app.samsungapps", "com.sec.android.app.samsungapps.Main"); + intent.setData(Uri.parse("http://www.samsungapps.com/appquery/appDetail.as?appId=" + packageName)); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + if (getAvailableIntentSize(intent) > 0) { + return intent; + } + return null; + } + + private static Intent getLeecoAppStoreIntent(final String packageName) { + Intent intent = new Intent(); + intent.setClassName("com.letv.app.appstore", "com.letv.app.appstore.appmodule.details.DetailsActivity"); + intent.setAction("com.letv.app.appstore.appdetailactivity"); + intent.putExtra("packageName", packageName); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + if (getAvailableIntentSize(intent) > 0) { + return intent; + } + return null; + } + + private static int getAvailableIntentSize(final Intent intent) { + return Utils.getApp().getPackageManager() + .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY) + .size(); + } + + private static boolean isAppSystem(final String packageName) { + if (TextUtils.isEmpty(packageName)) return false; + try { + PackageManager pm = Utils.getApp().getPackageManager(); + ApplicationInfo ai = pm.getApplicationInfo(packageName, 0); + return ai != null && (ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0; + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + return false; + } + } +} diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/ClipboardUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/ClipboardUtils.java index 6f94e8c466..69e5144e3b 100644 --- a/subutil/lib/src/main/java/com/blankj/subutil/util/ClipboardUtils.java +++ b/subutil/lib/src/main/java/com/blankj/subutil/util/ClipboardUtils.java @@ -6,6 +6,8 @@ import android.content.Intent; import android.net.Uri; +import com.blankj.utilcode.util.Utils; + /** *
  *     author: Blankj
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/CountryUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/CountryUtils.java
new file mode 100644
index 0000000000..dcb56b065c
--- /dev/null
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/CountryUtils.java
@@ -0,0 +1,303 @@
+package com.blankj.subutil.util;
+
+import android.content.Context;
+import android.telephony.TelephonyManager;
+
+import com.blankj.utilcode.util.Utils;
+
+import java.util.HashMap;
+
+/**
+ * 
+ *     author: Blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/06/11
+ *     desc  : utils about country code
+ * 
+ */ +public class CountryUtils { + + private static HashMap countryCodeMap; + + public static String getCountryCodeBySim(String defaultValue) { + String code = getCountryCodeFromMap().get(getCountryBySim()); + if (code == null) { + return defaultValue; + } + return code; + } + + public static String getCountryCodeByLanguage(String defaultValue) { + String code = getCountryCodeFromMap().get(getCountryByLanguage()); + if (code == null) { + return defaultValue; + } + return code; + } + + public static String getCountryByLanguage() { + return Utils.getApp().getResources().getConfiguration().locale.getCountry(); + } + + public static String getCountryBySim() { + TelephonyManager manager = (TelephonyManager) Utils.getApp().getSystemService(Context.TELEPHONY_SERVICE); + if (manager != null) { + return manager.getSimCountryIso().toUpperCase(); + } + return ""; + } + + private static HashMap getCountryCodeFromMap() { + if (countryCodeMap == null) { + countryCodeMap = new HashMap<>(256); + countryCodeMap.put("AL", "+355"); + countryCodeMap.put("DZ", "+213"); + countryCodeMap.put("AF", "+93"); + countryCodeMap.put("AR", "+54"); + countryCodeMap.put("AE", "+971"); + countryCodeMap.put("AW", "+297"); + countryCodeMap.put("OM", "+968"); + countryCodeMap.put("AZ", "+994"); + countryCodeMap.put("AC", "+247"); + countryCodeMap.put("EG", "+20"); + countryCodeMap.put("ET", "+251"); + countryCodeMap.put("IE", "+353"); + countryCodeMap.put("EE", "+372"); + countryCodeMap.put("AD", "+376"); + countryCodeMap.put("AO", "+244"); + countryCodeMap.put("AI", "+1"); + countryCodeMap.put("AG", "+1"); + countryCodeMap.put("AT", "+43"); + countryCodeMap.put("AX", "+358"); + countryCodeMap.put("AU", "+61"); + countryCodeMap.put("BB", "+1"); + countryCodeMap.put("PG", "+675"); + countryCodeMap.put("BS", "+1"); + countryCodeMap.put("PK", "+92"); + countryCodeMap.put("PY", "+595"); + countryCodeMap.put("PS", "+970"); + countryCodeMap.put("BH", "+973"); + countryCodeMap.put("PA", "+507"); + countryCodeMap.put("BR", "+55"); + countryCodeMap.put("BY", "+375"); + countryCodeMap.put("BM", "+1"); + countryCodeMap.put("BG", "+359"); + countryCodeMap.put("MP", "+1"); + countryCodeMap.put("BJ", "+229"); + countryCodeMap.put("BE", "+32"); + countryCodeMap.put("IS", "+354"); + countryCodeMap.put("PR", "+1"); + countryCodeMap.put("PL", "+48"); + countryCodeMap.put("BA", "+387"); + countryCodeMap.put("BO", "+591"); + countryCodeMap.put("BZ", "+501"); + countryCodeMap.put("BW", "+267"); + countryCodeMap.put("BT", "+975"); + countryCodeMap.put("BF", "+226"); + countryCodeMap.put("BI", "+257"); + countryCodeMap.put("KP", "+850"); + countryCodeMap.put("GQ", "+240"); + countryCodeMap.put("DK", "+45"); + countryCodeMap.put("DE", "+49"); + countryCodeMap.put("TL", "+670"); + countryCodeMap.put("TG", "+228"); + countryCodeMap.put("DO", "+1"); + countryCodeMap.put("DM", "+1"); + countryCodeMap.put("RU", "+7"); + countryCodeMap.put("EC", "+593"); + countryCodeMap.put("ER", "+291"); + countryCodeMap.put("FR", "+33"); + countryCodeMap.put("FO", "+298"); + countryCodeMap.put("PF", "+689"); + countryCodeMap.put("GF", "+594"); + countryCodeMap.put("VA", "+39"); + countryCodeMap.put("PH", "+63"); + countryCodeMap.put("FJ", "+679"); + countryCodeMap.put("FI", "+358"); + countryCodeMap.put("CV", "+238"); + countryCodeMap.put("FK", "+500"); + countryCodeMap.put("GM", "+220"); + countryCodeMap.put("CG", "+242"); + countryCodeMap.put("CD", "+243"); + countryCodeMap.put("CO", "+57"); + countryCodeMap.put("CR", "+506"); + countryCodeMap.put("GG", "+44"); + countryCodeMap.put("GD", "+1"); + countryCodeMap.put("GL", "+299"); + countryCodeMap.put("GE", "+995"); + countryCodeMap.put("CU", "+53"); + countryCodeMap.put("GP", "+590"); + countryCodeMap.put("GU", "+1"); + countryCodeMap.put("GY", "+592"); + countryCodeMap.put("KZ", "+7"); + countryCodeMap.put("HT", "+509"); + countryCodeMap.put("KR", "+82"); + countryCodeMap.put("NL", "+31"); + countryCodeMap.put("BQ", "+599"); + countryCodeMap.put("SX", "+1"); + countryCodeMap.put("ME", "+382"); + countryCodeMap.put("HN", "+504"); + countryCodeMap.put("KI", "+686"); + countryCodeMap.put("DJ", "+253"); + countryCodeMap.put("KG", "+996"); + countryCodeMap.put("GN", "+224"); + countryCodeMap.put("GW", "+245"); + countryCodeMap.put("CA", "+1"); + countryCodeMap.put("GH", "+233"); + countryCodeMap.put("GA", "+241"); + countryCodeMap.put("KH", "+855"); + countryCodeMap.put("CZ", "+420"); + countryCodeMap.put("ZW", "+263"); + countryCodeMap.put("CM", "+237"); + countryCodeMap.put("QA", "+974"); + countryCodeMap.put("KY", "+1"); + countryCodeMap.put("CC", "+61"); + countryCodeMap.put("KM", "+269"); + countryCodeMap.put("XK", "+383"); + countryCodeMap.put("CI", "+225"); + countryCodeMap.put("KW", "+965"); + countryCodeMap.put("HR", "+385"); + countryCodeMap.put("KE", "+254"); + countryCodeMap.put("CK", "+682"); + countryCodeMap.put("CW", "+599"); + countryCodeMap.put("LV", "+371"); + countryCodeMap.put("LS", "+266"); + countryCodeMap.put("LA", "+856"); + countryCodeMap.put("LB", "+961"); + countryCodeMap.put("LT", "+370"); + countryCodeMap.put("LR", "+231"); + countryCodeMap.put("LY", "+218"); + countryCodeMap.put("LI", "+423"); + countryCodeMap.put("RE", "+262"); + countryCodeMap.put("LU", "+352"); + countryCodeMap.put("RW", "+250"); + countryCodeMap.put("RO", "+40"); + countryCodeMap.put("MG", "+261"); + countryCodeMap.put("IM", "+44"); + countryCodeMap.put("MV", "+960"); + countryCodeMap.put("MT", "+356"); + countryCodeMap.put("MW", "+265"); + countryCodeMap.put("MY", "+60"); + countryCodeMap.put("ML", "+223"); + countryCodeMap.put("MK", "+389"); + countryCodeMap.put("MH", "+692"); + countryCodeMap.put("MQ", "+596"); + countryCodeMap.put("YT", "+262"); + countryCodeMap.put("MU", "+230"); + countryCodeMap.put("MR", "+222"); + countryCodeMap.put("US", "+1"); + countryCodeMap.put("AS", "+1"); + countryCodeMap.put("VI", "+1"); + countryCodeMap.put("MN", "+976"); + countryCodeMap.put("MS", "+1"); + countryCodeMap.put("BD", "+880"); + countryCodeMap.put("PE", "+51"); + countryCodeMap.put("FM", "+691"); + countryCodeMap.put("MM", "+95"); + countryCodeMap.put("MD", "+373"); + countryCodeMap.put("MA", "+212"); + countryCodeMap.put("MC", "+377"); + countryCodeMap.put("MZ", "+258"); + countryCodeMap.put("MX", "+52"); + countryCodeMap.put("NA", "+264"); + countryCodeMap.put("ZA", "+27"); + countryCodeMap.put("SS", "+211"); + countryCodeMap.put("NR", "+674"); + countryCodeMap.put("NI", "+505"); + countryCodeMap.put("NP", "+977"); + countryCodeMap.put("NE", "+227"); + countryCodeMap.put("NG", "+234"); + countryCodeMap.put("NU", "+683"); + countryCodeMap.put("NO", "+47"); + countryCodeMap.put("NF", "+672"); + countryCodeMap.put("PW", "+680"); + countryCodeMap.put("PT", "+351"); + countryCodeMap.put("JP", "+81"); + countryCodeMap.put("SE", "+46"); + countryCodeMap.put("CH", "+41"); + countryCodeMap.put("SV", "+503"); + countryCodeMap.put("WS", "+685"); + countryCodeMap.put("RS", "+381"); + countryCodeMap.put("SL", "+232"); + countryCodeMap.put("SN", "+221"); + countryCodeMap.put("CY", "+357"); + countryCodeMap.put("SC", "+248"); + countryCodeMap.put("SA", "+966"); + countryCodeMap.put("BL", "+590"); + countryCodeMap.put("CX", "+61"); + countryCodeMap.put("ST", "+239"); + countryCodeMap.put("SH", "+290"); + countryCodeMap.put("PN", "+870"); + countryCodeMap.put("KN", "+1"); + countryCodeMap.put("LC", "+1"); + countryCodeMap.put("MF", "+590"); + countryCodeMap.put("SM", "+378"); + countryCodeMap.put("PM", "+508"); + countryCodeMap.put("VC", "+1"); + countryCodeMap.put("LK", "+94"); + countryCodeMap.put("SK", "+421"); + countryCodeMap.put("SI", "+386"); + countryCodeMap.put("SJ", "+47"); + countryCodeMap.put("SZ", "+268"); + countryCodeMap.put("SD", "+249"); + countryCodeMap.put("SR", "+597"); + countryCodeMap.put("SB", "+677"); + countryCodeMap.put("SO", "+252"); + countryCodeMap.put("TJ", "+992"); + countryCodeMap.put("TH", "+66"); + countryCodeMap.put("TZ", "+255"); + countryCodeMap.put("TO", "+676"); + countryCodeMap.put("TC", "+1"); + countryCodeMap.put("TA", "+290"); + countryCodeMap.put("TT", "+1"); + countryCodeMap.put("TN", "+216"); + countryCodeMap.put("TV", "+688"); + countryCodeMap.put("TR", "+90"); + countryCodeMap.put("TM", "+993"); + countryCodeMap.put("TK", "+690"); + countryCodeMap.put("WF", "+681"); + countryCodeMap.put("VU", "+678"); + countryCodeMap.put("GT", "+502"); + countryCodeMap.put("VE", "+58"); + countryCodeMap.put("BN", "+673"); + countryCodeMap.put("UG", "+256"); + countryCodeMap.put("UA", "+380"); + countryCodeMap.put("UY", "+598"); + countryCodeMap.put("UZ", "+998"); + countryCodeMap.put("GR", "+30"); + countryCodeMap.put("ES", "+34"); + countryCodeMap.put("EH", "+212"); + countryCodeMap.put("SG", "+65"); + countryCodeMap.put("NC", "+687"); + countryCodeMap.put("NZ", "+64"); + countryCodeMap.put("HU", "+36"); + countryCodeMap.put("SY", "+963"); + countryCodeMap.put("JM", "+1"); + countryCodeMap.put("AM", "+374"); + countryCodeMap.put("YE", "+967"); + countryCodeMap.put("IQ", "+964"); + countryCodeMap.put("UM", "+1"); + countryCodeMap.put("IR", "+98"); + countryCodeMap.put("IL", "+972"); + countryCodeMap.put("IT", "+39"); + countryCodeMap.put("IN", "+91"); + countryCodeMap.put("ID", "+62"); + countryCodeMap.put("GB", "+44"); + countryCodeMap.put("VG", "+1"); + countryCodeMap.put("IO", "+246"); + countryCodeMap.put("JO", "+962"); + countryCodeMap.put("VN", "+84"); + countryCodeMap.put("ZM", "+260"); + countryCodeMap.put("JE", "+44"); + countryCodeMap.put("TD", "+235"); + countryCodeMap.put("GI", "+350"); + countryCodeMap.put("CL", "+56"); + countryCodeMap.put("CF", "+236"); + countryCodeMap.put("CN", "+86"); + countryCodeMap.put("MO", "+853"); + countryCodeMap.put("TW", "+886"); + countryCodeMap.put("HK", "+852"); + } + return countryCodeMap; + } +} diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java index 7ee8747902..1e81fcb203 100755 --- a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java +++ b/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java @@ -14,6 +14,8 @@ import android.support.annotation.RequiresPermission; import android.util.Log; +import com.blankj.utilcode.util.Utils; + import java.io.IOException; import java.util.List; import java.util.Locale; diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java deleted file mode 100644 index 9cbf4e06fd..0000000000 --- a/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java +++ /dev/null @@ -1,143 +0,0 @@ -package com.blankj.subutil.util; - -import android.annotation.SuppressLint; -import android.app.Application; -import android.content.ContentProvider; -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - -import java.lang.reflect.InvocationTargetException; - -/** - *
- *     author:
- *                                      ___           ___           ___         ___
- *         _____                       /  /\         /__/\         /__/|       /  /\
- *        /  /::\                     /  /::\        \  \:\       |  |:|      /  /:/
- *       /  /:/\:\    ___     ___    /  /:/\:\        \  \:\      |  |:|     /__/::\
- *      /  /:/~/::\  /__/\   /  /\  /  /:/~/::\   _____\__\:\   __|  |:|     \__\/\:\
- *     /__/:/ /:/\:| \  \:\ /  /:/ /__/:/ /:/\:\ /__/::::::::\ /__/\_|:|____    \  \:\
- *     \  \:\/:/~/:/  \  \:\  /:/  \  \:\/:/__\/ \  \:\~~\~~\/ \  \:\/:::::/     \__\:\
- *      \  \::/ /:/    \  \:\/:/    \  \::/       \  \:\  ~~~   \  \::/~~~~      /  /:/
- *       \  \:\/:/      \  \::/      \  \:\        \  \:\        \  \:\         /__/:/
- *        \  \::/        \__\/        \  \:\        \  \:\        \  \:\        \__\/
- *         \__\/                       \__\/         \__\/         \__\/
- *     blog  : http://blankj.com
- *     time  : 16/12/08
- *     desc  : utils about initialization
- * 
- */ -public final class Utils { - - @SuppressLint("StaticFieldLeak") - private static Application sApplication; - - private Utils() { - throw new UnsupportedOperationException("u can't instantiate me..."); - } - - /** - * Init utils. - *

Init it in the class of Application.

- * - * @param context context - */ - public static void init(final Context context) { - if (context == null) { - init(getApplicationByReflect()); - return; - } - init((Application) context.getApplicationContext()); - } - - /** - * Init utils. - *

Init it in the class of Application.

- * - * @param app application - */ - public static void init(final Application app) { - if (sApplication == null) { - if (app == null) { - Utils.sApplication = getApplicationByReflect(); - } else { - Utils.sApplication = app; - } - } - } - - /** - * Return the context of Application object. - * - * @return the context of Application object - */ - public static Application getApp() { - if (sApplication != null) return sApplication; - return getApplicationByReflect(); - } - - private static Application getApplicationByReflect() { - try { - @SuppressLint("PrivateApi") - Class activityThread = Class.forName("android.app.ActivityThread"); - Object at = activityThread.getMethod("currentActivityThread").invoke(null); - Object app = activityThread.getMethod("getApplication").invoke(at); - if (app == null) { - throw new NullPointerException("u should init first"); - } - init((Application) app); - return sApplication; - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - throw new NullPointerException("u should init first"); - } - - - public static final class ContentProvider4SubUtil extends ContentProvider { - - @Override - public boolean onCreate() { - Utils.init(getContext()); - return true; - } - - @Nullable - @Override - public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { - return null; - } - - @Nullable - @Override - public String getType(@NonNull Uri uri) { - return null; - } - - @Nullable - @Override - public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) { - return null; - } - - @Override - public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) { - return 0; - } - - @Override - public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) { - return 0; - } - } -} \ No newline at end of file diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java index b8624af490..6d6a76d53e 100644 --- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java +++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java @@ -66,11 +66,11 @@ private static class DefaultSSLSocketFactory extends SSLSocketFactory { new X509ExtendedTrustManager() { @SuppressLint("TrustAllX509TrustManager") @Override - public void checkClientTrusted(X509Certificate[] chain, String authType) { /**/ } + public void checkClientTrusted(X509Certificate[] chain, String authType) {/**/} @SuppressLint("TrustAllX509TrustManager") @Override - public void checkServerTrusted(X509Certificate[] chain, String authType) { /**/ } + public void checkServerTrusted(X509Certificate[] chain, String authType) {/**/} @Override public X509Certificate[] getAcceptedIssuers() { @@ -79,19 +79,19 @@ public X509Certificate[] getAcceptedIssuers() { @SuppressLint("TrustAllX509TrustManager") @Override - public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) { /**/ } + public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) {/**/} @SuppressLint("TrustAllX509TrustManager") @Override - public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) { /**/ } + public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) {/**/} @SuppressLint("TrustAllX509TrustManager") @Override - public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { /**/ } + public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) {/**/} @SuppressLint("TrustAllX509TrustManager") @Override - public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { /**/ } + public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) {/**/} } }; } else { @@ -99,11 +99,11 @@ public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngi new X509TrustManager() { @SuppressLint("TrustAllX509TrustManager") @Override - public void checkClientTrusted(X509Certificate[] chain, String authType) { /**/ } + public void checkClientTrusted(X509Certificate[] chain, String authType) {/**/} @SuppressLint("TrustAllX509TrustManager") @Override - public void checkServerTrusted(X509Certificate[] chain, String authType) { /**/ } + public void checkServerTrusted(X509Certificate[] chain, String authType) {/**/} @Override public X509Certificate[] getAcceptedIssuers() { diff --git a/subutil/lib/src/test/java/com/blankj/subutil/util/http/nodeServer/node_modules/npm/node_modules/extend/index.js b/subutil/lib/src/test/java/com/blankj/subutil/util/http/nodeServer/node_modules/npm/node_modules/extend/index.js index 2aa3faae68..278b7467da 100644 --- a/subutil/lib/src/test/java/com/blankj/subutil/util/http/nodeServer/node_modules/npm/node_modules/extend/index.js +++ b/subutil/lib/src/test/java/com/blankj/subutil/util/http/nodeServer/node_modules/npm/node_modules/extend/index.js @@ -28,7 +28,7 @@ var isPlainObject = function isPlainObject(obj) { // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. var key; - for (key in obj) { /**/ } + for (key in obj) {/**/} return typeof key === 'undefined' || hasOwn.call(obj, key); }; diff --git a/subutil/pkg/build.gradle b/subutil/pkg/build.gradle index 637f119cc4..2d7d216427 100644 --- a/subutil/pkg/build.gradle +++ b/subutil/pkg/build.gradle @@ -4,5 +4,6 @@ apply { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) + api gradle.ext.dep.subutil_export api gradle.ext.dep.lib_common } \ No newline at end of file diff --git a/subutil/pkg/src/main/AndroidManifest.xml b/subutil/pkg/src/main/AndroidManifest.xml index 160ed14737..70df2a010c 100644 --- a/subutil/pkg/src/main/AndroidManifest.xml +++ b/subutil/pkg/src/main/AndroidManifest.xml @@ -11,6 +11,14 @@ android:name=".feature.SubUtilActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:launchMode="singleTop" /> + + AppStoreActivity.start(this) + R.id.subUtilCountryCodeBtn -> CountryCodeActivity.start(this) + R.id.subUtilLocationBtn -> LocationActivity.start(this) + R.id.subUtilPinyinBtn -> PinyinActivity.start(this) + } } } diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt new file mode 100644 index 0000000000..49df646b3e --- /dev/null +++ b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt @@ -0,0 +1,55 @@ +package com.blankj.subutil.pkg.feature.appStore + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.view.View +import com.blankj.lib.common.CommonTitleActivity +import com.blankj.subutil.pkg.R +import com.blankj.subutil.util.AppStoreUtils +import com.blankj.utilcode.util.ActivityUtils +import kotlinx.android.synthetic.main.activity_app_store.* + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 17/02/01 + * desc : demo about PinyinUtils + * ``` + */ +class AppStoreActivity : CommonTitleActivity() { + + companion object { + fun start(context: Context) { + val starter = Intent(context, AppStoreActivity::class.java) + context.startActivity(starter) + } + } + + override fun bindTitle(): CharSequence { + return getString(R.string.demo_app_store) + } + + override fun initData(bundle: Bundle?) {} + + override fun bindLayout(): Int { + return R.layout.activity_app_store + } + + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + applyDebouncingClickListener(appStoreSystem) + } + + override fun doBusiness() {} + + override fun onDebouncingClick(view: View) { + when (view.id) { + R.id.appStoreSystem -> { + AppStoreUtils.getAppStoreIntent("com.tencent.mm")?.apply { + ActivityUtils.startActivity(this) + } + } + } + } +} diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/countryCode/CountryCodeActivity.kt b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/countryCode/CountryCodeActivity.kt new file mode 100644 index 0000000000..6b5b380e5c --- /dev/null +++ b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/countryCode/CountryCodeActivity.kt @@ -0,0 +1,52 @@ +package com.blankj.subutil.pkg.feature.countryCode + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.view.View +import com.blankj.lib.common.CommonTitleActivity +import com.blankj.subutil.pkg.R +import com.blankj.subutil.util.CountryUtils +import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_country_code.* + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 17/02/01 + * desc : demo about PinyinUtils + * ``` + */ +class CountryCodeActivity : CommonTitleActivity() { + + companion object { + fun start(context: Context) { + val starter = Intent(context, CountryCodeActivity::class.java) + context.startActivity(starter) + } + } + + override fun bindTitle(): CharSequence { + return getString(R.string.demo_country_code) + } + + override fun initData(bundle: Bundle?) {} + + override fun bindLayout(): Int { + return R.layout.activity_country_code + } + + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + SpanUtils.with(countryCodeAboutTv) + .appendLine("getCountryByLanguage: " + CountryUtils.getCountryByLanguage()) + .appendLine("getCountryBySim: " + CountryUtils.getCountryBySim()) + .appendLine("getCountryCodeByLanguage: " + CountryUtils.getCountryCodeByLanguage("Default")) + .appendLine("getCountryCodeBySim: " + CountryUtils.getCountryCodeBySim("Default")) + .create() + } + + override fun doBusiness() {} + + override fun onDebouncingClick(view: View) {} +} diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt index 0bba8f7249..55ceba2c92 100755 --- a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt +++ b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt @@ -90,7 +90,7 @@ class LocationActivity : CommonTitleActivity() { bindService(Intent(this, LocationService::class.java), conn, Context.BIND_AUTO_CREATE) } - override fun onWidgetClick(view: View) {} + override fun onDebouncingClick(view: View) {} override fun onDestroy() { unbindService(conn) diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt index 11ff994eca..655b492f8f 100644 --- a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt +++ b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt @@ -60,5 +60,5 @@ class PinyinActivity : CommonTitleActivity() { override fun doBusiness() {} - override fun onWidgetClick(view: View) {} + override fun onDebouncingClick(view: View) {} } diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/impl/SubUtilApiImpl.java b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/impl/SubUtilApiImpl.java new file mode 100644 index 0000000000..73d8d06347 --- /dev/null +++ b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/impl/SubUtilApiImpl.java @@ -0,0 +1,23 @@ +package com.blankj.subutil.pkg.impl; + +import android.content.Context; + +import com.blankj.subutil.export.api.SubUtilApi; +import com.blankj.subutil.pkg.feature.SubUtilActivity; + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/06/09
+ *     desc  :
+ * 
+ */ +public class SubUtilApiImpl implements SubUtilApi { + + @Override + public void startSubUtilActivity(Context context) { + SubUtilActivity.Companion.start(context); + } + +} diff --git a/subutil/pkg/src/main/res/layout/activity_app_store.xml b/subutil/pkg/src/main/res/layout/activity_app_store.xml new file mode 100755 index 0000000000..967593131f --- /dev/null +++ b/subutil/pkg/src/main/res/layout/activity_app_store.xml @@ -0,0 +1,16 @@ + + + +
*/ -public abstract class BaseItem> { +public abstract class BaseItem { private static final SparseIntArray LAYOUT_SPARSE_ARRAY = new SparseIntArray(); private static final SparseArray VIEW_SPARSE_ARRAY = new SparseArray<>(); @@ -80,12 +80,12 @@ private int getViewTypeByView(@NonNull View view) { } public void update() { - int index = getIndex(); - if (index == -1) return; - getAdapter().notifyItemChanged(index); + //noinspection unchecked + getAdapter().updateItem((T) this); } public int getIndex() { + //noinspection SuspiciousMethodCalls return getAdapter().getItems().indexOf(this); } } diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/base/rv/BaseItemAdapter.java b/lib/utildebug/src/main/java/com/blankj/utildebug/base/rv/BaseItemAdapter.java index 0a86944237..85d6b62cab 100644 --- a/lib/utildebug/src/main/java/com/blankj/utildebug/base/rv/BaseItemAdapter.java +++ b/lib/utildebug/src/main/java/com/blankj/utildebug/base/rv/BaseItemAdapter.java @@ -17,9 +17,9 @@ * desc : *
*/ -public class BaseItemAdapter> extends RecyclerView.Adapter { +public class BaseItemAdapter extends RecyclerView.Adapter { - public List mItems; + public List mItems; private RecyclerView mRecyclerView; public BaseItemAdapter() { @@ -150,6 +150,17 @@ public int removeItemById(final long id, boolean notifyRemoved) { // operate /////////////////////////////////////////////////////////////////////////// + public void updateItem(@NonNull final Item item) { + int itemIndex = mItems.indexOf(item); + if (itemIndex != -1) { + notifyItemChanged(itemIndex); + } + } + + public void updateItem(@IntRange(from = 0) final int index) { + notifyItemChanged(index); + } + public void addItem(@NonNull final Item item) { addItem(item, false); } @@ -210,10 +221,10 @@ public boolean replaceItems(@NonNull final List items) { return replaceItems(items, false); } - public boolean replaceItems(@NonNull final List items, boolean notifyDataSetChanged) { + public boolean replaceItems(@NonNull final List items, boolean notifyChanged) { mItems.clear(); boolean added = mItems.addAll(items); - if (notifyDataSetChanged) notifyDataSetChanged(); + if (notifyChanged) notifyDataSetChanged(); return added; } @@ -227,12 +238,12 @@ public Item removeItem(@IntRange(from = 0) final int index, boolean notifyRemove return removedItem; } - public int removeItem(@NonNull final Item object) { - return removeItem(object, false); + public int removeItem(@NonNull final Item item) { + return removeItem(item, false); } - public int removeItem(@NonNull final Item object, boolean notifyRemoved) { - int itemIndex = mItems.indexOf(object); + public int removeItem(@NonNull final Item item, boolean notifyRemoved) { + int itemIndex = mItems.indexOf(item); if (itemIndex != -1) { mItems.remove(itemIndex); if (notifyRemoved) notifyItemRemoved(itemIndex); diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/BaseContentFloatView.java b/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/BaseContentFloatView.java index bf61920d29..c1d956eb40 100644 --- a/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/BaseContentFloatView.java +++ b/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/BaseContentFloatView.java @@ -1,5 +1,6 @@ package com.blankj.utildebug.base.view; +import android.content.res.Configuration; import android.graphics.drawable.Drawable; import android.support.annotation.LayoutRes; import android.support.annotation.StringRes; @@ -9,6 +10,7 @@ import android.view.ViewGroup; import android.view.WindowManager; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; @@ -16,11 +18,11 @@ import com.blankj.utilcode.util.ClickUtils; import com.blankj.utilcode.util.SizeUtils; import com.blankj.utilcode.util.StringUtils; +import com.blankj.utilcode.util.TouchUtils; import com.blankj.utildebug.R; -import com.blankj.utildebug.base.drawable.ShadowUtils; import com.blankj.utildebug.base.view.listener.OnRefreshListener; import com.blankj.utildebug.config.DebugConfig; -import com.blankj.utildebug.helper.TouchHelper; +import com.blankj.utildebug.helper.ShadowHelper; import com.blankj.utildebug.helper.WindowHelper; import java.util.Stack; @@ -37,6 +39,7 @@ public abstract class BaseContentFloatView> ex private static final int ROTATE_DELAY = 30; + private LinearLayout bcfRootLayout; private RelativeLayout bcfTitleRl; private ImageView bcfCloseIv; private TextView bcfTitleTv; @@ -44,7 +47,6 @@ public abstract class BaseContentFloatView> ex private SwipePanel swipePanel; private BaseContentView mContentView; - private int mTitleBarHeight; private OnRefreshListener mRefreshListener; private Runnable mRotateRunnable = new Runnable() { @Override @@ -74,10 +76,11 @@ public int bindLayout() { } public BaseContentFloatView() { + bcfRootLayout = findViewById(R.id.bcfRootLayout); + ShadowHelper.applyFloatView(bcfRootLayout); + initTitleBar(); initSwipePanel(); - View bcfRootLl = findViewById(R.id.bcfRootLl); - ShadowUtils.apply(bcfRootLl, new ShadowUtils.Builder().setShadowRadius(SizeUtils.dp2px(8))); if (bindContentLayout() != NO_ID) { //noinspection unchecked @@ -92,20 +95,6 @@ public void onAttach() { } }.attach((T) this, true); } - - if (mLayoutParams.height == WindowManager.LayoutParams.WRAP_CONTENT) { - post(new Runnable() { - @Override - public void run() { - int contentHeight = 0; - if (mContentView != null) { - contentHeight = mContentView.getHeight(); - } - mLayoutParams.height = contentHeight + bcfTitleRl.getHeight() + SizeUtils.dp2px(8 + 8 + 4); - WindowHelper.updateViewLayout(BaseContentFloatView.this, mLayoutParams); - } - }); - } } public void setTitle(CharSequence title) { @@ -165,9 +154,9 @@ public BaseContentView getContentView() { @Override protected void onDetachedFromWindow() { - DebugConfig.saveFloatViewY(this, mLayoutParams.y); - DebugConfig.saveFloatViewHeight(this, mLayoutParams.height); - DebugConfig.saveFloatViewAlpha(this, mLayoutParams.alpha); + DebugConfig.saveViewY(this, mLayoutParams.y); + DebugConfig.saveViewHeight(this, mLayoutParams.height); + DebugConfig.saveViewAlpha(this, mLayoutParams.alpha); super.onDetachedFromWindow(); } @@ -188,23 +177,15 @@ private void initTitleBar() { bcfTitleTv = findViewById(R.id.bcfTitleTv); bcfAdjustIv = findViewById(R.id.bcfAdjustIv); - bcfCloseIv.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - dismiss(); - } - }); - ClickUtils.applyPressedBgDark(bcfTitleRl); - ClickUtils.applyPressedBgDark(bcfCloseIv, 0.8f); - ClickUtils.applyPressedBgDark(bcfAdjustIv, 0.8f); - bcfTitleTv.setText(bindTitle()); + ClickUtils.applyPressedBgDark(bcfTitleRl); bcfTitleRl.setOnClickListener(new ClickUtils.OnMultiClickListener(2) { @Override public void onTriggerClick(View v) { mLayoutParams.alpha = mLayoutParams.alpha == 0.5f ? 1f : 0.5f; WindowHelper.updateViewLayout(BaseContentFloatView.this, mLayoutParams); + DebugConfig.saveViewAlpha(BaseContentFloatView.this, mLayoutParams.alpha); } @Override @@ -214,53 +195,76 @@ public void onBeforeTriggerClick(View v, int count) { } } }); - TouchHelper.applyDrag(bcfTitleRl, new TouchHelper.OnDragListener() { + TouchUtils.setOnTouchListener(bcfTitleRl, new TouchUtils.OnTouchUtilsListener() { @Override - public void onDown(View v, int x, int y, MotionEvent event) { + public boolean onDown(View view, int x, int y, MotionEvent event) { + return true; } @Override - public void onMove(View view, int x, int y, int dx, int dy, MotionEvent event) { -// bcfTitleTv.setText("(" + mLayoutParams.x + ", " + mLayoutParams.y + ")" + mLayoutParams.height); - mLayoutParams.y = Math.min(Math.max(mLayoutParams.y - dy, 0), WindowHelper.getAppWindowHeight() - getWindowHeight()); + public boolean onMove(View view, int direction, int x, int y, int dx, int dy, int totalX, int totalY, MotionEvent event) { + mLayoutParams.y = Math.min(Math.max(mLayoutParams.y + dy, 0), WindowHelper.getAppWindowHeight() - bcfRootLayout.getHeight()); WindowHelper.updateViewLayout(BaseContentFloatView.this, mLayoutParams); + return true; } @Override - public void onStop(View view, int x, int y, MotionEvent event) { + public boolean onStop(View view, int direction, int x, int y, int totalX, int totalY, int vx, int vy, MotionEvent event) { + DebugConfig.saveViewY(BaseContentFloatView.this, mLayoutParams.y); + return true; } }); + ClickUtils.applyPressedBgDark(bcfCloseIv, 0.8f); + bcfCloseIv.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + } + }); + + ClickUtils.applyPressedBgDark(bcfAdjustIv, 0.8f); bcfAdjustIv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { FloatToast.showLong(FloatToast.WARNING, StringUtils.getString(R.string.du_adjust_tips)); } }); - TouchHelper.applyDrag(bcfAdjustIv, new TouchHelper.OnDragListener() { + TouchUtils.setOnTouchListener(bcfAdjustIv, new TouchUtils.OnTouchUtilsListener() { + + private int minHeight; @Override - public void onDown(View v, int x, int y, MotionEvent event) { - if (mTitleBarHeight == 0) { - mTitleBarHeight = findViewById(R.id.bcfTitleRl).getHeight(); - } + public boolean onDown(View view, int x, int y, MotionEvent event) { + int[] locations = new int[2]; + getLocationOnScreen(locations); + mLayoutParams.height = WindowHelper.getAppWindowHeight() - locations[1]; + WindowHelper.updateViewLayout(BaseContentFloatView.this, mLayoutParams); + + minHeight = bcfTitleRl.getHeight() + SizeUtils.dp2px(30); + return true; } @Override - public void onMove(View view, int x, int y, int dx, int dy, MotionEvent event) { -// bcfTitleTv.setText("(" + mLayoutParams.x + ", " + mLayoutParams.y + ")" + mLayoutParams.height); - mLayoutParams.height = Math.min(Math.max(getWindowHeight() - dy, mTitleBarHeight + SizeUtils.dp2px(30)), WindowHelper.getAppWindowHeight() - mLayoutParams.y); - WindowHelper.updateViewLayout(BaseContentFloatView.this, mLayoutParams); + public boolean onMove(View view, int direction, int x, int y, int dx, final int dy, int totalX, int totalY, MotionEvent event) { + ViewGroup.LayoutParams layoutParams = bcfRootLayout.getLayoutParams(); + layoutParams.height = Math.min(Math.max(bcfRootLayout.getHeight() + dy, minHeight), mLayoutParams.height); + bcfRootLayout.setLayoutParams(layoutParams); + return true; } @Override - public void onStop(View view, int x, int y, MotionEvent event) { + public boolean onStop(View view, int direction, int x, int y, int totalX, int totalY, int vx, int vy, MotionEvent event) { + mLayoutParams.height = bcfRootLayout.getHeight(); + WindowHelper.updateViewLayout(BaseContentFloatView.this, mLayoutParams); + DebugConfig.saveViewHeight(BaseContentFloatView.this, mLayoutParams.height); + return true; } }); } private void initSwipePanel() { - swipePanel = findViewById(R.id.baseFloatSwipePanel); + swipePanel = findViewById(R.id.bcfSwipePanel); swipePanel.setOnFullSwipeListener(new SwipePanel.OnFullSwipeListener() { @Override public void onFullSwipe(int direction) { @@ -304,18 +308,39 @@ private void stopRotate() { @Override protected void onCreateLayoutParams() { super.onCreateLayoutParams(); - mLayoutParams.gravity = Gravity.CENTER | Gravity.BOTTOM; + mLayoutParams.gravity = Gravity.TOP; mLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + mLayoutParams.height = DebugConfig.getViewHeight(BaseContentFloatView.this, WindowManager.LayoutParams.WRAP_CONTENT); mLayoutParams.windowAnimations = R.style.FloatAnimation; - mLayoutParams.height = DebugConfig.getFloatViewHeight(this); - mLayoutParams.y = DebugConfig.getFloatViewY(this); - mLayoutParams.alpha = DebugConfig.getFloatViewAlpha(this); + mLayoutParams.alpha = DebugConfig.getViewAlpha(this); + mLayoutParams.y = DebugConfig.getViewY(this); + post(new Runnable() { + @Override + public void run() { + wrapWindow(); + } + }); } - private int getWindowHeight() { - if (mLayoutParams.height == WindowManager.LayoutParams.WRAP_CONTENT) { - return BaseContentFloatView.this.getHeight(); + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + wrapWindow(); + } + + private void wrapWindow() { + int[] locations = new int[2]; + getLocationOnScreen(locations); + int floatViewHeight = DebugConfig.getViewHeight(BaseContentFloatView.this, bcfRootLayout.getHeight()); + if (locations[1] + floatViewHeight > WindowHelper.getAppWindowHeight()) { + floatViewHeight = WindowHelper.getAppWindowHeight() - locations[1]; } - return mLayoutParams.height; + mLayoutParams.height = floatViewHeight; + + WindowHelper.updateViewLayout(BaseContentFloatView.this, mLayoutParams); + + ViewGroup.LayoutParams layoutParams = bcfRootLayout.getLayoutParams(); + layoutParams.height = mLayoutParams.height; + bcfRootLayout.setLayoutParams(layoutParams); } } \ No newline at end of file diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/BaseFloatView.java b/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/BaseFloatView.java index 70c21d3a6f..4db1374806 100644 --- a/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/BaseFloatView.java +++ b/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/BaseFloatView.java @@ -11,7 +11,6 @@ import com.blankj.utilcode.util.ActivityUtils; import com.blankj.utilcode.util.AppUtils; -import com.blankj.utilcode.util.LogUtils; import com.blankj.utilcode.util.Utils; import com.blankj.utildebug.DebugUtils; import com.blankj.utildebug.R; @@ -39,10 +38,10 @@ public abstract class BaseFloatView extends RelativeLayout public BaseFloatView() { super(DebugUtils.getApp()); setId(R.id.baseFloatView); - inflate(getContext(), bindLayout(), this); + if (bindLayout() != NO_ID) { + inflate(getContext(), bindLayout(), this); + } onCreateLayoutParams(); - -// ShadowHelper.applyFloatView(this); } void createFloatView() { @@ -60,6 +59,11 @@ protected void onCreateLayoutParams() { } mLayoutParams.format = PixelFormat.TRANSPARENT; mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; + try { + int currentFlags = (Integer) mLayoutParams.getClass().getField("privateFlags").get(mLayoutParams); + mLayoutParams.getClass().getField("privateFlags").set(mLayoutParams, currentFlags | 0x00000040); + } catch (Exception ignore) { + } } public void show() { @@ -78,7 +82,7 @@ public WindowManager.LayoutParams getLayoutParams() { @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - AppUtils.registerAppStatusChangedListener(this, this); + AppUtils.registerAppStatusChangedListener(this); } @Override @@ -88,12 +92,12 @@ protected void onDetachedFromWindow() { } @Override - public void onForeground() { + public void onForeground(Activity activity) { setVisibility(VISIBLE); } @Override - public void onBackground() { + public void onBackground(Activity activity) { setVisibility(GONE); } diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/FloatEditText.java b/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/FloatEditText.java index f70c31ea8a..9bb78cefd5 100644 --- a/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/FloatEditText.java +++ b/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/FloatEditText.java @@ -56,7 +56,8 @@ public void bindFloatView(final BaseContentFloatView floatView) { public void onFocusChange(View v, boolean hasFocus) { WindowManager.LayoutParams params = floatView.getLayoutParams(); if ((params.flags & WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) == WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) { - params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; + params.flags = params.flags & ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; + params.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; WindowHelper.updateViewLayout(floatView, params); KeyboardUtils.showSoftInput(v); } diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/FloatViewManager.java b/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/FloatViewManager.java index fea236749d..59a3b4c494 100644 --- a/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/FloatViewManager.java +++ b/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/FloatViewManager.java @@ -2,6 +2,7 @@ import android.view.WindowManager; +import com.blankj.utilcode.util.Utils; import com.blankj.utildebug.helper.WindowHelper; import java.util.ArrayList; @@ -31,16 +32,26 @@ private static final class LazyHolder { private static final FloatViewManager INSTANCE = new FloatViewManager(); } - public void show(BaseFloatView view) { - if (mFloatViews.contains(view)) return; - view.createFloatView(); - mWM.addView(view, view.getLayoutParams()); - mFloatViews.add(view); + public void show(final BaseFloatView view) { + Utils.runOnUiThread(new Runnable() { + @Override + public void run() { + if (mFloatViews.contains(view)) return; + view.createFloatView(); + mWM.addView(view, view.getLayoutParams()); + mFloatViews.add(view); + } + }); } - public void dismiss(BaseFloatView view) { - if (!mFloatViews.contains(view)) return; - mWM.removeView(view); - mFloatViews.remove(view); + public void dismiss(final BaseFloatView view) { + Utils.runOnUiThread(new Runnable() { + @Override + public void run() { + if (!mFloatViews.contains(view)) return; + mWM.removeView(view); + mFloatViews.remove(view); + } + }); } } diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/config/DebugConfig.java b/lib/utildebug/src/main/java/com/blankj/utildebug/config/DebugConfig.java index 6933dee4a2..6d15b4fc3b 100644 --- a/lib/utildebug/src/main/java/com/blankj/utildebug/config/DebugConfig.java +++ b/lib/utildebug/src/main/java/com/blankj/utildebug/config/DebugConfig.java @@ -1,10 +1,9 @@ package com.blankj.utildebug.config; -import android.view.WindowManager; +import android.view.View; import com.blankj.utilcode.util.SPUtils; import com.blankj.utilcode.util.ScreenUtils; -import com.blankj.utildebug.base.view.BaseContentFloatView; /** *
@@ -44,28 +43,64 @@ public static boolean isNoMoreReminder() {
         return getSp().getBoolean(NO_MORE_REMINDER, false);
     }
 
-    public static void saveFloatViewY(BaseContentFloatView floatView, int y) {
-        getSp().put(floatView.getClass().getSimpleName() + ".y", y);
+    public static void saveViewY(View view, int y) {
+        if (ScreenUtils.isPortrait()) {
+            getSp().put(view.getClass().getSimpleName() + ".yP", y);
+        } else {
+            getSp().put(view.getClass().getSimpleName() + ".yL", y);
+        }
     }
 
-    public static int getFloatViewY(BaseContentFloatView floatView) {
-        return getSp().getInt(floatView.getClass().getSimpleName() + ".y", 0);
+    public static int getViewY(View view) {
+        return getViewY(view, 0);
     }
 
-    public static void saveFloatViewHeight(BaseContentFloatView floatView, int height) {
-        getSp().put(floatView.getClass().getSimpleName() + ".height", height);
+    public static int getViewY(View view, int defaultVal) {
+        if (ScreenUtils.isPortrait()) {
+            return getSp().getInt(view.getClass().getSimpleName() + ".yP", defaultVal);
+        } else {
+            return getSp().getInt(view.getClass().getSimpleName() + ".yL", defaultVal);
+        }
     }
 
-    public static int getFloatViewHeight(BaseContentFloatView floatView) {
-        return getSp().getInt(floatView.getClass().getSimpleName() + ".height", WindowManager.LayoutParams.WRAP_CONTENT);
+    public static void saveViewX(View view, int x) {
+        if (ScreenUtils.isPortrait()) {
+            getSp().put(view.getClass().getSimpleName() + ".xP", x);
+        } else {
+            getSp().put(view.getClass().getSimpleName() + ".xL", x);
+        }
     }
 
-    public static void saveFloatViewAlpha(BaseContentFloatView floatView, float alpha) {
-        getSp().put(floatView.getClass().getSimpleName() + ".alpha", alpha);
+    public static int getViewX(View view) {
+        if (ScreenUtils.isPortrait()) {
+            return getSp().getInt(view.getClass().getSimpleName() + ".xP");
+        } else {
+            return getSp().getInt(view.getClass().getSimpleName() + ".xL");
+        }
     }
 
-    public static float getFloatViewAlpha(BaseContentFloatView floatView) {
-        return getSp().getFloat(floatView.getClass().getSimpleName() + ".alpha", 1f);
+    public static void saveViewHeight(View view, int height) {
+        if (ScreenUtils.isPortrait()) {
+            getSp().put(view.getClass().getSimpleName() + ".heightP", height);
+        } else {
+            getSp().put(view.getClass().getSimpleName() + ".heightL", height);
+        }
+    }
+
+    public static int getViewHeight(View view, int height) {
+        if (ScreenUtils.isPortrait()) {
+            return getSp().getInt(view.getClass().getSimpleName() + ".heightP", height);
+        } else {
+            return getSp().getInt(view.getClass().getSimpleName() + ".heightL", height);
+        }
+    }
+
+    public static void saveViewAlpha(View view, float alpha) {
+        getSp().put(view.getClass().getSimpleName() + ".alpha", alpha);
+    }
+
+    public static float getViewAlpha(View view) {
+        return getSp().getFloat(view.getClass().getSimpleName() + ".alpha", 1f);
     }
 
     private static SPUtils getSp() {
diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/appInfo/AppInfoItem.java b/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/appInfo/AppInfoItem.java
index 91d3f78909..1b2c9a0d94 100644
--- a/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/appInfo/AppInfoItem.java
+++ b/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/appInfo/AppInfoItem.java
@@ -54,7 +54,7 @@ public void bind(@NonNull ItemViewHolder holder, int position) {
         titleTv.setText(mTitle);
         contentTv.setText(mContent);
         if (mListener != null) {
-            ClickUtils.applyPressedViewScale(holder.itemView);
+            ClickUtils.applyPressedBgDark(holder.itemView);
             ClickUtils.applyGlobalDebouncing(holder.itemView, mListener);
             holder.findViewById(R.id.baseInfoGoIv).setVisibility(View.VISIBLE);
         } else {
diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/deviceInfo/DeviceInfoItem.java b/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/deviceInfo/DeviceInfoItem.java
index b1346f3157..a6c8396752 100644
--- a/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/deviceInfo/DeviceInfoItem.java
+++ b/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/deviceInfo/DeviceInfoItem.java
@@ -58,7 +58,7 @@ public void bind(@NonNull ItemViewHolder holder, int position) {
         titleTv.setText(mTitle);
         contentTv.setText(mContent);
         if (mListener != null) {
-            ClickUtils.applyPressedViewScale(holder.itemView);
+            ClickUtils.applyPressedBgDark(holder.itemView);
             ClickUtils.applyGlobalDebouncing(holder.itemView, mListener);
             holder.findViewById(R.id.baseInfoGoIv).setVisibility(View.VISIBLE);
         } else {
diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/fileExplorer/FileContentView.java b/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/fileExplorer/FileContentView.java
index bce2f3b5b8..bb8ff191bc 100644
--- a/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/fileExplorer/FileContentView.java
+++ b/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/fileExplorer/FileContentView.java
@@ -54,6 +54,10 @@ public void onAttach() {
         fileExplorerSearchEt = findViewById(R.id.fileExplorerSearchEt);
         fileExplorerRv = findViewById(R.id.fileExplorerRv);
 
+        if (FileItem.isEmptyItems(mSrcItems)) {
+            fileExplorerSearchEt.setVisibility(GONE);
+        }
+
         mAdapter = new BaseItemAdapter<>();
         mAdapter.setItems(mSrcItems);
         fileExplorerRv.setAdapter(mAdapter);
diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/fileExplorer/FileItem.java b/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/fileExplorer/FileItem.java
index 8cc57ac4f9..b8e8c1cb91 100644
--- a/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/fileExplorer/FileItem.java
+++ b/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/fileExplorer/FileItem.java
@@ -1,20 +1,27 @@
 package com.blankj.utildebug.debug.tool.fileExplorer;
 
+import android.content.Intent;
 import android.support.annotation.NonNull;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import com.blankj.utilcode.constant.PermissionConstants;
+import com.blankj.utilcode.util.ActivityUtils;
 import com.blankj.utilcode.util.ClickUtils;
 import com.blankj.utilcode.util.CollectionUtils;
 import com.blankj.utilcode.util.FileUtils;
 import com.blankj.utilcode.util.PathUtils;
+import com.blankj.utilcode.util.PermissionUtils;
+import com.blankj.utilcode.util.SDCardUtils;
 import com.blankj.utilcode.util.StringUtils;
 import com.blankj.utilcode.util.TimeUtils;
+import com.blankj.utilcode.util.UriUtils;
 import com.blankj.utildebug.R;
 import com.blankj.utildebug.base.rv.BaseItem;
 import com.blankj.utildebug.base.rv.ItemViewHolder;
+import com.blankj.utildebug.base.view.FloatToast;
 import com.blankj.utildebug.debug.tool.fileExplorer.image.ImageViewer;
 import com.blankj.utildebug.debug.tool.fileExplorer.sp.SpViewerContentView;
 import com.blankj.utildebug.helper.FileHelper;
@@ -36,9 +43,12 @@
  */
 public class FileItem extends BaseItem {
 
+    private static final ArrayList EMPTY = CollectionUtils.newArrayList(new FileItem());
+
     private FileItem mParent;
     private File     mFile;
     private String   mName;
+    private boolean  isSdcard;
 
     private RelativeLayout fileContentRl;
     private ImageView      fileTypeIv;
@@ -46,17 +56,22 @@ public class FileItem extends BaseItem {
     private TextView       fileInfoTv;
     private TextView       fileMenuDeleteTv;
 
-    public FileItem(FileItem parent, File file) {
+    public FileItem(File file, String name) {
+        this(file, name, false);
+    }
+
+    public FileItem(File file, String name, boolean isSdcard) {
         super(R.layout.du_item_file);
-        mParent = parent;
         mFile = file;
-        mName = file.getName();
+        mName = name;
+        this.isSdcard = isSdcard;
     }
 
-    public FileItem(File file, String name) {
+    public FileItem(FileItem parent, File file) {
         super(R.layout.du_item_file);
+        mParent = parent;
         mFile = file;
-        mName = name;
+        mName = file.getName();
     }
 
     public FileItem() {
@@ -80,11 +95,16 @@ public void bind(@NonNull ItemViewHolder holder, int position) {
         fileMenuDeleteTv.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                FileUtils.delete(mFile);
-                getAdapter().removeItem(FileItem.this, true);
-                if (getAdapter().getItems().isEmpty()) {
-                    getAdapter().addItem(new FileItem());
-                    getAdapter().notifyDataSetChanged();
+                boolean delete = FileUtils.delete(mFile);
+                if (delete) {
+                    getAdapter().removeItem(FileItem.this, true);
+                    if (getAdapter().getItems().isEmpty()) {
+                        getAdapter().addItem(new FileItem());
+                        getAdapter().notifyDataSetChanged();
+                        v.getRootView().findViewById(R.id.fileExplorerSearchEt).setVisibility(View.GONE);
+                    }
+                } else {
+                    FloatToast.showLong(FloatToast.WARNING, "Delete failed!");
                 }
             }
         });
@@ -92,12 +112,29 @@ public void onClick(View v) {
 
         if (mFile.isDirectory()) {
             fileTypeIv.setImageResource(R.drawable.du_ic_debug_file_explorer);
-            fileInfoTv.setText(String.format("%s  %s", StringUtils.getString(R.string.du_file_item_num, mFile.list().length), TimeUtils.millis2String(mFile.lastModified(), "yyyy.MM.dd")));
+            fileInfoTv.setText(String.format("%s  %s", StringUtils.getString(R.string.du_file_item_num, CollectionUtils.size(mFile.list())), TimeUtils.millis2String(mFile.lastModified(), "yyyy.MM.dd")));
             fileContentRl.setOnClickListener(new View.OnClickListener() {
                 @Override
-                public void onClick(View v) {
-                    FileExplorerFloatView floatView = (FileExplorerFloatView) v.getRootView();
-                    FileContentView.show(floatView, FileItem.this);
+                public void onClick(final View v) {
+                    if (isSdcard) {
+                        PermissionUtils.permission(PermissionConstants.STORAGE)
+                                .callback(new PermissionUtils.SimpleCallback() {
+                                    @Override
+                                    public void onGranted() {
+                                        FileExplorerFloatView floatView = (FileExplorerFloatView) v.getRootView();
+                                        FileContentView.show(floatView, FileItem.this);
+                                    }
+
+                                    @Override
+                                    public void onDenied() {
+                                        FloatToast.showShort("Permission of storage denied!");
+                                    }
+                                })
+                                .request();
+                    } else {
+                        FileExplorerFloatView floatView = (FileExplorerFloatView) v.getRootView();
+                        FileContentView.show(floatView, FileItem.this);
+                    }
                 }
             });
         } else {
@@ -125,7 +162,17 @@ public void onClick(View v) {
                     }
                 });
             } else {
-                fileContentRl.setOnClickListener(null);
+                fileContentRl.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        Intent intent = new Intent(Intent.ACTION_VIEW);
+                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                        intent.setData(UriUtils.file2Uri(mFile));
+                        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+                        intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+                        ActivityUtils.startActivity(intent);
+                    }
+                });
                 fileTypeIv.setImageResource(R.drawable.du_ic_item_file_default);
             }
         }
@@ -137,11 +184,7 @@ public File getFile() {
 
     public static List getFileItems(final FileItem parent) {
         if (parent == null) return getFileItems();
-        List files = FileUtils.listFilesInDir(parent.getFile());
-        if (CollectionUtils.isEmpty(files)) {
-            return CollectionUtils.newArrayList(new FileItem());
-        }
-        Collections.sort(files, new Comparator() {
+        List files = FileUtils.listFilesInDir(parent.getFile(), new Comparator() {
             @Override
             public int compare(File o1, File o2) {
                 if (o1.isDirectory() && o2.isFile()) {
@@ -177,6 +220,16 @@ private static List getFileItems() {
                 fileItems.add(new FileItem(externalDataFile, "external"));
             }
         }
+        List mountedSDCardPath = SDCardUtils.getMountedSDCardPath();
+        if (!mountedSDCardPath.isEmpty()) {
+            for (int i = 0; i < mountedSDCardPath.size(); i++) {
+                String path = mountedSDCardPath.get(i);
+                File sdPath = new File(path);
+                if (sdPath.exists()) {
+                    fileItems.add(new FileItem(sdPath, "sdcard" + i + "_" + sdPath.getName(), true));
+                }
+            }
+        }
         return fileItems;
     }
 
@@ -188,4 +241,8 @@ public boolean evaluate(FileItem item) {
             }
         });
     }
+
+    public static boolean isEmptyItems(List items) {
+        return EMPTY == items;
+    }
 }
diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/fileExplorer/sp/SpItem.java b/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/fileExplorer/sp/SpItem.java
index 4e81f35537..184df8e2dd 100644
--- a/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/fileExplorer/sp/SpItem.java
+++ b/lib/utildebug/src/main/java/com/blankj/utildebug/debug/tool/fileExplorer/sp/SpItem.java
@@ -105,7 +105,7 @@ public void onClick(View v) {
             goIv.setVisibility(View.GONE);
             contentRl.setOnClickListener(null);
         } else {
-            ClickUtils.applyPressedViewScale(holder.itemView);
+            ClickUtils.applyPressedBgDark(holder.itemView);
             aSwitch.setVisibility(View.GONE);
             goIv.setVisibility(View.VISIBLE);
             contentRl.setOnClickListener(new View.OnClickListener() {
diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/helper/FileHelper.java b/lib/utildebug/src/main/java/com/blankj/utildebug/helper/FileHelper.java
index 40ed38df06..7ae20adb6c 100644
--- a/lib/utildebug/src/main/java/com/blankj/utildebug/helper/FileHelper.java
+++ b/lib/utildebug/src/main/java/com/blankj/utildebug/helper/FileHelper.java
@@ -49,7 +49,7 @@ public static int getFileType(File file) {
                 }
             }
         }
-        if (StringUtils.equals(FileUtils.getFileCharsetSimple(file), "UTF-8")) {
+        if (FileUtils.isUtf8(file)) {
             return UTF8;
         }
         return UNKNOWN;
diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/helper/ShadowHelper.java b/lib/utildebug/src/main/java/com/blankj/utildebug/helper/ShadowHelper.java
index afffdc39b3..dbeadbc9a8 100644
--- a/lib/utildebug/src/main/java/com/blankj/utildebug/helper/ShadowHelper.java
+++ b/lib/utildebug/src/main/java/com/blankj/utildebug/helper/ShadowHelper.java
@@ -17,26 +17,18 @@ public class ShadowHelper {
 
     public static void applyDebugIcon(View view) {
         ShadowUtils.apply(view, new ShadowUtils.Builder()
-                .setDrawableRadius(SizeUtils.getMeasuredWidth(view) / 2)
-                .setShadowRadius(SizeUtils.dp2px(8))
-                .setShadowColor(0xb0_ffffff, 0xb0_000000)
+                .setCircle()
+                .setShadowColor(0xc0_ffffff, 0x60_ffffff)
         );
     }
 
     public static void applyFloatView(View view) {
-        ShadowUtils.apply(view, new ShadowUtils.Builder()
-                .setDrawableRadius(SizeUtils.dp2px(8))
-                .setShadowRadius(SizeUtils.dp2px(8))
-                .setShadowColor(0xb0_000000)
-        );
+        ShadowUtils.apply(view, new ShadowUtils.Builder().setShadowRadius(SizeUtils.dp2px(8)));
     }
 
     public static void applyMenu(View view) {
-        view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
-//        ShadowUtils.apply(view, new ShadowUtils.Builder()
-//                .setDrawableRadius(SizeUtils.dp2px(4))
-//                .setShadowRadius(SizeUtils.dp2px(4), SizeUtils.dp2px(4))
-//                .setShadowColor(0xb0_000000)
-//        );
+        ShadowUtils.apply(view, new ShadowUtils.Builder()
+                .setShadowRadius(SizeUtils.dp2px(4))
+        );
     }
 }
diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/helper/TouchHelper.java b/lib/utildebug/src/main/java/com/blankj/utildebug/helper/TouchHelper.java
deleted file mode 100755
index 3074d86707..0000000000
--- a/lib/utildebug/src/main/java/com/blankj/utildebug/helper/TouchHelper.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package com.blankj.utildebug.helper;
-
-import android.annotation.SuppressLint;
-import android.os.SystemClock;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.animation.DecelerateInterpolator;
-
-import com.blankj.utilcode.util.BarUtils;
-import com.blankj.utilcode.util.ScreenUtils;
-import com.blankj.utilcode.util.SizeUtils;
-
-/**
- * 
- *     author: blankj
- *     blog  : http://blankj.com
- *     time  : 2019/08/26
- *     desc  :
- * 
- */ -public class TouchHelper { - - private static final int MIN_DISTANCE_MOVE = SizeUtils.dp2px(4); - private static final int MIN_TAP_TIME = 1000; - - private static final int STATE_MOVE = 0; - private static final int STATE_STOP = 1; - - private static int mState = STATE_STOP; - private static int mLastX = -1; - private static int mLastY = -1; - - private TouchHelper() { - } - - public static void applyDrag(final View v, final OnDragListener listener) { - if (v == null || listener == null) return; - v.setOnTouchListener(new View.OnTouchListener() { - @SuppressLint("ClickableViewAccessibility") - @Override - public boolean onTouch(View v, MotionEvent event) { - return onDragEvent(v, event, listener); - } - }); - } - - private static boolean onDragEvent(View v, MotionEvent event, OnDragListener listener) { - if (listener == null) return false; - int x = (int) event.getRawX(); - int y = (int) event.getRawY(); - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - mLastX = x; - mLastY = y; - listener._onDown(v, x, y, event); - return false; - case MotionEvent.ACTION_MOVE: - if (mLastX == -1) { - mLastX = x; - mLastY = y; - } - if (mState != STATE_MOVE - && Math.abs(x - mLastX) < MIN_DISTANCE_MOVE - && Math.abs(y - mLastY) < MIN_DISTANCE_MOVE) { - return true; - } - listener._onMove(v, x, y, mLastX, mLastY, event); - mLastX = x; - mLastY = y; - mState = STATE_MOVE; - return true; - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_CANCEL: - listener._onStop(v, x, y, event); - if (event.getAction() == MotionEvent.ACTION_UP) { - if (mState != STATE_MOVE - && event.getEventTime() - event.getDownTime() < MIN_TAP_TIME) { - v.performClick(); - } - } - final long now = SystemClock.uptimeMillis(); - final MotionEvent cancelEvent = MotionEvent.obtain(now, now, - MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0); - v.onTouchEvent(cancelEvent); - mState = STATE_STOP; - return false; - default: - break; - } - return false; - } - - public static abstract class OnDragListener { - - public static final int DIRECTION_LEFT = 1; - public static final int DIRECTION_TOP = 2; - public static final int DIRECTION_RIGHT = 4; - public static final int DIRECTION_BOTTOM = 8; - public static final int DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT; - public static final int DIRECTION_VERTICAL = DIRECTION_TOP | DIRECTION_BOTTOM; - public static final int DIRECTION_ALL = DIRECTION_LEFT | DIRECTION_TOP | DIRECTION_RIGHT | DIRECTION_BOTTOM; - - private boolean isApplyScale; - private boolean isHorizontalSticky; - private int availableDirection; - private boolean isFirstMove; - private boolean isMoveAvailable; - protected int appWidth; - protected int appHeight; - protected int viewWidth; - protected int viewHeight; - protected int statusBarHeight; - - public OnDragListener() { - this(DIRECTION_ALL, false, false); - } - - public OnDragListener(boolean isApplyScale) { - this(DIRECTION_ALL, isApplyScale, false); - } - - public OnDragListener(boolean isApplyScale, boolean isHorizontalSticky) { - this(DIRECTION_ALL, isApplyScale, isHorizontalSticky); - } - - public OnDragListener(int availableDirection, boolean isApplyScale, boolean isHorizontalSticky) { - this.availableDirection = availableDirection; - this.isApplyScale = isApplyScale; - this.isHorizontalSticky = isHorizontalSticky; - } - - public abstract void onDown(View v, int x, int y, MotionEvent event); - - public abstract void onMove(View view, int x, int y, int dx, int dy, MotionEvent event); - - public abstract void onStop(View view, int x, int y, MotionEvent event); - - private void _onDown(View view, int x, int y, MotionEvent event) { - isFirstMove = false; - viewWidth = view.getWidth(); - viewHeight = view.getHeight(); - appWidth = ScreenUtils.getAppScreenWidth(); - appHeight = ScreenUtils.getAppScreenHeight(); - statusBarHeight = BarUtils.getStatusBarHeight(); - if (isApplyScale) { - processScale(view, true); - } - onDown(view, x, y, event); - } - - private void _onMove(View view, int x, int y, int lastX, int lastY, MotionEvent event) { - if (!isFirstMove) { - if (availableDirection == DIRECTION_ALL) { - isMoveAvailable = true; - } else { - if (Math.abs(x - lastX) >= Math.abs(y - lastY)) { - int direction = availableDirection & DIRECTION_HORIZONTAL; - if (direction == DIRECTION_HORIZONTAL) { - isMoveAvailable = true; - } else if (direction == DIRECTION_LEFT && x - lastX < 0) { - isMoveAvailable = true; - } else if (direction == DIRECTION_RIGHT && x - lastX > 0) { - isMoveAvailable = true; - } - } else { - int direction = availableDirection & DIRECTION_VERTICAL; - if (direction == DIRECTION_VERTICAL) { - isMoveAvailable = true; - } else if (direction == DIRECTION_TOP && y - lastY < 0) { - isMoveAvailable = true; - } else if (direction == DIRECTION_BOTTOM && y - lastY > 0) { - isMoveAvailable = true; - } - } - } - isFirstMove = true; - } - if (isMoveAvailable) { - onMove(view, x, y, x - lastX, y - lastY, event); - } - } - - private void _onStop(View view, int x, int y, MotionEvent event) { - if (isHorizontalSticky) { - float middleX = view.getX() + viewWidth / 2f; - if (middleX > appWidth / 2f) { - view.animate() - .setInterpolator(new DecelerateInterpolator()) - .translationX(appWidth - viewWidth) - .setDuration(100) - .start(); - } else { - view.animate() - .setInterpolator(new DecelerateInterpolator()) - .setDuration(100) - .translationX(0) - .start(); - } - } - - if (isApplyScale) { - processScale(view, false); - } - onStop(view, x, y, event); - } - - private void processScale(final View view, boolean isDown) { - float value = isDown ? 1 - 0.1f : 1; - view.animate() - .scaleX(value) - .scaleY(value) - .setDuration(100) - .start(); - } - } - - public interface OnMoveListener { - boolean onMove(int dx, int dy); - } -} diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/helper/WindowHelper.java b/lib/utildebug/src/main/java/com/blankj/utildebug/helper/WindowHelper.java index 504f6b610e..e64574363c 100644 --- a/lib/utildebug/src/main/java/com/blankj/utildebug/helper/WindowHelper.java +++ b/lib/utildebug/src/main/java/com/blankj/utildebug/helper/WindowHelper.java @@ -6,7 +6,7 @@ import android.view.WindowManager; import com.blankj.utilcode.util.ScreenUtils; -import com.blankj.utildebug.DebugUtils; +import com.blankj.utilcode.util.Utils; /** *
@@ -19,29 +19,21 @@
 public class WindowHelper {
 
     private static WindowManager sWM;
-    private static int           windowHeight;
 
     private WindowHelper() {
     }
 
-    public static void updateViewLayout(View view, ViewGroup.LayoutParams params) {
+    public static void updateViewLayout(final View view, ViewGroup.LayoutParams params) {
         getWindowManager().updateViewLayout(view, params);
     }
 
     public static int getAppWindowHeight() {
-        if (windowHeight == 0) {
-            windowHeight = ScreenUtils.getAppScreenHeight();
-        }
-        return windowHeight;
-    }
-
-    public static void updateWindowHeight() {
-        windowHeight = ScreenUtils.getAppScreenHeight();
+        return ScreenUtils.getAppScreenHeight();
     }
 
     public static WindowManager getWindowManager() {
         if (sWM == null) {
-            sWM = (WindowManager) DebugUtils.getApp().getSystemService(Context.WINDOW_SERVICE);
+            sWM = (WindowManager) Utils.getApp().getSystemService(Context.WINDOW_SERVICE);
         }
         return sWM;
     }
diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/icon/DebugIcon.java b/lib/utildebug/src/main/java/com/blankj/utildebug/icon/DebugIcon.java
index 27b3dfb936..e5a65d4eac 100644
--- a/lib/utildebug/src/main/java/com/blankj/utildebug/icon/DebugIcon.java
+++ b/lib/utildebug/src/main/java/com/blankj/utildebug/icon/DebugIcon.java
@@ -1,19 +1,21 @@
 package com.blankj.utildebug.icon;
 
+import android.content.res.Configuration;
 import android.os.Build;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.animation.DecelerateInterpolator;
 import android.widget.ImageView;
 import android.widget.RelativeLayout;
 
+import com.blankj.utilcode.util.BarUtils;
 import com.blankj.utilcode.util.PermissionUtils;
-import com.blankj.utilcode.util.SizeUtils;
 import com.blankj.utilcode.util.ToastUtils;
+import com.blankj.utilcode.util.TouchUtils;
 import com.blankj.utildebug.DebugUtils;
 import com.blankj.utildebug.R;
 import com.blankj.utildebug.config.DebugConfig;
 import com.blankj.utildebug.helper.ShadowHelper;
-import com.blankj.utildebug.helper.TouchHelper;
 import com.blankj.utildebug.menu.DebugMenu;
 
 /**
@@ -28,9 +30,7 @@ public class DebugIcon extends RelativeLayout {
 
     private static final DebugIcon INSTANCE = new DebugIcon();
 
-    private int   mIconId;
-    private float globalX = DebugConfig.getDebugIconX();
-    private float globalY = DebugConfig.getDebugIconY();
+    private int mIconId;
 
     public static DebugIcon getInstance() {
         return INSTANCE;
@@ -44,24 +44,63 @@ public static void setVisibility(boolean isShow) {
     public DebugIcon() {
         super(DebugUtils.getApp());
         inflate(getContext(), R.layout.du_debug_icon, this);
-        int spacing = SizeUtils.dp2px(8);
-        setPadding(spacing, spacing, spacing, spacing);
-
         ShadowHelper.applyDebugIcon(this);
-        TouchHelper.applyDrag(this, new TouchHelper.OnDragListener(true, true) {
+        TouchUtils.setOnTouchListener(this, new TouchUtils.OnTouchUtilsListener() {
+
+            private int rootViewWidth;
+            private int rootViewHeight;
+            private int viewWidth;
+            private int viewHeight;
+            private int statusBarHeight;
 
             @Override
-            public void onDown(View view, int x, int y, MotionEvent event) {
+            public boolean onDown(View view, int x, int y, MotionEvent event) {
+                viewWidth = view.getWidth();
+                viewHeight = view.getHeight();
+                View contentView = view.getRootView().findViewById(android.R.id.content);
+                rootViewWidth = contentView.getWidth();
+                rootViewHeight = contentView.getHeight();
+                statusBarHeight = BarUtils.getStatusBarHeight();
+
+                processScale(view, true);
+                return true;
             }
 
             @Override
-            public void onMove(View view, int x, int y, int dx, int dy, MotionEvent event) {
-                view.setX(Math.min(Math.max(0, view.getX() + dx), appWidth - viewWidth));
-                view.setY(Math.min(Math.max(statusBarHeight, view.getY() + dy), appHeight - viewHeight));
+            public boolean onMove(View view, int direction, int x, int y, int dx, int dy, int totalX, int totalY, MotionEvent event) {
+                view.setX(Math.min(Math.max(0, view.getX() + dx), rootViewWidth - viewWidth));
+                view.setY(Math.min(Math.max(statusBarHeight, view.getY() + dy), rootViewHeight - viewHeight));
+                return true;
             }
 
             @Override
-            public void onStop(View view, int x, int y, MotionEvent event) {
+            public boolean onStop(View view, int direction, int x, int y, int totalX, int totalY, int vx, int vy, MotionEvent event) {
+                stick2HorizontalSide(view);
+                processScale(view, false);
+                return true;
+            }
+
+            private void stick2HorizontalSide(View view) {
+                view.animate()
+                        .setInterpolator(new DecelerateInterpolator())
+                        .translationX(view.getX() + viewWidth / 2f > rootViewWidth / 2f ? rootViewWidth - viewWidth : 0)
+                        .setDuration(100)
+                        .withEndAction(new Runnable() {
+                            @Override
+                            public void run() {
+                                savePosition();
+                            }
+                        })
+                        .start();
+            }
+
+            private void processScale(final View view, boolean isDown) {
+                float value = isDown ? 1 - 0.1f : 1;
+                view.animate()
+                        .scaleX(value)
+                        .scaleY(value)
+                        .setDuration(100)
+                        .start();
             }
         });
 
@@ -90,22 +129,41 @@ public void onDenied() {
     @Override
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
-        setX(globalX);
-        setY(globalY);
+        wrapPosition();
     }
 
     @Override
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
-        globalX = getX();
-        globalY = getY();
-        DebugConfig.saveDebugIconX(globalX);
-        DebugConfig.saveDebugIconY(globalY);
+        savePosition();
+    }
+
+    private void savePosition() {
+        DebugConfig.saveViewX(this, (int) getX());
+        DebugConfig.saveViewY(this, (int) getY());
+    }
+
+    @Override
+    protected void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        wrapPosition();
+    }
+
+    private void wrapPosition() {
+        post(new Runnable() {
+            @Override
+            public void run() {
+                View contentView = getRootView().findViewById(android.R.id.content);
+                if (contentView == null) return;
+                setX(DebugConfig.getViewX(DebugIcon.this));
+                setY(DebugConfig.getViewY(DebugIcon.this, contentView.getHeight() / 3));
+                setX(getX() + getWidth() / 2f > contentView.getWidth() / 2f ? contentView.getWidth() - getWidth() : 0);
+            }
+        });
     }
 
     public void setIconId(final int iconId) {
         ImageView debugPanelIconIv = findViewById(R.id.debugIconIv);
-        mIconId = iconId == -1 ? R.drawable.du_ic_icon_default : iconId;
         debugPanelIconIv.setImageResource(mIconId);
     }
 
diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/menu/DebugMenu.java b/lib/utildebug/src/main/java/com/blankj/utildebug/menu/DebugMenu.java
index 8df4b197b7..1de083a6c9 100644
--- a/lib/utildebug/src/main/java/com/blankj/utildebug/menu/DebugMenu.java
+++ b/lib/utildebug/src/main/java/com/blankj/utildebug/menu/DebugMenu.java
@@ -26,6 +26,8 @@ public class DebugMenu extends BaseContentFloatView {
 
     private List mDebugs;
 
+    private BaseItemAdapter mAdapter;
+
     private RecyclerView debugMenuRv;
 
     public static DebugMenu getInstance() {
@@ -62,13 +64,20 @@ public void initContentView() {
         setSwipeBackEnabled(false);
 
         debugMenuRv = findViewById(R.id.debugMenuRv);
-        BaseItemAdapter adapter = new BaseItemAdapter<>();
-        adapter.setItems(DebugMenuItem.getDebugMenuItems(mDebugs));
-        debugMenuRv.setAdapter(adapter);
+        mAdapter = new BaseItemAdapter<>();
+        mAdapter.setItems(DebugMenuItem.getDebugMenuItems(mDebugs));
+        debugMenuRv.setAdapter(mAdapter);
         debugMenuRv.setLayoutManager(new LinearLayoutManager(getContext()));
     }
 
     public void setDebugs(List debugs) {
         mDebugs = debugs;
     }
+
+    public void addDebugs(List debugs) {
+        if (debugs == null || debugs.size() == 0) return;
+        mDebugs.addAll(debugs);
+        if (mAdapter == null) return;
+        mAdapter.notifyDataSetChanged();
+    }
 }
diff --git a/lib/utildebug/src/main/res/drawable/du_shape_base_float_bg.xml b/lib/utildebug/src/main/res/drawable/du_shape_base_float_bg.xml
index 1850575379..5943aeceeb 100644
--- a/lib/utildebug/src/main/res/drawable/du_shape_base_float_bg.xml
+++ b/lib/utildebug/src/main/res/drawable/du_shape_base_float_bg.xml
@@ -1,5 +1,5 @@
 
 
-    
+    
     
 
\ No newline at end of file
diff --git a/lib/utildebug/src/main/res/drawable/du_shape_base_float_title_bg.xml b/lib/utildebug/src/main/res/drawable/du_shape_base_float_title_bg.xml
index 74770f3764..fc9efdc1da 100644
--- a/lib/utildebug/src/main/res/drawable/du_shape_base_float_title_bg.xml
+++ b/lib/utildebug/src/main/res/drawable/du_shape_base_float_title_bg.xml
@@ -1,7 +1,7 @@
 
 
     
+        android:bottomLeftRadius="8dp"
+        android:bottomRightRadius="8dp"/>
     
 
\ No newline at end of file
diff --git a/lib/utildebug/src/main/res/drawable/du_shape_shadow.xml b/lib/utildebug/src/main/res/drawable/du_shape_shadow.xml
index 346ecb3795..3d0415b8e0 100644
--- a/lib/utildebug/src/main/res/drawable/du_shape_shadow.xml
+++ b/lib/utildebug/src/main/res/drawable/du_shape_shadow.xml
@@ -2,6 +2,6 @@
 
     
+        android:endColor="#37000000"
+        android:startColor="#03000000" />
 
\ No newline at end of file
diff --git a/lib/utildebug/src/main/res/layout/du_base_content_float.xml b/lib/utildebug/src/main/res/layout/du_base_content_float.xml
index 73f51dff11..9380648980 100644
--- a/lib/utildebug/src/main/res/layout/du_base_content_float.xml
+++ b/lib/utildebug/src/main/res/layout/du_base_content_float.xml
@@ -4,16 +4,37 @@
     xmlns:tools="http://schemas.android.com/tools">
 
     
 
+        
+
+        
+
+        
+
         
 
-        
-
-        
-
-        
-
     
 
diff --git a/lib/utildebug/src/main/res/layout/du_debug_icon.xml b/lib/utildebug/src/main/res/layout/du_debug_icon.xml
index 8ea7e1e4db..9d3118ef3a 100644
--- a/lib/utildebug/src/main/res/layout/du_debug_icon.xml
+++ b/lib/utildebug/src/main/res/layout/du_debug_icon.xml
@@ -5,6 +5,7 @@
     
+        android:layout_height="40dp"
+        android:src="@drawable/du_ic_icon_default" />
 
 
diff --git a/lib/utildebug/src/main/res/values/values-cardview.xml b/lib/utildebug/src/main/res/values/values-cardview.xml
deleted file mode 100644
index c54222f9eb..0000000000
--- a/lib/utildebug/src/main/res/values/values-cardview.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-    
-    #FF424242
-    #FFFFFFFF
-    #03000000
-    #37000000
-    
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-    
-    0dp
-    
-    
-    
-    
-
\ No newline at end of file
diff --git a/lib/utildebug/src/test/java/com/blankj/utildebug/ExampleUnitTest.java b/lib/utildebug/src/test/java/com/blankj/utildebug/ExampleUnitTest.java
deleted file mode 100644
index ea1f901d70..0000000000
--- a/lib/utildebug/src/test/java/com/blankj/utildebug/ExampleUnitTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.blankj.utildebug;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * @see Testing documentation
- */
-public class ExampleUnitTest {
-    @Test
-    public void addition_isCorrect() {
-        assertEquals(4, 2 + 2);
-    }
-}
\ No newline at end of file
diff --git a/plugin/api-gradle-plugin/CHANGELOG.md b/plugin/api-gradle-plugin/CHANGELOG.md
index 6dc7341833..4b3fb04315 100644
--- a/plugin/api-gradle-plugin/CHANGELOG.md
+++ b/plugin/api-gradle-plugin/CHANGELOG.md
@@ -1,4 +1,7 @@
 # Change Log
 
+## v1.1(2019/10/30)
+新增 onlyScanLibRegex, jumpScanLibRegex 的 DSL
+
 ## v1.0(2019/07/20)
 发布初版本
\ No newline at end of file
diff --git a/plugin/api-gradle-plugin/README.md b/plugin/api-gradle-plugin/README.md
index 516145f0af..4c08cb40c7 100644
--- a/plugin/api-gradle-plugin/README.md
+++ b/plugin/api-gradle-plugin/README.md
@@ -28,7 +28,7 @@
 buildscript {
     dependencies {
         ...
-        classpath 'com.blankj:api-gradle-plugin:1.0'
+        classpath 'com.blankj:api-gradle-plugin:1.1'
     }
 }
 ```
diff --git a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiExtension.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiExtension.groovy
index 05ff41e142..87ec26e571 100755
--- a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiExtension.groovy
+++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiExtension.groovy
@@ -4,13 +4,16 @@ class ApiExtension {
 
     boolean abortOnError = true
     String apiUtilsClass = "com.blankj.utilcode.util.ApiUtils";
+    String onlyScanLibRegex = ""
+    String jumpScanLibRegex = ""
 
     @Override
     String toString() {
-        return "BusExtension { " +
+        return "ApiExtension { " +
                 "abortOnError: " + abortOnError +
                 ", apiUtilsClass: " + apiUtilsClass +
+                (onlyScanLibRegex == "" ? "" : ", onlyScanLibRegex: " + onlyScanLibRegex) +
+                (jumpScanLibRegex == "" ? "" : ", jumpScanLibRegex: " + jumpScanLibRegex) +
                 " }";
     }
-
 }
diff --git a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiScan.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiScan.groovy
index 36b679ff99..ad2525d063 100755
--- a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiScan.groovy
+++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiScan.groovy
@@ -62,10 +62,10 @@ class ApiScan {
             ClassReader cr = new ClassReader(file.bytes);
             ClassWriter cw = new ClassWriter(cr, 0);
             ClassVisitor cv = new ApiClassVisitor(cw, apiImplMap, apiClasses, apiUtilsClass);
-            cr.accept(cv, ClassReader.SKIP_FRAMES);
-
-            if (cv.errorStr != null) {
-                throw new Exception(cv.errorStr)
+            try {
+                cr.accept(cv, ClassReader.SKIP_FRAMES);
+            } catch (Exception ignore) {
+                ignore.printStackTrace()
             }
         }
     }
diff --git a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiTransform.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiTransform.groovy
index c4bdf9dfc7..34ce323c81 100755
--- a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiTransform.groovy
+++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiTransform.groovy
@@ -7,6 +7,8 @@ import com.blankj.api.util.LogUtils
 import org.apache.commons.io.FileUtils
 import org.gradle.api.Project
 
+import java.util.regex.Pattern
+
 class ApiTransform extends Transform {
 
     Project mProject;
@@ -88,7 +90,7 @@ class ApiTransform extends Transform {
                 )
                 FileUtils.copyFile(jar, dest)
 
-                if (jumpScan(jarName)) {
+                if (jumpScan(jarName, ext)) {
                     LogUtils.l("jump jar: $jarName -> $dest")
                     return
                 }
@@ -136,14 +138,26 @@ class ApiTransform extends Transform {
         LogUtils.l(getName() + " finished: " + (System.currentTimeMillis() - stTime) + "ms")
     }
 
-    private static jumpScan(String jarName) {
-        boolean isExcept = false
-        for (String except : Config.EXCEPTS) {
-            if (jarName.startsWith(except)) {
-                isExcept = true
-                break
+    private static jumpScan(String jarName, ApiExtension ext) {
+        if (jarName.contains("utilcode")) {
+            return false
+        }
+
+        if (ext.onlyScanLibRegex != null && ext.onlyScanLibRegex.trim().length() > 0) {
+            return !Pattern.matches(ext.onlyScanLibRegex, jarName)
+        }
+
+        if (ext.jumpScanLibRegex != null && ext.jumpScanLibRegex.trim().length() > 0) {
+            if (Pattern.matches(ext.jumpScanLibRegex, jarName)) {
+                return true
             }
         }
-        return isExcept
+
+        for (exclude in Config.EXCLUDE_LIBS_START_WITH) {
+            if (jarName.startsWith(exclude)) {
+                return true
+            }
+        }
+        return false
     }
 }
\ No newline at end of file
diff --git a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/Config.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/Config.groovy
index d5dfa69c4c..fcf51fec4e 100755
--- a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/Config.groovy
+++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/Config.groovy
@@ -4,13 +4,15 @@ class Config {
 
     public static final String EXT_NAME = 'api'
 
-    public static final List EXCEPTS = [
-            'com.android.support:',
-            'com.android.support.constraint:',
-            'android.arch.',
-            'org.jetbrains.kotlin:',
-            'org.jetbrains:',
-            'com.squareup.'
+    public static final List EXCLUDE_LIBS_START_WITH = [
+            'com.android.support',
+            'androidx',
+            'com.google',
+            'android.arch',
+            'org.jetbrains',
+            'com.squareup',
+            'org.greenrobot',
+            'com.github.bumptech.glide'
     ]
 
     public static final String FILE_SEP = System.getProperty("file.separator")
diff --git a/plugin/bus-gradle-plugin/CHANGELOG.md b/plugin/bus-gradle-plugin/CHANGELOG.md
index 19885a70c7..d9f4853c03 100644
--- a/plugin/bus-gradle-plugin/CHANGELOG.md
+++ b/plugin/bus-gradle-plugin/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Change Log
 
+## v2.3
+新增 onlyScanLibRegex, jumpScanLibRegex 的 DSL
+
+## v2.2
+修复含有 for 循环的字段导致 out of index 的 bug
+
 ## v2.1
 支持 Tag 一对多,同 Tag 可设置事件优先级
 
diff --git a/plugin/bus-gradle-plugin/README.md b/plugin/bus-gradle-plugin/README.md
index ed5d87567e..328a783796 100644
--- a/plugin/bus-gradle-plugin/README.md
+++ b/plugin/bus-gradle-plugin/README.md
@@ -19,7 +19,7 @@
 buildscript {
     dependencies {
         ...
-        classpath 'com.blankj:bus-gradle-plugin:2.1'
+        classpath 'com.blankj:bus-gradle-plugin:2.3'
     }
 }
 ```
diff --git a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusClassVisitor.java b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusClassVisitor.java
index e72130d14f..581c984af4 100644
--- a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusClassVisitor.java
+++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusClassVisitor.java
@@ -29,6 +29,7 @@ public class BusClassVisitor extends ClassVisitor {
     private String  tag;
     private String  funParamDesc;
     private String  mBusUtilsClass;
+    private boolean isStartVisitParams;
 
     public BusClassVisitor(ClassVisitor classVisitor, Map> busMap, String busUtilsClass) {
         super(Opcodes.ASM5, classVisitor);
@@ -47,6 +48,7 @@ public MethodVisitor visitMethod(int access, String funName, String desc, String
         if (cv == null) return null;
         MethodVisitor mv = cv.visitMethod(access, funName, desc, signature, exceptions);
         busInfo = null;
+        isStartVisitParams = false;
         mv = new AdviceAdapter(Opcodes.ASM5, mv, access, funName, desc) {
             @Override
             public AnnotationVisitor visitAnnotation(String desc1, boolean visible) {
@@ -83,6 +85,10 @@ public void visitEnum(String name, String desc, String value) {
             public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) {
                 super.visitLocalVariable(name, desc, signature, start, end, index);// 获取方法参数信息
                 if (busInfo != null && !funParamDesc.equals("")) {
+                    if (!isStartVisitParams && index != 0) {
+                        return;
+                    }
+                    isStartVisitParams = true;
                     if ("this".equals(name)) {
                         return;
                     }
diff --git a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusExtension.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusExtension.groovy
index 87d6060870..14d296b2d7 100755
--- a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusExtension.groovy
+++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusExtension.groovy
@@ -4,12 +4,16 @@ class BusExtension {
 
     boolean abortOnError = true;
     String busUtilsClass = "com.blankj.utilcode.util.BusUtils";
+    String onlyScanLibRegex = ""
+    String jumpScanLibRegex = ""
 
     @Override
     String toString() {
         return "BusExtension { " +
                 "abortOnError: " + abortOnError +
                 ", busUtilsClass: " + busUtilsClass +
+                (onlyScanLibRegex == "" ? "" : ", onlyScanLibRegex: " + onlyScanLibRegex) +
+                (jumpScanLibRegex == "" ? "" : ", jumpScanLibRegex: " + jumpScanLibRegex) +
                 " }";
     }
 }
diff --git a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy
index 5050938d0d..a08d53f202 100755
--- a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy
+++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy
@@ -60,7 +60,11 @@ class BusScan {
             ClassReader cr = new ClassReader(file.bytes);
             ClassWriter cw = new ClassWriter(cr, 0);
             ClassVisitor cv = new BusClassVisitor(cw, busMap, busUtilsClass);
-            cr.accept(cv, ClassReader.SKIP_FRAMES);
+            try {
+                cr.accept(cv, ClassReader.SKIP_FRAMES);
+            } catch (Exception ignore) {
+                ignore.printStackTrace()
+            }
         }
     }
 }
diff --git a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransform.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransform.groovy
index cfe7b54313..1581a61fb7 100755
--- a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransform.groovy
+++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransform.groovy
@@ -7,6 +7,8 @@ import com.blankj.bus.util.LogUtils
 import org.apache.commons.io.FileUtils
 import org.gradle.api.Project
 
+import java.util.regex.Pattern
+
 class BusTransform extends Transform {
 
     Project mProject;
@@ -87,7 +89,7 @@ class BusTransform extends Transform {
                 )
                 FileUtils.copyFile(jar, dest)
 
-                if (jumpScan(jarName)) {
+                if (jumpScan(jarName, ext)) {
                     LogUtils.l("jump jar: $jarName -> $dest")
                     return
                 }
@@ -153,14 +155,26 @@ class BusTransform extends Transform {
         LogUtils.l(getName() + " finished: " + (System.currentTimeMillis() - stTime) + "ms")
     }
 
-    private static jumpScan(String jarName) {
-        boolean isExcept = false
-        for (String except : Config.EXCEPTS) {
-            if (jarName.startsWith(except)) {
-                isExcept = true
-                break
+    private static jumpScan(String jarName, BusExtension ext) {
+        if (jarName.contains("utilcode")) {
+            return false
+        }
+
+        if (ext.onlyScanLibRegex != null && ext.onlyScanLibRegex.trim().length() > 0) {
+            return !Pattern.matches(ext.onlyScanLibRegex, jarName)
+        }
+
+        if (ext.jumpScanLibRegex != null && ext.jumpScanLibRegex.trim().length() > 0) {
+            if (Pattern.matches(ext.jumpScanLibRegex, jarName)) {
+                return true
             }
         }
-        return isExcept
+
+        for (exclude in Config.EXCLUDE_LIBS_START_WITH) {
+            if (jarName.startsWith(exclude)) {
+                return true
+            }
+        }
+        return false
     }
 }
\ No newline at end of file
diff --git a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy
index d33ad8485b..e52424affa 100755
--- a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy
+++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy
@@ -4,13 +4,15 @@ class Config {
 
     public static final String EXT_NAME = 'bus'
 
-    public static final List EXCEPTS = [
-            'com.android.support:',
-            'com.android.support.constraint:',
-            'android.arch.',
-            'org.jetbrains.kotlin:',
-            'org.jetbrains:',
-            'com.squareup.'
+    public static final List EXCLUDE_LIBS_START_WITH = [
+            'com.android.support',
+            'androidx',
+            'com.google',
+            'android.arch',
+            'org.jetbrains',
+            'com.squareup',
+            'org.greenrobot',
+            'com.github.bumptech.glide'
     ]
 
     public static final String FILE_SEP = System.getProperty("file.separator")
diff --git a/plugin/bus-gradle-plugin/src/test/java/com/blankj/bus/BusTest.java b/plugin/bus-gradle-plugin/src/test/java/com/blankj/bus/BusTest.java
index d253d2a4d4..b3af21cddb 100644
--- a/plugin/bus-gradle-plugin/src/test/java/com/blankj/bus/BusTest.java
+++ b/plugin/bus-gradle-plugin/src/test/java/com/blankj/bus/BusTest.java
@@ -29,6 +29,9 @@ public class BusTest {
     private static final String TAG_NO_PARAM_STICKY  = "TagNoParamSticky";
     private static final String TAG_ONE_PARAM_STICKY = "TagOneParamSticky";
 
+    private String[] arr = new String[]{"0", "1"};
+    private String[] arr2 = new String[]{"0", "1"};
+
     @BusUtils.Bus(tag = TAG_NO_PARAM)
     public void noParamFun() {
         System.out.println("noParam");
@@ -61,6 +64,12 @@ public void noParamStickyFun() {
 
     @BusUtils.Bus(tag = TAG_ONE_PARAM_STICKY, sticky = true)
     public void oneParamStickyFun(Callback callback) {
+        for (String str : arr) {
+            System.out.println(str);
+        }
+        for (String str1 : arr2) {
+            System.out.println(str1);
+        }
         if (callback != null) {
             System.out.println(callback.call());
         }
diff --git a/reports/profile/css/base-style.css b/reports/profile/css/base-style.css
new file mode 100644
index 0000000000..4afa73e3dd
--- /dev/null
+++ b/reports/profile/css/base-style.css
@@ -0,0 +1,179 @@
+
+body {
+    margin: 0;
+    padding: 0;
+    font-family: sans-serif;
+    font-size: 12pt;
+}
+
+body, a, a:visited {
+    color: #303030;
+}
+
+#content {
+    padding-left: 50px;
+    padding-right: 50px;
+    padding-top: 30px;
+    padding-bottom: 30px;
+}
+
+#content h1 {
+    font-size: 160%;
+    margin-bottom: 10px;
+}
+
+#footer {
+    margin-top: 100px;
+    font-size: 80%;
+    white-space: nowrap;
+}
+
+#footer, #footer a {
+    color: #a0a0a0;
+}
+
+#line-wrapping-toggle {
+    vertical-align: middle;
+}
+
+#label-for-line-wrapping-toggle {
+    vertical-align: middle;
+}
+
+ul {
+    margin-left: 0;
+}
+
+h1, h2, h3 {
+    white-space: nowrap;
+}
+
+h2 {
+    font-size: 120%;
+}
+
+ul.tabLinks {
+    padding-left: 0;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    overflow: auto;
+    min-width: 800px;
+    width: auto !important;
+    width: 800px;
+}
+
+ul.tabLinks li {
+    float: left;
+    height: 100%;
+    list-style: none;
+    padding-left: 10px;
+    padding-right: 10px;
+    padding-top: 5px;
+    padding-bottom: 5px;
+    margin-bottom: 0;
+    -moz-border-radius: 7px;
+    border-radius: 7px;
+    margin-right: 25px;
+    border: solid 1px #d4d4d4;
+    background-color: #f0f0f0;
+}
+
+ul.tabLinks li:hover {
+    background-color: #fafafa;
+}
+
+ul.tabLinks li.selected {
+    background-color: #c5f0f5;
+    border-color: #c5f0f5;
+}
+
+ul.tabLinks a {
+    font-size: 120%;
+    display: block;
+    outline: none;
+    text-decoration: none;
+    margin: 0;
+    padding: 0;
+}
+
+ul.tabLinks li h2 {
+    margin: 0;
+    padding: 0;
+}
+
+div.tab {
+}
+
+div.selected {
+    display: block;
+}
+
+div.deselected {
+    display: none;
+}
+
+div.tab table {
+    min-width: 350px;
+    width: auto !important;
+    width: 350px;
+    border-collapse: collapse;
+}
+
+div.tab th, div.tab table {
+    border-bottom: solid #d0d0d0 1px;
+}
+
+div.tab th {
+    text-align: left;
+    white-space: nowrap;
+    padding-left: 6em;
+}
+
+div.tab th:first-child {
+    padding-left: 0;
+}
+
+div.tab td {
+    white-space: nowrap;
+    padding-left: 6em;
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
+
+div.tab td:first-child {
+    padding-left: 0;
+}
+
+div.tab td.numeric, div.tab th.numeric {
+    text-align: right;
+}
+
+span.code {
+    display: inline-block;
+    margin-top: 0em;
+    margin-bottom: 1em;
+}
+
+span.code pre {
+    font-size: 11pt;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    padding-left: 10px;
+    padding-right: 10px;
+    margin: 0;
+    background-color: #f7f7f7;
+    border: solid 1px #d0d0d0;
+    min-width: 700px;
+    width: auto !important;
+    width: 700px;
+}
+
+span.wrapped pre {
+    word-wrap: break-word;
+    white-space: pre-wrap;
+    word-break: break-all;
+}
+
+label.hidden {
+    display: none;
+}
\ No newline at end of file
diff --git a/reports/profile/css/style.css b/reports/profile/css/style.css
new file mode 100644
index 0000000000..c4a4239337
--- /dev/null
+++ b/reports/profile/css/style.css
@@ -0,0 +1,4 @@
+
+div.tab td.indentPath {
+    padding-left: 3em;
+}
diff --git a/reports/profile/js/report.js b/reports/profile/js/report.js
new file mode 100644
index 0000000000..83bab4a19f
--- /dev/null
+++ b/reports/profile/js/report.js
@@ -0,0 +1,194 @@
+(function (window, document) {
+    "use strict";
+
+    var tabs = {};
+
+    function changeElementClass(element, classValue) {
+        if (element.getAttribute("className")) {
+            element.setAttribute("className", classValue);
+        } else {
+            element.setAttribute("class", classValue);
+        }
+    }
+
+    function getClassAttribute(element) {
+        if (element.getAttribute("className")) {
+            return element.getAttribute("className");
+        } else {
+            return element.getAttribute("class");
+        }
+    }
+
+    function addClass(element, classValue) {
+        changeElementClass(element, getClassAttribute(element) + " " + classValue);
+    }
+
+    function removeClass(element, classValue) {
+        changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
+    }
+
+    function initTabs() {
+        var container = document.getElementById("tabs");
+
+        tabs.tabs = findTabs(container);
+        tabs.titles = findTitles(tabs.tabs);
+        tabs.headers = findHeaders(container);
+        tabs.select = select;
+        tabs.deselectAll = deselectAll;
+        tabs.select(0);
+
+        return true;
+    }
+
+    function getCheckBox() {
+        return document.getElementById("line-wrapping-toggle");
+    }
+
+    function getLabelForCheckBox() {
+        return document.getElementById("label-for-line-wrapping-toggle");
+    }
+
+    function findCodeBlocks() {
+        var spans = document.getElementById("tabs").getElementsByTagName("span");
+        var codeBlocks = [];
+        for (var i = 0; i < spans.length; ++i) {
+            if (spans[i].className.indexOf("code") >= 0) {
+                codeBlocks.push(spans[i]);
+            }
+        }
+        return codeBlocks;
+    }
+
+    function forAllCodeBlocks(operation) {
+        var codeBlocks = findCodeBlocks();
+
+        for (var i = 0; i < codeBlocks.length; ++i) {
+            operation(codeBlocks[i], "wrapped");
+        }
+    }
+
+    function toggleLineWrapping() {
+        var checkBox = getCheckBox();
+
+        if (checkBox.checked) {
+            forAllCodeBlocks(addClass);
+        } else {
+            forAllCodeBlocks(removeClass);
+        }
+    }
+
+    function initControls() {
+        if (findCodeBlocks().length > 0) {
+            var checkBox = getCheckBox();
+            var label = getLabelForCheckBox();
+
+            checkBox.onclick = toggleLineWrapping;
+            checkBox.checked = false;
+
+            removeClass(label, "hidden");
+         }
+    }
+
+    function switchTab() {
+        var id = this.id.substr(1);
+
+        for (var i = 0; i < tabs.tabs.length; i++) {
+            if (tabs.tabs[i].id === id) {
+                tabs.select(i);
+                break;
+            }
+        }
+
+        return false;
+    }
+
+    function select(i) {
+        this.deselectAll();
+
+        changeElementClass(this.tabs[i], "tab selected");
+        changeElementClass(this.headers[i], "selected");
+
+        while (this.headers[i].firstChild) {
+            this.headers[i].removeChild(this.headers[i].firstChild);
+        }
+
+        var h2 = document.createElement("H2");
+
+        h2.appendChild(document.createTextNode(this.titles[i]));
+        this.headers[i].appendChild(h2);
+    }
+
+    function deselectAll() {
+        for (var i = 0; i < this.tabs.length; i++) {
+            changeElementClass(this.tabs[i], "tab deselected");
+            changeElementClass(this.headers[i], "deselected");
+
+            while (this.headers[i].firstChild) {
+                this.headers[i].removeChild(this.headers[i].firstChild);
+            }
+
+            var a = document.createElement("A");
+
+            a.setAttribute("id", "ltab" + i);
+            a.setAttribute("href", "#tab" + i);
+            a.onclick = switchTab;
+            a.appendChild(document.createTextNode(this.titles[i]));
+
+            this.headers[i].appendChild(a);
+        }
+    }
+
+    function findTabs(container) {
+        return findChildElements(container, "DIV", "tab");
+    }
+
+    function findHeaders(container) {
+        var owner = findChildElements(container, "UL", "tabLinks");
+        return findChildElements(owner[0], "LI", null);
+    }
+
+    function findTitles(tabs) {
+        var titles = [];
+
+        for (var i = 0; i < tabs.length; i++) {
+            var tab = tabs[i];
+            var header = findChildElements(tab, "H2", null)[0];
+
+            header.parentNode.removeChild(header);
+
+            if (header.innerText) {
+                titles.push(header.innerText);
+            } else {
+                titles.push(header.textContent);
+            }
+        }
+
+        return titles;
+    }
+
+    function findChildElements(container, name, targetClass) {
+        var elements = [];
+        var children = container.childNodes;
+
+        for (var i = 0; i < children.length; i++) {
+            var child = children.item(i);
+
+            if (child.nodeType === 1 && child.nodeName === name) {
+                if (targetClass && child.className.indexOf(targetClass) < 0) {
+                    continue;
+                }
+
+                elements.push(child);
+            }
+        }
+
+        return elements;
+    }
+
+    // Entry point.
+
+    window.onload = function() {
+        initTabs();
+        initControls();
+    };
+} (window, window.document));
\ No newline at end of file
diff --git a/reports/profile/profile-2019-10-29-17-10-55.html b/reports/profile/profile-2019-10-29-17-10-55.html
new file mode 100644
index 0000000000..ce4c906a56
--- /dev/null
+++ b/reports/profile/profile-2019-10-29-17-10-55.html
@@ -0,0 +1,317 @@
+
+
+
+
+
+Profile report
+
+
+
+
+
+
+

Profile report

+ +
+ +
+

Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionDuration
Total Build Time4.150s
Startup1.202s
Settings and BuildSrc0.325s
Loading Projects0.037s
Configuring Projects-57.727s
Artifact Transforms0s
Task Execution0s
+
+
+

Configuration

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProjectDuration
All projects-57.727s
:0.176s
:lib:base0.068s
:lib:utilcode0.038s
:plugin:api-gradle-plugin0.038s
:lib:subutil0.033s
:lib:utildebug0.028s
:lib:common0.027s
:lib:utildebug-no-op0.023s
:plugin:bus-gradle-plugin0.021s
:feature:main0.002s
:feature:utilcode0.002s
:lib0.001s
:feature0s
:feature:launcher0s
:feature:subutil0s
:plugin0s
:feature:launcher:app-58.184s
+
+
+

Dependency Resolution

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DependenciesDuration
All dependencies0.124s
:classpath0.117s
:plugin:api-gradle-plugin:classpath0.003s
detachedConfiguration10.002s
detachedConfiguration20.002s
:plugin:bus-gradle-plugin:classpath0s
+
+
+

Artifact Transforms

+ + + + + + + + + + + +
TransformDuration
All transforms0s
+
+
+

Task Execution

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TaskDurationResult
:0s(total)
:feature0s(total)
:feature:launcher0s(total)
:feature:launcher:app0s(total)
:feature:main0s(total)
:feature:subutil0s(total)
:feature:utilcode0s(total)
:lib0s(total)
:lib:base0s(total)
:lib:common0s(total)
:lib:subutil0s(total)
:lib:utilcode0s(total)
:lib:utildebug0s(total)
:lib:utildebug-no-op0s(total)
:plugin0s(total)
:plugin:api-gradle-plugin0s(total)
:plugin:bus-gradle-plugin0s(total)
+
+
+ +
+ + diff --git a/reports/profile/profile-2019-10-29-17-14-42.html b/reports/profile/profile-2019-10-29-17-14-42.html new file mode 100644 index 0000000000..833ff50147 --- /dev/null +++ b/reports/profile/profile-2019-10-29-17-14-42.html @@ -0,0 +1,317 @@ + + + + + +Profile report + + + + + +
+

Profile report

+ +
+ +
+

Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionDuration
Total Build Time1.580s
Startup0.508s
Settings and BuildSrc0.097s
Loading Projects0.015s
Configuring Projects-42.833s
Artifact Transforms0s
Task Execution0s
+
+
+

Configuration

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProjectDuration
All projects-42.833s
:0.143s
:lib:utildebug-no-op0.031s
:lib:base0.024s
:lib:subutil0.024s
:plugin:api-gradle-plugin0.023s
:lib:utilcode0.022s
:lib:common0.020s
:lib:utildebug0.019s
:plugin:bus-gradle-plugin0.008s
:feature:launcher0.001s
:feature:main0.001s
:feature0s
:feature:subutil0s
:feature:utilcode0s
:lib0s
:plugin0s
:feature:launcher:app-43.149s
+
+
+

Dependency Resolution

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DependenciesDuration
All dependencies0.116s
:classpath0.110s
:plugin:api-gradle-plugin:classpath0.003s
detachedConfiguration10.002s
detachedConfiguration20.001s
:plugin:bus-gradle-plugin:classpath0s
+
+
+

Artifact Transforms

+ + + + + + + + + + + +
TransformDuration
All transforms0s
+
+
+

Task Execution

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TaskDurationResult
:0s(total)
:feature0s(total)
:feature:launcher0s(total)
:feature:launcher:app0s(total)
:feature:main0s(total)
:feature:subutil0s(total)
:feature:utilcode0s(total)
:lib0s(total)
:lib:base0s(total)
:lib:common0s(total)
:lib:subutil0s(total)
:lib:utilcode0s(total)
:lib:utildebug0s(total)
:lib:utildebug-no-op0s(total)
:plugin0s(total)
:plugin:api-gradle-plugin0s(total)
:plugin:bus-gradle-plugin0s(total)
+
+
+ +
+ + diff --git a/reports/profile/profile-2019-10-29-17-19-01.html b/reports/profile/profile-2019-10-29-17-19-01.html new file mode 100644 index 0000000000..eedef56720 --- /dev/null +++ b/reports/profile/profile-2019-10-29-17-19-01.html @@ -0,0 +1,317 @@ + + + + + +Profile report + + + + + +
+

Profile report

+ +
+ +
+

Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionDuration
Total Build Time4.828s
Startup0.463s
Settings and BuildSrc0.047s
Loading Projects0.006s
Configuring Projects-3.404s
Artifact Transforms0s
Task Execution0s
+
+
+

Configuration

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProjectDuration
All projects-3.404s
:lib:base1.334s
:plugin:bus-gradle-plugin0.186s
:lib:subutil0.184s
:plugin:api-gradle-plugin0.140s
:0.116s
:lib:utilcode0.066s
:lib:utildebug0.054s
:lib:utildebug-no-op0.051s
:lib:common0.036s
:feature:subutil0.001s
:lib0.001s
:feature0s
:feature:launcher0s
:feature:main0s
:feature:utilcode0s
:plugin0s
:feature:launcher:app-5.573s
+
+
+

Dependency Resolution

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DependenciesDuration
All dependencies0.030s
:classpath0.025s
:plugin:api-gradle-plugin:classpath0.002s
detachedConfiguration10.002s
:plugin:bus-gradle-plugin:classpath0.001s
detachedConfiguration20s
+
+
+

Artifact Transforms

+ + + + + + + + + + + +
TransformDuration
All transforms0s
+
+
+

Task Execution

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TaskDurationResult
:0s(total)
:feature0s(total)
:feature:launcher0s(total)
:feature:launcher:app0s(total)
:feature:main0s(total)
:feature:subutil0s(total)
:feature:utilcode0s(total)
:lib0s(total)
:lib:base0s(total)
:lib:common0s(total)
:lib:subutil0s(total)
:lib:utilcode0s(total)
:lib:utildebug0s(total)
:lib:utildebug-no-op0s(total)
:plugin0s(total)
:plugin:api-gradle-plugin0s(total)
:plugin:bus-gradle-plugin0s(total)
+
+
+ +
+ + diff --git a/reports/profile/profile-2019-10-29-17-19-16.html b/reports/profile/profile-2019-10-29-17-19-16.html new file mode 100644 index 0000000000..7d83036398 --- /dev/null +++ b/reports/profile/profile-2019-10-29-17-19-16.html @@ -0,0 +1,317 @@ + + + + + +Profile report + + + + + +
+

Profile report

+ +
+ +
+

Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionDuration
Total Build Time1.354s
Startup0.481s
Settings and BuildSrc0.071s
Loading Projects0.010s
Configuring Projects-17.351s
Artifact Transforms0s
Task Execution0s
+
+
+

Configuration

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProjectDuration
All projects-17.351s
:0.131s
:lib:utildebug-no-op0.065s
:lib:utilcode0.042s
:lib:utildebug0.038s
:lib:subutil0.026s
:lib:base0.017s
:plugin:api-gradle-plugin0.016s
:lib:common0.015s
:plugin:bus-gradle-plugin0.008s
:lib0.001s
:feature0s
:feature:launcher0s
:feature:main0s
:feature:subutil0s
:feature:utilcode0s
:plugin0s
:feature:launcher:app-17.710s
+
+
+

Dependency Resolution

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DependenciesDuration
All dependencies0.101s
:classpath0.098s
:plugin:api-gradle-plugin:classpath0.002s
detachedConfiguration10.001s
:plugin:bus-gradle-plugin:classpath0s
detachedConfiguration20s
+
+
+

Artifact Transforms

+ + + + + + + + + + + +
TransformDuration
All transforms0s
+
+
+

Task Execution

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TaskDurationResult
:0s(total)
:feature0s(total)
:feature:launcher0s(total)
:feature:launcher:app0s(total)
:feature:main0s(total)
:feature:subutil0s(total)
:feature:utilcode0s(total)
:lib0s(total)
:lib:base0s(total)
:lib:common0s(total)
:lib:subutil0s(total)
:lib:utilcode0s(total)
:lib:utildebug0s(total)
:lib:utildebug-no-op0s(total)
:plugin0s(total)
:plugin:api-gradle-plugin0s(total)
:plugin:bus-gradle-plugin0s(total)
+
+
+ +
+ + diff --git a/reports/profile/profile-2019-10-29-17-56-45.html b/reports/profile/profile-2019-10-29-17-56-45.html new file mode 100644 index 0000000000..a8f52f6803 --- /dev/null +++ b/reports/profile/profile-2019-10-29-17-56-45.html @@ -0,0 +1,317 @@ + + + + + +Profile report + + + + + +
+

Profile report

+ +
+ +
+

Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionDuration
Total Build Time7.699s
Startup0.511s
Settings and BuildSrc0.434s
Loading Projects0.045s
Configuring Projects-48.490s
Artifact Transforms0s
Task Execution0s
+
+
+

Configuration

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProjectDuration
All projects-48.490s
:lib:base1.721s
:0.538s
:plugin:api-gradle-plugin0.518s
:lib:subutil0.294s
:plugin:bus-gradle-plugin0.231s
:lib:utildebug0.127s
:lib:utilcode0.108s
:lib:utildebug-no-op0.069s
:lib:common0.059s
:feature:launcher0.004s
:feature:utilcode0.003s
:feature0.002s
:lib0.002s
:feature:main0.001s
:feature:subutil0.001s
:plugin0s
:feature:launcher:app-52.168s
+
+
+

Dependency Resolution

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DependenciesDuration
All dependencies0.221s
:classpath0.214s
:plugin:api-gradle-plugin:classpath0.003s
detachedConfiguration10.002s
:plugin:bus-gradle-plugin:classpath0.001s
detachedConfiguration20.001s
+
+
+

Artifact Transforms

+ + + + + + + + + + + +
TransformDuration
All transforms0s
+
+
+

Task Execution

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TaskDurationResult
:0s(total)
:feature0s(total)
:feature:launcher0s(total)
:feature:launcher:app0s(total)
:feature:main0s(total)
:feature:subutil0s(total)
:feature:utilcode0s(total)
:lib0s(total)
:lib:base0s(total)
:lib:common0s(total)
:lib:subutil0s(total)
:lib:utilcode0s(total)
:lib:utildebug0s(total)
:lib:utildebug-no-op0s(total)
:plugin0s(total)
:plugin:api-gradle-plugin0s(total)
:plugin:bus-gradle-plugin0s(total)
+
+
+ +
+ + From 4e17cd81c8467fc381f1c2df36fdcf4fb94fd229 Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Sat, 23 Nov 2019 22:01:31 +0800 Subject: [PATCH 069/194] see 11/23 log --- CHANGELOG.md | 1 + build.gradle | 3 +- buildApp.gradle | 25 +- buildLib.gradle | 2 +- buildSrc/src/main/groovy/Config.groovy | 150 ++++------ buildSrc/src/main/groovy/ConfigUtils.groovy | 282 ++++-------------- buildSrc/src/main/groovy/DepConfig.groovy | 42 ++- buildSrc/src/main/groovy/GLog.groovy | 4 +- .../src/main/groovy/TaskDurationUtils.groovy | 86 ++++++ config.json | 27 ++ feature/launcher/app/build.gradle | 2 +- .../launcher/app/src/main/AndroidManifest.xml | 1 + feature/main/app/src/main/AndroidManifest.xml | 1 + feature/main/pkg/src/main/AndroidManifest.xml | 1 + .../java/com/blankj/main/pkg/MainActivity.kt | 5 + .../pkg/feature/pinyin/PinyinActivity.kt | 2 +- .../blankj/subutil/pkg/helper/DialogHelper.kt | 44 +-- .../utilcode/pkg/src/main/AndroidManifest.xml | 18 +- .../utilcode/pkg/feature/CoreUtilActivity.kt | 2 - .../pkg/feature/activity/ActivityActivity.kt | 16 +- .../feature/activity/SubActivityActivity.kt | 5 +- .../feature/adaptScreen/AdaptCloseActivity.kt | 3 +- .../adaptScreen/AdaptHeightActivity.kt | 3 +- .../feature/adaptScreen/AdaptWidthActivity.kt | 5 +- .../utilcode/pkg/feature/bar/BarActivity.kt | 16 +- .../pkg/feature/bar/BarStatusAlphaFragment.kt | 70 ----- .../pkg/feature/bar/BarStatusColorFragment.kt | 58 ---- .../feature/bar/BarStatusCustomFragment.kt | 43 --- .../feature/bar/BarStatusDrawerActivity.kt | 122 -------- .../feature/bar/BarStatusImageViewActivity.kt | 76 ----- .../feature/bar/BarStatusImageViewFragment.kt | 72 ----- .../feature/bar/{ => nav}/BarNavActivity.kt | 2 +- .../BarNotificationActivity.kt | 3 +- .../bar/{ => status}/BarStatusActivity.kt | 2 +- .../BarStatusActivityAlpha.kt} | 12 +- .../BarStatusActivityColor.kt} | 8 +- .../BarStatusActivityCustom.kt} | 11 +- .../bar/status/BarStatusActivityDrawer.kt | 111 +++++++ .../bar/status/BarStatusActivityImageView.kt | 63 ++++ .../fragment}/BarStatusFragmentActivity.kt | 24 +- .../status/fragment/BarStatusFragmentAlpha.kt | 68 +++++ .../status/fragment/BarStatusFragmentColor.kt | 59 ++++ .../fragment/BarStatusFragmentCustom.kt | 38 +++ .../fragment/BarStatusFragmentImageView.kt | 65 ++++ .../pkg/feature/bus/BusCompareActivity.kt | 10 +- .../pkg/feature/click/ClickActivity.kt | 123 +++++--- .../pkg/feature/fragment/ChildFragment.kt | 75 +++-- .../pkg/feature/fragment/ContainerFragment.kt | 208 +++++++------ .../pkg/feature/fragment/FragmentActivity.kt | 9 +- .../pkg/feature/fragment/RootFragment.kt | 11 +- .../pkg/feature/keyboard/KeyboardActivity.kt | 59 ++-- .../utilcode/pkg/feature/mvp/MvpActivity.java | 20 ++ .../pkg/feature/network/NetworkActivity.kt | 1 + .../feature/permission/PermissionActivity.kt | 7 +- .../utilcode/pkg/feature/span/SpanActivity.kt | 19 +- .../utilcode/pkg/helper/DialogHelper.kt | 216 +++++++++----- ...bottom_200.xml => slide_bottom_in_200.xml} | 0 ...ottom_200.xml => slide_bottom_out_200.xml} | 0 ..._left_1000.xml => slide_left_out_1000.xml} | 0 ...right_1000.xml => slide_right_in_1000.xml} | 0 .../main/res/drawable/keyboard_dialog_bg.xml | 10 + .../res/layout/activity_bar_status_alpha.xml | 32 -- .../res/layout/activity_bar_status_drawer.xml | 65 ---- .../layout/activity_bar_status_image_view.xml | 43 --- .../layout/activity_bar_status_swipe_back.xml | 53 ---- .../src/main/res/layout/activity_click.xml | 65 ---- ...activity_item_shared_element_activity.xml} | 0 .../src/main/res/layout/activity_keyboard.xml | 53 ---- ...vity_sub.xml => activity_sub_activity.xml} | 0 .../main/res/layout/activity_util_core.xml | 6 - ...ose.xml => adaptscreen_close_activity.xml} | 0 ...ht.xml => adaptscreen_height_activity.xml} | 0 ...dth.xml => adaptscreen_width_activity.xml} | 0 ...pha1.xml => bar_status_alpha_activity.xml} | 2 +- .../res/layout/bar_status_alpha_fragment.xml | 14 + .../res/layout/bar_status_color_fragment.xml | 14 + ...tom.xml => bar_status_custom_fragment.xml} | 0 .../res/layout/bar_status_drawer_activity.xml | 15 + ...t.xml => bar_status_fragment_activity.xml} | 2 +- .../layout/bar_status_image_view_activity.xml | 14 + .../layout/bar_status_image_view_fragment.xml | 27 ++ .../pkg/src/main/res/layout/dialog_screen.xml | 6 - ...ity_fragment.xml => fragment_activity.xml} | 2 +- .../res/layout/fragment_bar_status_alpha.xml | 44 --- .../res/layout/fragment_bar_status_color.xml | 35 --- .../layout/fragment_bar_status_image_view.xml | 51 ---- .../src/main/res/layout/fragment_child.xml | 36 +-- .../main/res/layout/fragment_container.xml | 80 +---- ...ialog_fragment.xml => fragment_dialog.xml} | 0 .../layout/fragment_item_shared_element.xml | 19 ++ .../pkg/src/main/res/layout/fragment_root.xml | 3 +- .../pkg/src/main/res/layout/item_image.xml | 18 -- .../src/main/res/layout/keyboard_activity.xml | 16 + ...ialog_keyboard.xml => keyboard_dialog.xml} | 7 +- .../pkg/src/main/res/layout/screen_dialog.xml | 15 + .../{activity_span.xml => span_activity.xml} | 0 .../{dialog_toast.xml => toast_dialog.xml} | 2 +- ...vigation_fragment.xml => fragment_nav.xml} | 0 ...tion_status_bar.xml => status_bar_nav.xml} | 0 .../pkg/src/main/res/values/strings.xml | 3 +- .../pkg/src/main/res/values/styles.xml | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- lib/base/build.gradle | 19 +- .../java/com/blankj/base/BaseActivity.java | 12 +- .../java/com/blankj/base/BaseApplication.java | 4 - .../java/com/blankj/base/BaseFragment.java | 100 +++++-- .../com/blankj/base/BaseLazyFragment.java | 38 --- .../main/java/com/blankj/base/IBaseView.java | 2 +- .../com/blankj/base/dialog/BaseDialog.java | 34 ++- .../base/dialog/BaseDialogFragment.java | 150 ++++++++++ .../blankj/base/dialog/DialogCallback.java | 21 ++ .../base/dialog/DialogLayoutCallback.java | 26 ++ .../src/main/res/layout/fragment_lazy.xml | 5 + lib/common/build.gradle | 2 +- .../common/activity/CommonActivity.java | 51 ++-- .../activity/CommonActivityDrawerView.java | 10 +- .../activity/CommonActivityItemsView.java | 8 +- .../activity/CommonActivityTitleView.java | 12 +- .../common/dialog/CommonDialogContent.java | 113 +++++++ .../common/dialog/CommonDialogLoading.java | 60 ++++ .../common/dialog/CommonLoadingDialog.java | 32 -- .../common/fragment/CommonFragment.java | 77 ++++- .../res/drawable/common_content_dialog_bg.xml | 8 + .../drawable/common_content_dialog_btn_bg.xml | 6 +- .../src/main/res/drawable/common_splash.xml | 9 + .../common_activity_title_stub_scroll.xml | 1 + .../main/res/layout/common_dialog_content.xml | 73 +++++ ...mmon_activity_item.xml => common_item.xml} | 0 .../res/layout/common_item_title_click.xml | 3 +- .../res/layout/common_item_title_seekbar.xml | 2 +- .../res/layout/common_item_title_switch.xml | 2 +- lib/common/src/main/res/values/dimens.xml | 1 + lib/common/src/main/res/values/styles.xml | 29 +- lib/subutil/build.gradle | 18 +- lib/utilcode/README-CN.md | 1 + lib/utilcode/build.gradle | 18 +- .../com/blankj/utilcode/util/AppUtils.java | 2 +- .../com/blankj/utilcode/util/BarUtils.java | 48 ++- .../com/blankj/utilcode/util/ClickUtils.java | 23 +- .../blankj/utilcode/util/EncryptUtils.java | 42 +++ .../blankj/utilcode/util/FragmentUtils.java | 4 +- .../com/blankj/utilcode/util/IntentUtils.java | 2 +- .../blankj/utilcode/util/KeyboardUtils.java | 43 ++- .../blankj/utilcode/util/PermissionUtils.java | 2 + .../com/blankj/utilcode/util/ToastUtils.java | 22 +- .../blankj/utilcode/util/UiMessageUtils.java | 1 + .../java/com/blankj/utilcode/util/Utils.java | 3 +- .../src/main/res/values-v21/styles.xml | 2 +- .../utilcode/util/EncryptUtilsTest.java | 8 + lib/utildebug/build.gradle | 12 +- plugin/api-gradle-plugin/build.gradle | 16 +- plugin/bus-gradle-plugin/build.gradle | 16 +- .../profile/profile-2019-11-20-12-52-35.html | 144 +++++++++ .../profile/profile-2019-11-20-13-40-34.html | 144 +++++++++ .../profile/profile-2019-11-20-13-41-25.html | 144 +++++++++ .../profile/profile-2019-11-22-22-09-54.html | 144 +++++++++ .../profile/profile-2019-11-23-13-46-38.html | 220 ++++++++++++++ settings.gradle | 71 ++++- 158 files changed, 3188 insertions(+), 2041 deletions(-) create mode 100644 buildSrc/src/main/groovy/TaskDurationUtils.groovy create mode 100644 config.json delete mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt delete mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt delete mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt delete mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt delete mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt delete mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt rename feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/{ => nav}/BarNavActivity.kt (98%) rename feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/{ => notification}/BarNotificationActivity.kt (92%) rename feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/{ => status}/BarStatusActivity.kt (97%) rename feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/{BarStatusAlphaActivity.kt => status/BarStatusActivityAlpha.kt} (85%) rename feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/{BarStatusColorActivity.kt => status/BarStatusActivityColor.kt} (90%) rename feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/{BarStatusCustomActivity.kt => status/BarStatusActivityCustom.kt} (61%) create mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityDrawer.kt create mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityImageView.kt rename feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/{ => status/fragment}/BarStatusFragmentActivity.kt (82%) create mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentAlpha.kt create mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentColor.kt create mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentCustom.kt create mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentImageView.kt create mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpActivity.java rename feature/utilcode/pkg/src/main/res/anim/{slide_in_bottom_200.xml => slide_bottom_in_200.xml} (100%) rename feature/utilcode/pkg/src/main/res/anim/{slide_out_bottom_200.xml => slide_bottom_out_200.xml} (100%) rename feature/utilcode/pkg/src/main/res/anim/{slide_out_left_1000.xml => slide_left_out_1000.xml} (100%) rename feature/utilcode/pkg/src/main/res/anim/{slide_in_right_1000.xml => slide_right_in_1000.xml} (100%) create mode 100644 feature/utilcode/pkg/src/main/res/drawable/keyboard_dialog_bg.xml delete mode 100644 feature/utilcode/pkg/src/main/res/layout/activity_bar_status_alpha.xml delete mode 100644 feature/utilcode/pkg/src/main/res/layout/activity_bar_status_drawer.xml delete mode 100644 feature/utilcode/pkg/src/main/res/layout/activity_bar_status_image_view.xml delete mode 100644 feature/utilcode/pkg/src/main/res/layout/activity_bar_status_swipe_back.xml delete mode 100644 feature/utilcode/pkg/src/main/res/layout/activity_click.xml rename feature/utilcode/pkg/src/main/res/layout/{activity_activity_item_iv.xml => activity_item_shared_element_activity.xml} (100%) delete mode 100644 feature/utilcode/pkg/src/main/res/layout/activity_keyboard.xml rename feature/utilcode/pkg/src/main/res/layout/{activity_activity_sub.xml => activity_sub_activity.xml} (100%) delete mode 100644 feature/utilcode/pkg/src/main/res/layout/activity_util_core.xml rename feature/utilcode/pkg/src/main/res/layout/{activity_adaptscreen_close.xml => adaptscreen_close_activity.xml} (100%) rename feature/utilcode/pkg/src/main/res/layout/{activity_adaptscreen_height.xml => adaptscreen_height_activity.xml} (100%) rename feature/utilcode/pkg/src/main/res/layout/{activity_adaptscreen_width.xml => adaptscreen_width_activity.xml} (100%) rename feature/utilcode/pkg/src/main/res/layout/{activity_bar_status_alpha1.xml => bar_status_alpha_activity.xml} (84%) create mode 100644 feature/utilcode/pkg/src/main/res/layout/bar_status_alpha_fragment.xml create mode 100644 feature/utilcode/pkg/src/main/res/layout/bar_status_color_fragment.xml rename feature/utilcode/pkg/src/main/res/layout/{fragment_bar_status_custom.xml => bar_status_custom_fragment.xml} (100%) create mode 100644 feature/utilcode/pkg/src/main/res/layout/bar_status_drawer_activity.xml rename feature/utilcode/pkg/src/main/res/layout/{activity_bar_status_fragment.xml => bar_status_fragment_activity.xml} (94%) create mode 100644 feature/utilcode/pkg/src/main/res/layout/bar_status_image_view_activity.xml create mode 100644 feature/utilcode/pkg/src/main/res/layout/bar_status_image_view_fragment.xml delete mode 100644 feature/utilcode/pkg/src/main/res/layout/dialog_screen.xml rename feature/utilcode/pkg/src/main/res/layout/{activity_fragment.xml => fragment_activity.xml} (94%) delete mode 100644 feature/utilcode/pkg/src/main/res/layout/fragment_bar_status_alpha.xml delete mode 100644 feature/utilcode/pkg/src/main/res/layout/fragment_bar_status_color.xml delete mode 100644 feature/utilcode/pkg/src/main/res/layout/fragment_bar_status_image_view.xml rename feature/utilcode/pkg/src/main/res/layout/{dialog_fragment.xml => fragment_dialog.xml} (100%) create mode 100644 feature/utilcode/pkg/src/main/res/layout/fragment_item_shared_element.xml delete mode 100644 feature/utilcode/pkg/src/main/res/layout/item_image.xml create mode 100644 feature/utilcode/pkg/src/main/res/layout/keyboard_activity.xml rename feature/utilcode/pkg/src/main/res/layout/{dialog_keyboard.xml => keyboard_dialog.xml} (89%) create mode 100644 feature/utilcode/pkg/src/main/res/layout/screen_dialog.xml rename feature/utilcode/pkg/src/main/res/layout/{activity_span.xml => span_activity.xml} (100%) rename feature/utilcode/pkg/src/main/res/layout/{dialog_toast.xml => toast_dialog.xml} (89%) rename feature/utilcode/pkg/src/main/res/menu/{navigation_fragment.xml => fragment_nav.xml} (100%) rename feature/utilcode/pkg/src/main/res/menu/{navigation_status_bar.xml => status_bar_nav.xml} (100%) delete mode 100644 lib/base/src/main/java/com/blankj/base/BaseLazyFragment.java create mode 100644 lib/base/src/main/java/com/blankj/base/dialog/BaseDialogFragment.java create mode 100644 lib/base/src/main/java/com/blankj/base/dialog/DialogCallback.java create mode 100644 lib/base/src/main/java/com/blankj/base/dialog/DialogLayoutCallback.java create mode 100644 lib/base/src/main/res/layout/fragment_lazy.xml create mode 100644 lib/common/src/main/java/com/blankj/common/dialog/CommonDialogContent.java create mode 100644 lib/common/src/main/java/com/blankj/common/dialog/CommonDialogLoading.java delete mode 100644 lib/common/src/main/java/com/blankj/common/dialog/CommonLoadingDialog.java create mode 100644 lib/common/src/main/res/drawable/common_content_dialog_bg.xml rename feature/utilcode/pkg/src/main/res/drawable/click_shape_round_rect.xml => lib/common/src/main/res/drawable/common_content_dialog_btn_bg.xml (53%) create mode 100644 lib/common/src/main/res/drawable/common_splash.xml create mode 100644 lib/common/src/main/res/layout/common_dialog_content.xml rename lib/common/src/main/res/layout/{common_activity_item.xml => common_item.xml} (100%) create mode 100644 reports/profile/profile-2019-11-20-12-52-35.html create mode 100644 reports/profile/profile-2019-11-20-13-40-34.html create mode 100644 reports/profile/profile-2019-11-20-13-41-25.html create mode 100644 reports/profile/profile-2019-11-22-22-09-54.html create mode 100644 reports/profile/profile-2019-11-23-13-46-38.html diff --git a/CHANGELOG.md b/CHANGELOG.md index c9fa371e30..8b68339099 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ +* `19/11/22` [fix] Adapt the project for Gradle version of 6.0. * `19/10/30` [add] Publish bus plugin v2.3. Publish api plugin v1.1. * `19/10/24` [upd] Demo's UI. * `19/10/22` [add] NotificationUtils. diff --git a/build.gradle b/build.gradle index 1a9f672d5a..04628ed39a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,9 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + ConfigUtils.init(gradle) repositories { // use for debug plugin local - if (Config.depConfig.plugin.bus.useLocal || Config.depConfig.plugin.api.useLocal) { + if (Config.depConfig.plugin_bus.useLocal || Config.depConfig.plugin_api.useLocal) { maven() { url new File("maven") } diff --git a/buildApp.gradle b/buildApp.gradle index c46f1805d1..5a3dfe3f3a 100644 --- a/buildApp.gradle +++ b/buildApp.gradle @@ -2,11 +2,11 @@ apply { plugin "com.android.application" plugin "kotlin-android" plugin "kotlin-android-extensions" - if (Config.depConfig.plugin.bus.isApply) { - plugin "com.blankj.bus" + if (Config.depConfig.plugin_bus.isApply) { + plugin Config.depConfig.plugin_bus.pluginId } - if (Config.depConfig.plugin.api.isApply) { - plugin "com.blankj.api" + if (Config.depConfig.plugin_api.isApply) { + plugin Config.depConfig.plugin_api.pluginId } } @@ -62,23 +62,20 @@ android { dependencies { // LeakCanary - debugImplementation Config.depConfig.leakcanary.android.dep - debugImplementation Config.depConfig.leakcanary.support_fragment.dep - releaseImplementation Config.depConfig.leakcanary.android_no_op.dep + debugImplementation Config.depConfig.leakcanary_android.dep + debugImplementation Config.depConfig.leakcanary_support_fragment.dep + releaseImplementation Config.depConfig.leakcanary_android_no_op.dep - debugImplementation Config.depConfig.lib.utildebug.dep - releaseImplementation Config.depConfig.lib.utildebug_no_op.dep - - debugImplementation 'com.didichuxing.doraemonkit:doraemonkit:1.1.8' - releaseImplementation 'com.didichuxing.doraemonkit:doraemonkit-no-op:1.1.8' + debugImplementation Config.depConfig.lib_utildebug.dep + releaseImplementation Config.depConfig.lib_utildebug_no_op.dep // 根据 Config.pkgConfig 来依赖所有 pkg for (def entrySet : ConfigUtils.getApplyPkgs().entrySet()) { api entrySet.value.dep } - if (Config.depConfig.feature.mock.isApply) { - api Config.depConfig.feature.mock.dep + if (Config.depConfig.feature_mock.isApply) { + api Config.depConfig.feature_mock.dep } } diff --git a/buildLib.gradle b/buildLib.gradle index f6342eea02..6dc9b18b2b 100644 --- a/buildLib.gradle +++ b/buildLib.gradle @@ -38,6 +38,6 @@ dependencies { api entrySet.value.dep } } else if (project.name == 'export') { - api Config.depConfig.lib.common.dep + api Config.depConfig.lib_common.dep } } \ No newline at end of file diff --git a/buildSrc/src/main/groovy/Config.groovy b/buildSrc/src/main/groovy/Config.groovy index 2116991668..311b13a1fe 100644 --- a/buildSrc/src/main/groovy/Config.groovy +++ b/buildSrc/src/main/groovy/Config.groovy @@ -18,100 +18,70 @@ class Config { static versionName = '1.25.10-alpha5'// E.g. 1.9.72 => 1,009,072 // lib version - static kotlin_version = '1.3.10' + static kotlin_version = '1.3.50' static support_version = '28.0.0' static leakcanary_version = '1.6.3' - // appConfig 配置的是可以跑 app 的模块,git 提交务必只包含 launcher - static appConfig = ['launcher'] - // pkgConfig 配置的是要依赖的功能包,为空则依赖全部,git 提交务必为空 - static pkgConfig = [] - static depConfig = [ - plugin : [ - gradle : new DepConfig("com.android.tools.build:gradle:3.4.2"), - kotlin : new DepConfig("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"), - maven : new DepConfig("com.github.dcendents:android-maven-gradle-plugin:2.1"),// 上传到 maven - bintray: new DepConfig("com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4"),// 上传到 bintray - traute : new DepConfig("tech.harmonysoft:traute-gradle:1.1.10"),// 注解转非空判断 - - // 本地第一次上传插件新的版本需设置 useLocal = true, isApply = false - // 本地上传成功之后 isApply = true 即可应用插件来调试,后续版本更新无需设置 isApply = false - // 发布版本的话把 useLocal = false, isApply = false,更新版本号,发布成功后 isApply = true 即可使用远程库版本 - api : new DepConfig(false/*是否本地调试*/, "com.blankj:api-gradle-plugin:1.1", true/*是否使用插件*/), - bus : new DepConfig(false/*是否本地调试*/, "com.blankj:bus-gradle-plugin:2.3", true/*是否使用插件*/), - ], - - api_gradle_plugin: new DepConfig(":plugin:api-gradle-plugin", false), - bus_gradle_plugin: new DepConfig(":plugin:bus-gradle-plugin", false), - - feature : [ - mock : new DepConfig(":feature:mock"), - - launcher: [ - app: new DepConfig(":feature:launcher:app") - ], - - main : [ - app: new DepConfig(":feature:main:app"), - pkg: new DepConfig(":feature:main:pkg"), - ], - - subutil : [ - app : new DepConfig(":feature:subutil:app"), - pkg : new DepConfig(":feature:subutil:pkg"), - export: new DepConfig(":feature:subutil:export"), - ], - - utilcode: [ - app : new DepConfig(":feature:utilcode:app"), - pkg : new DepConfig(":feature:utilcode:pkg"), - export: new DepConfig(":feature:utilcode:export"), - ], - ], - - lib : [ - base : new DepConfig(":lib:base"), - common : new DepConfig(":lib:common"), - subutil : new DepConfig(":lib:subutil"), - utilcode : new DepConfig(true/*是否本地调试*/, ":lib:utilcode", "com.blankj:utilcode:$versionName"), - - utildebug : new DepConfig(true/*是否本地调试*/, ":lib:utildebug", "com.blankj:utildebug:$versionName"), - utildebug_no_op: new DepConfig(true/*是否本地调试*/, ":lib:utildebug-no-op", "com.blankj:utildebug-no-op:$versionName"), - ], - - support : [ - appcompat_v7: new DepConfig("com.android.support:appcompat-v7:$support_version"), - design : new DepConfig("com.android.support:design:$support_version"), - multidex : new DepConfig("com.android.support:multidex:1.0.2"), - constraint : new DepConfig("com.android.support.constraint:constraint-layout:1.1.3"), - ], - - kotlin : new DepConfig("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"), - - leakcanary : [ - android : new DepConfig("com.squareup.leakcanary:leakcanary-android:$leakcanary_version"), - android_no_op : new DepConfig("com.squareup.leakcanary:leakcanary-android-no-op:$leakcanary_version"), - support_fragment: new DepConfig("com.squareup.leakcanary:leakcanary-support-fragment:$leakcanary_version"), - ], - - free_proguard : new DepConfig("com.blankj:free-proguard:1.0.1"), - swipe_panel : new DepConfig("com.blankj:swipe-panel:1.2"), - - gson : new DepConfig("com.google.code.gson:gson:2.8.6"), - glide : new DepConfig("com.github.bumptech.glide:glide:4.7.1"), - retrofit : new DepConfig("com.squareup.retrofit2:retrofit:2.4.0"), - commons_io : new DepConfig("commons-io:commons-io:2.6"), - eventbus : [ - lib : new DepConfig("org.greenrobot:eventbus:3.1.1"), - processor: new DepConfig("org.greenrobot:eventbus-annotation-processor:3.0.1") - ], - photo_view : new DepConfig("com.github.chrisbanes:PhotoView:2.0.0"), - - test : [ - junit : new DepConfig("junit:junit:4.12"), - robolectric: new DepConfig("org.robolectric:robolectric:4.2"), - ], + /*Never delete this line*/ + /*Generated by "config.json"*/ + plugin_api_gradle_plugin : new DepConfig(false, true, ":plugin:api-gradle-plugin"), + plugin_bus_gradle_plugin : new DepConfig(false, true, ":plugin:bus-gradle-plugin"), + feature_mock : new DepConfig(false, true, ":feature:mock"), + feature_launcher_app : new DepConfig(true, true, ":feature:launcher:app"), + feature_main_app : new DepConfig(false, true, ":feature:main:app"), + feature_main_pkg : new DepConfig(true, true, ":feature:main:pkg"), + feature_subutil_app : new DepConfig(false, true, ":feature:subutil:app"), + feature_subutil_pkg : new DepConfig(true, true, ":feature:subutil:pkg"), + feature_subutil_export : new DepConfig(true, true, ":feature:subutil:export"), + feature_utilcode_app : new DepConfig(false, true, ":feature:utilcode:app"), + feature_utilcode_pkg : new DepConfig(true, true, ":feature:utilcode:pkg"), + feature_utilcode_export : new DepConfig(true, true, ":feature:utilcode:export"), + lib_base : new DepConfig(true, true, ":lib:base"), + lib_common : new DepConfig(true, true, ":lib:common"), + lib_subutil : new DepConfig(true, true, ":lib:subutil"), + lib_utilcode : new DepConfig(true, true, ":lib:utilcode", "com.blankj:utilcode:1.25.10-alpha5"), + lib_utildebug : new DepConfig(true, true, ":lib:utildebug", "com.blankj:utildebug:1.25.10-alpha5"), + lib_utildebug_no_op : new DepConfig(true, true, ":lib:utildebug-no-op", "com.blankj:utildebug-no-op:1.25.10-alpha5"), + /*Never delete this line*/ + plugin_gradle : new DepConfig(pluginPath: "com.android.tools.build:gradle:3.5.2"), + plugin_kotlin : new DepConfig(pluginPath: "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"), + plugin_maven : new DepConfig(pluginPath: "com.github.dcendents:android-maven-gradle-plugin:2.1", pluginId: "com.github.dcendents.android-maven"),// 上传到 maven + plugin_bintray : new DepConfig(pluginPath: "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4", pluginId: "com.jfrog.bintray"),// 上传到 bintray + plugin_traute : new DepConfig(pluginPath: "tech.harmonysoft:traute-gradle:1.1.10", pluginId: "tech.harmonysoft.oss.traute"),// 注解转非空判断 + + // 本地第一次上传插件新的版本需设置 useLocal = true, isApply = false + // 本地上传成功之后 isApply = true 即可应用插件来调试,后续版本更新无需设置 isApply = false + // 发布版本的话把 useLocal = false, isApply = false,更新版本号,发布成功后 isApply = true 即可使用远程库版本 + plugin_api : new DepConfig(isApply: true, useLocal: false, pluginPath: "com.blankj:api-gradle-plugin:1.1", pluginId: "com.blankj.api"), + plugin_bus : new DepConfig(isApply: true, useLocal: false, pluginPath: "com.blankj:bus-gradle-plugin:2.3", pluginId: "com.blankj.bus"), + + support_appcompat_v7 : new DepConfig("com.android.support:appcompat-v7:$support_version"), + support_design : new DepConfig("com.android.support:design:$support_version"), + support_multidex : new DepConfig("com.android.support:multidex:1.0.2"), + support_constraint : new DepConfig("com.android.support.constraint:constraint-layout:1.1.3"), + + kotlin : new DepConfig("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"), + + leakcanary_android : new DepConfig("com.squareup.leakcanary:leakcanary-android:$leakcanary_version"), + leakcanary_android_no_op : new DepConfig("com.squareup.leakcanary:leakcanary-android-no-op:$leakcanary_version"), + leakcanary_support_fragment: new DepConfig("com.squareup.leakcanary:leakcanary-support-fragment:$leakcanary_version"), + + free_proguard : new DepConfig("com.blankj:free-proguard:1.0.1"), + swipe_panel : new DepConfig("com.blankj:swipe-panel:1.2"), + + gson : new DepConfig("com.google.code.gson:gson:2.8.6"), + glide : new DepConfig("com.github.bumptech.glide:glide:4.7.1"), + retrofit : new DepConfig("com.squareup.retrofit2:retrofit:2.4.0"), + commons_io : new DepConfig("commons-io:commons-io:2.6"), + + eventbus_lib : new DepConfig("org.greenrobot:eventbus:3.1.1"), + eventbus_processor : new DepConfig("org.greenrobot:eventbus-annotation-processor:3.0.1"), + + photo_view : new DepConfig("com.github.chrisbanes:PhotoView:2.0.0"), + + test_junit : new DepConfig("junit:junit:4.12"), + test_robolectric : new DepConfig("org.robolectric:robolectric:4.2"), ] } //./gradlew clean :lib:utilcode:bintrayUpload \ No newline at end of file diff --git a/buildSrc/src/main/groovy/ConfigUtils.groovy b/buildSrc/src/main/groovy/ConfigUtils.groovy index 78c239911e..908f9d72e3 100644 --- a/buildSrc/src/main/groovy/ConfigUtils.groovy +++ b/buildSrc/src/main/groovy/ConfigUtils.groovy @@ -1,16 +1,7 @@ -import org.apache.commons.io.FileUtils -import org.gradle.BuildListener -import org.gradle.BuildResult import org.gradle.api.Project import org.gradle.api.ProjectEvaluationListener import org.gradle.api.ProjectState -import org.gradle.api.Task -import org.gradle.api.execution.TaskExecutionListener -import org.gradle.api.initialization.Settings import org.gradle.api.invocation.Gradle -import org.gradle.api.tasks.TaskState - -import java.text.SimpleDateFormat /** *
@@ -22,235 +13,94 @@ import java.text.SimpleDateFormat
  */
 class ConfigUtils {
 
-    static getApplyPlugins() {
-        def plugins = getDepConfigByFilter(new DepConfigFilter() {
-            @Override
-            boolean accept(String name, DepConfig config) {
-                if (!name.startsWith("plugin.")) return false
-                if (!config.isApply) return false
-                return true
-            }
-        })
-        GLog.d("getApplyPlugins = ${GLog.object2String(plugins)}")
-        return plugins
+    static init(Gradle gradle) {
+        generateDep(gradle)
+        addCommonGradle(gradle)
+        TaskDurationUtils.init(gradle)
+        GitUtils.init(gradle)
     }
 
-    static getApplyPkgs() {
-        def applyPkgs = getDepConfigByFilter(new DepConfigFilter() {
-            @Override
-            boolean accept(String name, DepConfig config) {
-                if (!config.isApply) return false
-                return name.endsWith(".pkg")
+    /**
+     * 根据 depConfig 生成 dep
+     */
+    private static void generateDep(Gradle gradle) {
+        def configs = [:]
+        for (Map.Entry entry : Config.depConfig.entrySet()) {
+            def (name, config) = [entry.key, entry.value]
+            if (name.startsWith("plugin_")) {
+                config.dep = config.pluginPath
+            } else {
+                if (config.useLocal) {
+                    config.dep = gradle.rootProject.findProject(config.localPath)
+                } else {
+                    config.dep = config.remotePath
+                }
             }
-        })
-        GLog.d("getApplyPkgs = ${GLog.object2String(applyPkgs)}")
-        return applyPkgs
+            configs.put(name, config)
+        }
+        GLog.l("generateDep = ${GLog.object2String(configs)}")
     }
 
-    static getApplyExports() {
-        def applyExports = getDepConfigByFilter(new DepConfigFilter() {
+    private static addCommonGradle(Gradle gradle) {
+        gradle.addProjectEvaluationListener(new ProjectEvaluationListener() {
             @Override
-            boolean accept(String name, DepConfig config) {
-                if (!config.isApply) return false
-                return name.endsWith(".export")
-            }
-        })
-        GLog.d("getApplyExports = ${GLog.object2String(applyExports)}")
-        return applyExports
-    }
-
-    static addBuildListener(Gradle gradle) {
-        gradle.addBuildListener(new ConfigBuildListener())
-        GitUtils.init(gradle)
-    }
-
-    private static class ConfigBuildListener implements BuildListener {
-
-        private List taskInfoList = []
-        private long startBuildMillis
-
-        @Override
-        void buildStarted(Gradle gradle) {}
-
-        @Override
-        void settingsEvaluated(Settings settings) {
-            startBuildMillis = System.currentTimeMillis()
-            GLog.d("settingsEvaluated")
-            includeModule(settings)
-        }
-
-        @Override
-        void projectsLoaded(Gradle gradle) {
-            GLog.d("projectsLoaded")
-            generateDep(gradle)
-
-            gradle.addProjectEvaluationListener(new ProjectEvaluationListener() {
-                @Override
-                void beforeEvaluate(Project project) {
-                    if (project.subprojects.isEmpty()) {
-                        if (project.path.contains(":plugin:")) {
-                            return
+            void beforeEvaluate(Project project) {
+                // 在 project 的 build.gradle 前 do sth.
+                if (project.subprojects.isEmpty()) {
+                    if (project.path.contains(":plugin:")) {
+                        return
+                    }
+                    if (project.name == "app") {
+                        GLog.l(project.toString() + " applies buildApp.gradle")
+                        project.apply {
+                            from "${project.rootDir.path}/buildApp.gradle"
                         }
-                        if (project.name == "app") {
-                            GLog.l(project.toString() + " applies buildApp.gradle")
-                            project.apply {
-                                from "${project.rootDir.path}/buildApp.gradle"
-                            }
-                        } else {
-                            GLog.l(project.toString() + " applies buildLib.gradle")
-                            project.apply {
-                                from "${project.rootDir.path}/buildLib.gradle"
-                            }
+                    } else {
+                        GLog.l(project.toString() + " applies buildLib.gradle")
+                        project.apply {
+                            from "${project.rootDir.path}/buildLib.gradle"
                         }
                     }
                 }
-
-                @Override
-                void afterEvaluate(Project project, ProjectState projectState) {
-                }
-            })
-        }
-
-        @Override
-        void projectsEvaluated(Gradle gradle) {
-            GLog.d("projectsEvaluated")
-
-            gradle.addListener(new TaskExecutionListener() {
-                @Override
-                void beforeExecute(Task task) {
-                    task.ext.startTime = System.currentTimeMillis()
-                }
-
-                @Override
-                void afterExecute(Task task, TaskState state) {
-                    def exeDuration = System.currentTimeMillis() - task.ext.startTime
-                    if (exeDuration >= 100) {
-                        taskInfoList.add(new TaskInfo(task, exeDuration))
-                    }
-                }
-            })
-        }
-
-        @Override
-        void buildFinished(BuildResult result) {
-            GLog.d("buildFinished")
-            if (!taskInfoList.isEmpty()) {
-                Collections.sort(taskInfoList, new Comparator() {
-                    @Override
-                    int compare(TaskInfo t, TaskInfo t1) {
-                        return t1.exeDuration - t.exeDuration
-                    }
-                })
-                StringBuilder sb = new StringBuilder()
-                int buildSec = (System.currentTimeMillis() - startBuildMillis) / 1000;
-                int m = buildSec / 60;
-                int s = buildSec % 60;
-                def timeInfo = (m == 0 ? "${s}s" : "${m}m ${s}s (${buildSec}s)")
-                sb.append("BUILD FINISHED in $timeInfo\n")
-                taskInfoList.each {
-                    sb.append(String.format("%7sms %s\n", it.exeDuration, it.task.path))
-                }
-                def content = sb.toString()
-                GLog.l(content)
-                File file = new File(result.gradle.rootProject.buildDir.getAbsolutePath(),
-                        "build_time_records_" + new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".txt")
-                FileUtils.write(file, content)
             }
-        }
 
-        /**
-         * 在 settings.gradle 中 根据 appConfig 和 pkgConfig 来 include 本地模块
-         */
-        private static includeModule(Settings settings) {
-            if (Config.pkgConfig.isEmpty()) {
-                Config.depConfig.feature.mock.isApply = false
+            @Override
+            void afterEvaluate(Project project, ProjectState state) {
+                // 在 project 的 build.gradle 末 do sth.
             }
-            def config = getDepConfigByFilter(new DepConfigFilter() {
-                @Override
-                boolean accept(String name, DepConfig config) {
-                    if (name.endsWith('.app')) {
-                        def appName = name.substring('feature.'.length(), name.length() - 4)
-                        if (!Config.appConfig.contains(appName)) {
-                            config.isApply = false
-                        }
-                    }
-                    if (name.endsWith('.pkg')) {
-                        if (!Config.pkgConfig.isEmpty()) {
-                            def pkgName = name.substring('feature.'.length(), name.length() - 4)
-                            if (!Config.pkgConfig.contains(pkgName)) {
-                                config.isApply = false
-                            }
-                        }
-                    }
+        })
+    }
 
-                    if (!config.isApply) return false
-                    if (!config.useLocal) return false
-                    if (config.localPath == "") return false
-                    return true
-                }
-            }).each { _, cfg ->
-                settings.include cfg.localPath
+    static getApplyPlugins() {
+        def plugins = [:]
+        for (Map.Entry entry : Config.depConfig.entrySet()) {
+            if (entry.value.isApply && entry.key.startsWith("plugin_")) {
+                plugins.put(entry.key, entry.value)
             }
-            GLog.l("includeModule = ${GLog.object2String(config)}")
         }
+        GLog.d("getApplyPlugins = ${GLog.object2String(plugins)}")
+        return plugins
+    }
 
-        /**
-         * 根据 depConfig 生成 dep
-         */
-        private static generateDep(Gradle gradle) {
-            def config = getDepConfigByFilter(new DepConfigFilter() {
-                @Override
-                boolean accept(String name, DepConfig config) {
-                    if (name.startsWith("plugin.")) {
-                        config.dep = config.remotePath
-                        return true
-                    }
-                    if (config.useLocal) {
-                        config.dep = gradle.rootProject.findProject(config.localPath)
-                    } else {
-                        config.dep = config.remotePath
-                    }
-                    return true
-                }
-            })
-            GLog.l("generateDep = ${GLog.object2String(config)}")
-        }
-
-        private static class TaskInfo {
-
-            Task task
-            long exeDuration
-
-            TaskInfo(Task task, long exeDuration) {
-                this.task = task
-                this.exeDuration = exeDuration
+    static getApplyPkgs() {
+        def pkgs = [:]
+        for (Map.Entry entry : Config.depConfig.entrySet()) {
+            if (entry.value.isApply && entry.key.endsWith("_pkg")) {
+                pkgs.put(entry.key, entry.value)
             }
         }
+        GLog.d("getApplyPkgs = ${GLog.object2String(pkgs)}")
+        return pkgs
     }
 
-    static Map getDepConfigByFilter(DepConfigFilter filter) {
-        return _getDepConfigByFilter("", Config.depConfig, filter)
-    }
-
-    private static _getDepConfigByFilter(String namePrefix, Map map, DepConfigFilter filter) {
-        def depConfigList = [:]
-        for (Map.Entry entry : map.entrySet()) {
-            def (name, value) = [entry.getKey(), entry.getValue()]
-            if (value instanceof Map) {
-                namePrefix += (name + '.')
-                depConfigList.putAll(_getDepConfigByFilter(namePrefix, value, filter))
-                namePrefix -= (name + '.')
-                continue
-            }
-            def config = value as DepConfig
-            if (filter == null || filter.accept(namePrefix + name, config)) {
-                depConfigList.put(namePrefix + name, config)
+    static getApplyExports() {
+        def exports = [:]
+        for (Map.Entry entry : Config.depConfig.entrySet()) {
+            if (entry.value.isApply && entry.key.endsWith("_export")) {
+                exports.put(entry.key, entry.value)
             }
         }
-        return depConfigList
-    }
-
-    interface DepConfigFilter {
-        boolean accept(String name, DepConfig config);
+        GLog.d("getApplyExports = ${GLog.object2String(exports)}")
+        return exports
     }
 }
diff --git a/buildSrc/src/main/groovy/DepConfig.groovy b/buildSrc/src/main/groovy/DepConfig.groovy
index 86e56578cf..a50596e788 100644
--- a/buildSrc/src/main/groovy/DepConfig.groovy
+++ b/buildSrc/src/main/groovy/DepConfig.groovy
@@ -7,18 +7,23 @@
  * 
*/ class DepConfig { + boolean isApply // 是否应用 boolean useLocal // 是否使用本地的 String localPath // 本地路径 String remotePath// 远程路径 - boolean isApply // 是否应用 - String path // 最后的路径 + String pluginPath// 插件路径 + String pluginId // 插件 ID def dep // 根据条件生成项目最终的依赖项 + DepConfig() { + isApply = true + } + DepConfig(String path) { - this(path, true) + this(true, path) } - DepConfig(String path, boolean isApply) { + DepConfig(boolean isApply, String path) { if (path.startsWith(":")) { this.useLocal = true this.localPath = path @@ -28,23 +33,26 @@ class DepConfig { this.remotePath = path this.isApply = isApply } - this.path = path } - DepConfig(boolean useLocal, String path, boolean isApply) { // 自定义插件的构造函数 - this(useLocal, "", path, isApply) + DepConfig(boolean useLocal, String localPath, String remotePath) { + this(true, useLocal, localPath, remotePath) } - DepConfig(boolean useLocal, String localPath, String remotePath) { - this(useLocal, localPath, remotePath, true) + DepConfig(boolean isApply, boolean useLocal, String localPath) { + this(isApply, useLocal, localPath, null) } - DepConfig(boolean useLocal, String localPath, String remotePath, boolean isApply) { + DepConfig(boolean isApply, boolean useLocal, String localPath, String remotePath) { + this.isApply = isApply this.useLocal = useLocal this.localPath = localPath this.remotePath = remotePath - this.isApply = isApply - this.path = useLocal ? localPath : remotePath + } + + String getPath() { + if (pluginPath != null) return pluginPath + return useLocal ? localPath : remotePath } String getGroupId() { @@ -62,13 +70,15 @@ class DepConfig { return splits.length == 3 ? splits[2] : null } - @Override String toString() { - return "DepConfig { " + - "useLocal = " + useLocal + + return "{ isApply = ${getFlag(isApply)}" + + ", useLocal = ${getFlag(useLocal)}" + (dep == null ? ", path = " + path : (", dep = " + dep)) + - ", isApply = " + isApply + " }" } + + static String getFlag(boolean b) { + return b ? "✅" : "❌" + } } \ No newline at end of file diff --git a/buildSrc/src/main/groovy/GLog.groovy b/buildSrc/src/main/groovy/GLog.groovy index 3a6d835540..6a5554fc46 100644 --- a/buildSrc/src/main/groovy/GLog.groovy +++ b/buildSrc/src/main/groovy/GLog.groovy @@ -1,5 +1,3 @@ -import org.gradle.internal.impldep.org.apache.http.util.EntityUtils - /** *
  *     author: blankj
@@ -93,7 +91,7 @@ class GLog {
             sb.append("[")
             list.each { v ->
                 if (v instanceof Map || v instanceof List) {
-                    sb.append(String.format("$LogConst.LINE_SEP%${deep++ * 8}s${object2String(v)},", "", k))
+                    sb.append(String.format("$LogConst.LINE_SEP%${deep++ * 8}s${object2String(v)},", ""))
                     deep--
                 } else {
                     sb.append(String.format("$LogConst.LINE_SEP%${deep * 8}s$v,", ""))
diff --git a/buildSrc/src/main/groovy/TaskDurationUtils.groovy b/buildSrc/src/main/groovy/TaskDurationUtils.groovy
new file mode 100644
index 0000000000..48b2d2b6cc
--- /dev/null
+++ b/buildSrc/src/main/groovy/TaskDurationUtils.groovy
@@ -0,0 +1,86 @@
+import org.gradle.BuildListener
+import org.gradle.BuildResult
+import org.gradle.api.Task
+import org.gradle.api.execution.TaskExecutionListener
+import org.gradle.api.initialization.Settings
+import org.gradle.api.invocation.Gradle
+import org.gradle.api.tasks.TaskState
+
+import java.text.SimpleDateFormat
+
+/**
+ * 
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/11/22
+ *     desc  :
+ * 
+ */ +class TaskDurationUtils { + + static List taskInfoList = [] + static long startMillis + + static init(Gradle grd) { + startMillis = System.currentTimeMillis() + grd.addListener(new TaskExecutionListener() { + @Override + void beforeExecute(Task task) { + task.ext.startTime = System.currentTimeMillis() + } + + @Override + void afterExecute(Task task, TaskState state) { + def exeDuration = System.currentTimeMillis() - task.ext.startTime + if (exeDuration >= 100) { + taskInfoList.add(new TaskInfo(task: task, exeDuration: exeDuration)) + } + } + }) + grd.addBuildListener(new BuildListener() { + @Override + void buildStarted(Gradle gradle) {} + + @Override + void settingsEvaluated(Settings settings) {} + + @Override + void projectsLoaded(Gradle gradle) {} + + @Override + void projectsEvaluated(Gradle gradle) {} + + @Override + void buildFinished(BuildResult buildResult) { + if (!taskInfoList.isEmpty()) { + Collections.sort(taskInfoList, new Comparator() { + @Override + int compare(TaskInfo t, TaskInfo t1) { + return t1.exeDuration - t.exeDuration + } + }) + StringBuilder sb = new StringBuilder() + int buildSec = (System.currentTimeMillis() - startMillis) / 1000; + int m = buildSec / 60; + int s = buildSec % 60; + def timeInfo = (m == 0 ? "${s}s" : "${m}m ${s}s (${buildSec}s)") + sb.append("BUILD FINISHED in $timeInfo\n") + taskInfoList.each { + sb.append(String.format("%7sms %s\n", it.exeDuration, it.task.path)) + } + def content = sb.toString() + GLog.d(content) + File file = new File(grd.rootProject.buildDir.getAbsolutePath(), + "build_time_records_" + new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".txt") + file.getParentFile().mkdirs() + file.write(content) + } + } + }) + } + + private static class TaskInfo { + Task task + long exeDuration + } +} diff --git a/config.json b/config.json new file mode 100644 index 0000000000..38f147e8bb --- /dev/null +++ b/config.json @@ -0,0 +1,27 @@ +{ + "appConfigDesc": "appConfig 配置的是可以跑 app 的模块,git 提交务必只包含 launcher", + "appConfig": ["launcher"], + "pkgConfigDesc": "pkgConfig 配置的是要依赖的功能包,为空则依赖全部,git 提交务必为空", + "pkgConfig": [], + "proConfigDesc": "proConfig 配置的是使用本地还是仓库,优先级低于 appConfig 和 pkgConfig", + "proConfig": [ + {"isApply": false, "useLocal": true, "localPath": ":plugin:api-gradle-plugin"}, + {"isApply": false, "useLocal": true, "localPath": ":plugin:bus-gradle-plugin"}, + {"isApply": true, "useLocal": true, "localPath": ":feature:mock"}, + {"isApply": true, "useLocal": true, "localPath": ":feature:launcher:app"}, + {"isApply": true, "useLocal": true, "localPath": ":feature:main:app"}, + {"isApply": true, "useLocal": true, "localPath": ":feature:main:pkg"}, + {"isApply": true, "useLocal": true, "localPath": ":feature:subutil:app"}, + {"isApply": true, "useLocal": true, "localPath": ":feature:subutil:pkg"}, + {"isApply": true, "useLocal": true, "localPath": ":feature:subutil:export"}, + {"isApply": true, "useLocal": true, "localPath": ":feature:utilcode:app"}, + {"isApply": true, "useLocal": true, "localPath": ":feature:utilcode:pkg"}, + {"isApply": true, "useLocal": true, "localPath": ":feature:utilcode:export"}, + {"isApply": true, "useLocal": true, "localPath": ":lib:base"}, + {"isApply": true, "useLocal": true, "localPath": ":lib:common"}, + {"isApply": true, "useLocal": true, "localPath": ":lib:subutil"}, + {"isApply": true, "useLocal": true, "localPath": ":lib:utilcode", "remotePath": "com.blankj:utilcode:1.25.10-alpha5"}, + {"isApply": true, "useLocal": true, "localPath": ":lib:utildebug", "remotePath": "com.blankj:utildebug:1.25.10-alpha5"}, + {"isApply": true, "useLocal": true, "localPath": ":lib:utildebug-no-op", "remotePath": "com.blankj:utildebug-no-op:1.25.10-alpha5"} + ] +} diff --git a/feature/launcher/app/build.gradle b/feature/launcher/app/build.gradle index 9320e2df30..408db62a67 100644 --- a/feature/launcher/app/build.gradle +++ b/feature/launcher/app/build.gradle @@ -1,5 +1,5 @@ apply plugin: 'kotlin-kapt' dependencies { - kapt Config.depConfig.eventbus.processor.dep + kapt Config.depConfig.eventbus_processor.dep } \ No newline at end of file diff --git a/feature/launcher/app/src/main/AndroidManifest.xml b/feature/launcher/app/src/main/AndroidManifest.xml index b683051e68..19f6313965 100644 --- a/feature/launcher/app/src/main/AndroidManifest.xml +++ b/feature/launcher/app/src/main/AndroidManifest.xml @@ -13,6 +13,7 @@ android:name="com.blankj.main.pkg.MainActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="user" + android:theme="@style/SplashTheme" android:windowSoftInputMode="stateHidden"> diff --git a/feature/main/app/src/main/AndroidManifest.xml b/feature/main/app/src/main/AndroidManifest.xml index 5ccc1079c0..bb8c3398d4 100644 --- a/feature/main/app/src/main/AndroidManifest.xml +++ b/feature/main/app/src/main/AndroidManifest.xml @@ -13,6 +13,7 @@ android:name="com.blankj.main.pkg.MainActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="user" + android:theme="@style/SplashTheme" android:windowSoftInputMode="stateHidden"> diff --git a/feature/main/pkg/src/main/AndroidManifest.xml b/feature/main/pkg/src/main/AndroidManifest.xml index 5edb00cecb..1cfdba8f69 100644 --- a/feature/main/pkg/src/main/AndroidManifest.xml +++ b/feature/main/pkg/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ android:name=".MainActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="user" + android:theme="@style/SplashTheme" android:windowSoftInputMode="stateHidden" /> diff --git a/feature/main/pkg/src/main/java/com/blankj/main/pkg/MainActivity.kt b/feature/main/pkg/src/main/java/com/blankj/main/pkg/MainActivity.kt index 815e861424..228abbf0a5 100644 --- a/feature/main/pkg/src/main/java/com/blankj/main/pkg/MainActivity.kt +++ b/feature/main/pkg/src/main/java/com/blankj/main/pkg/MainActivity.kt @@ -38,6 +38,11 @@ class MainActivity : CommonActivity() { return R.layout.activity_main } + override fun onCreate(savedInstanceState: Bundle?) { + window.setBackgroundDrawable(null) + super.onCreate(savedInstanceState) + } + override fun initView(savedInstanceState: Bundle?, contentView: View?) { super.initView(savedInstanceState, contentView) setCommonItems(mainRv, CollectionUtils.newArrayList>( diff --git a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt index 31287e4ba8..648dcb295d 100644 --- a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt +++ b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt @@ -40,7 +40,7 @@ class PinyinActivity : CommonActivity() { for (i in 0 until size) { val surname = surnames[i].toString() sb.append(String.format( - "\n%s 正确: %-6s 错误: %-6s", + "\n%s 正确: %-8s 错误: %-8s", surname, PinyinUtils.getSurnamePinyin(surname), PinyinUtils.ccs2Pinyin(surname) diff --git a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt index 45e67a4a0d..bb891aeb06 100644 --- a/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt +++ b/feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt @@ -1,10 +1,14 @@ package com.blankj.subutil.pkg.helper -import android.support.v7.app.AlertDialog +import android.support.v4.app.FragmentActivity +import android.util.Pair +import android.view.View +import com.blankj.common.dialog.CommonDialogContent import com.blankj.subutil.pkg.R import com.blankj.utilcode.util.ActivityUtils import com.blankj.utilcode.util.PermissionUtils import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldRequest +import com.blankj.utilcode.util.StringUtils /** * ``` @@ -17,29 +21,29 @@ import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldReques object DialogHelper { fun showRationaleDialog(shouldRequest: ShouldRequest) { - val topActivity = ActivityUtils.getTopActivity() - if (topActivity == null || topActivity.isFinishing) return - AlertDialog.Builder(topActivity) - .setTitle(android.R.string.dialog_alert_title) - .setMessage(R.string.permission_rationale_message) - .setPositiveButton(android.R.string.ok) { dialog, which -> shouldRequest.again(true) } - .setNegativeButton(android.R.string.cancel) { dialog, which -> shouldRequest.again(false) } - .setCancelable(false) - .create() + val topActivity = ActivityUtils.getTopActivity() ?: return + CommonDialogContent().init(topActivity as FragmentActivity?, + StringUtils.getString(android.R.string.dialog_alert_title), + StringUtils.getString(R.string.permission_rationale_message), + Pair(StringUtils.getString(android.R.string.ok), View.OnClickListener { + shouldRequest.again(true) + }), + Pair(StringUtils.getString(android.R.string.cancel), View.OnClickListener { + shouldRequest.again(false) + })) .show() - } fun showOpenAppSettingDialog() { - val topActivity = ActivityUtils.getTopActivity() - if (topActivity == null || topActivity.isFinishing) return - AlertDialog.Builder(topActivity) - .setTitle(android.R.string.dialog_alert_title) - .setMessage(R.string.permission_denied_forever_message) - .setPositiveButton(android.R.string.ok) { dialog, which -> PermissionUtils.launchAppDetailsSettings() } - .setNegativeButton(android.R.string.cancel) { dialog, which -> } - .setCancelable(false) - .create() + val topActivity = ActivityUtils.getTopActivity() ?: return + CommonDialogContent().init(topActivity as FragmentActivity?, + StringUtils.getString(android.R.string.dialog_alert_title), + StringUtils.getString(R.string.permission_denied_forever_message), + Pair(StringUtils.getString(android.R.string.ok), View.OnClickListener { + PermissionUtils.launchAppDetailsSettings() + }), + Pair(StringUtils.getString(android.R.string.cancel), View.OnClickListener { + })) .show() } } diff --git a/feature/utilcode/pkg/src/main/AndroidManifest.xml b/feature/utilcode/pkg/src/main/AndroidManifest.xml index a96d44628c..24d52d5fb8 100644 --- a/feature/utilcode/pkg/src/main/AndroidManifest.xml +++ b/feature/utilcode/pkg/src/main/AndroidManifest.xml @@ -83,39 +83,39 @@ android:configChanges="orientation|keyboardHidden|screenSize" android:launchMode="singleTop" /> return ActivityOptionsCompat.makeCustomAnimation(this, - R.anim.slide_in_right_1000, - R.anim.slide_out_left_1000) + R.anim.slide_right_in_1000, + R.anim.slide_left_out_1000) .toBundle() 1 -> return ActivityOptionsCompat.makeScaleUpAnimation(activityItem.element, activityItem.element.width / 2, @@ -185,12 +181,10 @@ class ActivityItem : CommonItem { lateinit var element: ImageView; - constructor() : super(R.layout.activity_activity_item_iv) + constructor() : super(R.layout.activity_item_shared_element_activity) override fun bind(holder: ItemViewHolder, position: Int) { super.bind(holder, position) - if (isViewType(R.layout.activity_activity_item_iv)) { - element = holder.findViewById(R.id.activityViewSharedElement) - } + element = holder.findViewById(R.id.activityViewSharedElement) } } \ No newline at end of file diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt index 7d5812371a..9c972d6234 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt @@ -8,7 +8,7 @@ import android.view.View import com.blankj.common.activity.CommonActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.ColorUtils -import kotlinx.android.synthetic.main.activity_activity_sub.* +import kotlinx.android.synthetic.main.activity_sub_activity.* /** @@ -22,7 +22,7 @@ import kotlinx.android.synthetic.main.activity_activity_sub.* class SubActivityActivity : CommonActivity() { override fun bindLayout(): Int { - return R.layout.activity_activity_sub + return R.layout.activity_sub_activity } override fun bindTitleRes(): Int { @@ -30,6 +30,7 @@ class SubActivityActivity : CommonActivity() { } override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) contentView?.setBackgroundColor(ColorUtils.getRandomColor(false)) activityViewSharedElement.setOnClickListener { val result = Intent() diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt index 3e1a92a743..007724289c 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt @@ -20,10 +20,11 @@ class AdaptCloseActivity : CommonActivity() { } override fun bindLayout(): Int { - return R.layout.activity_adaptscreen_close + return R.layout.adaptscreen_close_activity } override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt index 7e885f1c46..6f312e4cd9 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt @@ -20,10 +20,11 @@ class AdaptHeightActivity : CommonActivity() { } override fun bindLayout(): Int { - return R.layout.activity_adaptscreen_height + return R.layout.adaptscreen_height_activity } override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt index 070f2a772c..6ccd3f45a0 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt @@ -10,7 +10,7 @@ import android.view.WindowManager import com.blankj.common.activity.CommonActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.AdaptScreenUtils -import kotlinx.android.synthetic.main.activity_adaptscreen_width.* +import kotlinx.android.synthetic.main.adaptscreen_width_activity.* class AdaptWidthActivity : CommonActivity() { @@ -22,10 +22,11 @@ class AdaptWidthActivity : CommonActivity() { } override fun bindLayout(): Int { - return R.layout.activity_adaptscreen_width + return R.layout.adaptscreen_width_activity } override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) adaptScreenWidthWebView.setBackgroundColor(Color.parseColor("#f0d26d")) } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt index 1a188dc4fc..26801106a0 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt @@ -3,12 +3,14 @@ package com.blankj.utilcode.pkg.feature.bar import android.content.Context import android.content.Intent import com.blankj.common.activity.CommonActivity -import com.blankj.common.activity.CommonActivityItemsView -import com.blankj.common.activity.CommonActivityTitleView import com.blankj.common.item.CommonItem import com.blankj.common.item.CommonItemClick import com.blankj.common.item.CommonItemTitle import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.pkg.feature.bar.nav.BarNavActivity +import com.blankj.utilcode.pkg.feature.bar.notification.BarNotificationActivity +import com.blankj.utilcode.pkg.feature.bar.status.* +import com.blankj.utilcode.pkg.feature.bar.status.fragment.BarStatusFragmentActivity import com.blankj.utilcode.util.CollectionUtils /** @@ -39,22 +41,22 @@ class BarActivity : CommonActivity() { BarStatusActivity.start(this) }, CommonItemClick(R.string.bar_status_set_color, true) { - BarStatusColorActivity.start(this) + BarStatusActivityColor.start(this) }, CommonItemClick(R.string.bar_status_set_alpha, true) { - BarStatusAlphaActivity.start(this) + BarStatusActivityAlpha.start(this) }, CommonItemClick(R.string.bar_status_set_image_view, true) { - BarStatusImageViewActivity.start(this) + BarStatusActivityImageView.start(this) }, CommonItemClick(R.string.bar_status_set_custom, true) { - BarStatusCustomActivity.start(this) + BarStatusActivityCustom.start(this) }, CommonItemClick(R.string.bar_status_set_fragment, true) { BarStatusFragmentActivity.start(this) }, CommonItemClick(R.string.bar_status_set_drawer, true) { - BarStatusDrawerActivity.start(this) + BarStatusActivityDrawer.start(this) }, CommonItemTitle(R.string.bar_about_notification_bar, true), CommonItemClick(R.string.bar_notification_about, true) { diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt deleted file mode 100644 index a4df4901cf..0000000000 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.blankj.utilcode.pkg.feature.bar - -import android.graphics.Color -import android.os.Bundle -import android.view.View -import android.widget.SeekBar -import com.blankj.base.BaseLazyFragment -import com.blankj.utilcode.pkg.R -import com.blankj.utilcode.util.BarUtils -import com.blankj.utilcode.util.LogUtils -import kotlinx.android.synthetic.main.fragment_bar_status_alpha.* - -/** - * ``` - * author: Blankj - * blog : http://blankj.com - * time : 2017/07/01 - * desc : demo about BarUtils - * ``` - */ -class BarStatusAlphaFragment : BaseLazyFragment() { - - companion object { - fun newInstance(): BarStatusAlphaFragment { - return BarStatusAlphaFragment() - } - } - - private var mAlpha: Int = 112 - - private val translucentListener = object : SeekBar.OnSeekBarChangeListener { - override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { - mAlpha = progress - barStatusAlphaFragmentAboutTv.text = mAlpha.toString() - updateFakeStatusBar() - } - - override fun onStartTrackingTouch(seekBar: SeekBar) {} - - override fun onStopTrackingTouch(seekBar: SeekBar) {} - } - - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.fragment_bar_status_alpha - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener(barStatusAlphaFragmentSetTransparentBtn) - barStatusAlphaFragmentChangeAlphaSb.setOnSeekBarChangeListener(translucentListener) - barStatusAlphaFragmentAboutTv.text = mAlpha.toString() - - updateFakeStatusBar() - } - - override fun doLazyBusiness() { - LogUtils.d("doLazyBusiness() called") - } - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.barStatusAlphaSetTransparentBtn -> barStatusAlphaFragmentChangeAlphaSb.progress = 0 - } - } - - fun updateFakeStatusBar() { - BarUtils.setStatusBarColor(barStatusAlphaFragmentFakeStatusBar, Color.argb(mAlpha, 0, 0, 0)) - } -} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt deleted file mode 100644 index 756109421c..0000000000 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.blankj.utilcode.pkg.feature.bar - -import android.os.Bundle -import android.view.View -import com.blankj.base.BaseLazyFragment -import com.blankj.utilcode.pkg.R -import com.blankj.utilcode.util.BarUtils -import com.blankj.utilcode.util.ColorUtils -import com.blankj.utilcode.util.LogUtils -import kotlinx.android.synthetic.main.fragment_bar_status_color.* - -/** - * ``` - * author: Blankj - * blog : http://blankj.com - * time : 2017/07/01 - * desc : demo about BarUtils - * ``` - */ -class BarStatusColorFragment : BaseLazyFragment() { - - companion object { - fun newInstance(): BarStatusColorFragment { - return BarStatusColorFragment() - } - } - - private var mColor: Int = ColorUtils.getColor(R.color.colorPrimary) - - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.fragment_bar_status_color - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener(barStatusColorFragmentRandomColorBtn) - updateFakeStatusBar() - } - - override fun doLazyBusiness() { - LogUtils.d("doLazyBusiness() called") - } - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.barStatusColorFragmentRandomColorBtn -> { - mColor = ColorUtils.getRandomColor() - updateFakeStatusBar() - } - } - } - - private fun updateFakeStatusBar() { - BarUtils.setStatusBarColor(barStatusColorFragmentFakeStatusBar, mColor) - barStatusColorFragmentAboutColorTv.text = String.format(ColorUtils.int2ArgbString(mColor)) - } -} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt deleted file mode 100644 index 4a3d38d099..0000000000 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.blankj.utilcode.pkg.feature.bar - -import android.os.Bundle -import android.view.View -import com.blankj.base.BaseLazyFragment - -import com.blankj.utilcode.pkg.R -import com.blankj.utilcode.util.BarUtils -import com.blankj.utilcode.util.LogUtils -import kotlinx.android.synthetic.main.fragment_bar_status_custom.* - -/** - * ``` - * author: Blankj - * blog : http://blankj.com - * time : 2017/07/01 - * desc : demo about BarUtils - * ``` - */ -class BarStatusCustomFragment : BaseLazyFragment() { - - companion object { - fun newInstance(): BarStatusCustomFragment { - return BarStatusCustomFragment() - } - } - - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.fragment_bar_status_custom - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - BarUtils.setStatusBarCustom(barStatusCustomFragmentFakeStatusBar) - } - - override fun doLazyBusiness() { - LogUtils.d("doLazyBusiness() called") - } - - override fun onDebouncingClick(view: View) {} -} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt deleted file mode 100644 index 8f2fb17bb8..0000000000 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt +++ /dev/null @@ -1,122 +0,0 @@ -package com.blankj.utilcode.pkg.feature.bar - -import android.content.Context -import android.content.Intent -import android.graphics.Color -import android.os.Bundle -import android.view.View -import android.widget.CompoundButton -import android.widget.SeekBar -import com.blankj.common.activity.CommonActivity -import com.blankj.common.activity.CommonActivityDrawerView -import com.blankj.utilcode.pkg.R -import com.blankj.utilcode.util.BarUtils -import com.blankj.utilcode.util.ColorUtils -import kotlinx.android.synthetic.main.activity_bar_status_drawer.* - - -/** - * ``` - * author: Blankj - * blog : http://blankj.com - * time : 2017/05/27 - * desc : demo about BarUtils - * ``` - */ -class BarStatusDrawerActivity : CommonActivity() { - - companion object { - fun start(context: Context) { - val starter = Intent(context, BarStatusDrawerActivity::class.java) - context.startActivity(starter) - } - } - - override fun bindDrawer(): Boolean { - return true - } - - private var mColor: Int = 0 - private var mAlpha: Int = 0 - - private val mColorListener = object : SeekBar.OnSeekBarChangeListener { - override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { - mAlpha = progress - updateStatusBar() - } - - override fun onStartTrackingTouch(seekBar: SeekBar) {} - - override fun onStopTrackingTouch(seekBar: SeekBar) {} - } - - private var mAlphaCheckedChangeListener: CompoundButton.OnCheckedChangeListener = CompoundButton.OnCheckedChangeListener { _, isChecked -> - if (isChecked) { - barStatusDrawerChangeAlphaSb.visibility = View.VISIBLE - barStatusDrawerRandomColorBtn.visibility = View.GONE - barStatusDrawerSetTransparentBtn.visibility = View.VISIBLE - - drawerView.mBaseDrawerContainerView.setBackgroundResource(R.drawable.image_lena) - } else { - barStatusDrawerChangeAlphaSb.visibility = View.GONE - barStatusDrawerRandomColorBtn.visibility = View.VISIBLE - barStatusDrawerSetTransparentBtn.visibility = View.GONE - - drawerView.mBaseDrawerContainerView.setBackgroundColor(Color.WHITE) - } - updateStatusBar() - } - - private var mFrontCheckedChangeListener: CompoundButton.OnCheckedChangeListener = CompoundButton.OnCheckedChangeListener { _, _ -> updateStatusBar() } - - override fun isSwipeBack(): Boolean { - return false - } - - override fun initData(bundle: Bundle?) { - mColor = ColorUtils.getColor(R.color.colorPrimary) - mAlpha = 112 - } - - override fun bindLayout(): Int { - return R.layout.activity_bar_status_drawer - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - barStatusDrawerAlphaCb.setOnCheckedChangeListener(mAlphaCheckedChangeListener) - barStatusDrawerFrontCb.setOnCheckedChangeListener(mFrontCheckedChangeListener) - barStatusDrawerChangeAlphaSb.setOnSeekBarChangeListener(mColorListener) - applyDebouncingClickListener( - barStatusDrawerRandomColorBtn, - barStatusDrawerSetTransparentBtn - ) - - barStatusDrawerChangeAlphaSb.visibility = View.GONE - barStatusDrawerSetTransparentBtn.visibility = View.GONE - - updateStatusBar() - } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.barStatusDrawerRandomColorBtn -> { - mColor = ColorUtils.getRandomColor() - updateStatusBar() - } - R.id.barStatusDrawerSetTransparentBtn -> barStatusDrawerChangeAlphaSb.progress = 0 - } - } - - private fun updateStatusBar() { - if (barStatusDrawerAlphaCb.isChecked) { - BarUtils.setStatusBarColor4Drawer(drawerView.mBaseDrawerRootLayout, barStatusDrawerFakeStatusBar, Color.argb(mAlpha, 0, 0, 0), barStatusDrawerFrontCb.isChecked) - barStatusDrawerAboutTv.text = mAlpha.toString() - } else { - BarUtils.setStatusBarColor4Drawer(drawerView.mBaseDrawerRootLayout, barStatusDrawerFakeStatusBar, mColor, barStatusDrawerFrontCb.isChecked) - barStatusDrawerAboutTv.text = ColorUtils.int2ArgbString(mColor) - } - BarUtils.addMarginTopEqualStatusBarHeight(barStatusDrawerAlphaCb)// 其实这个只需要调用一次即可 - } -} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt deleted file mode 100644 index 68d71341c0..0000000000 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.blankj.utilcode.pkg.feature.bar - -import android.content.Context -import android.content.Intent -import android.graphics.Color -import android.os.Bundle -import android.view.View -import android.widget.SeekBar -import com.blankj.common.activity.CommonActivity -import com.blankj.utilcode.pkg.R -import com.blankj.utilcode.util.BarUtils -import kotlinx.android.synthetic.main.activity_bar_status_image_view.* - -/** - * ``` - * author: Blankj - * blog : http://blankj.com - * time : 2017/05/27 - * desc : demo about BarUtils - * ``` - */ -class BarStatusImageViewActivity : CommonActivity() { - - companion object { - fun start(context: Context) { - val starter = Intent(context, BarStatusImageViewActivity::class.java) - context.startActivity(starter) - } - } - - private var mAlpha: Int = 0 - - private val translucentListener = object : SeekBar.OnSeekBarChangeListener { - override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { - mAlpha = progress - barStatusImageViewAboutTv.text = mAlpha.toString() - updateStatusBar() - } - - override fun onStartTrackingTouch(seekBar: SeekBar) {} - - override fun onStopTrackingTouch(seekBar: SeekBar) {} - } - - override fun isSwipeBack(): Boolean { - return true - } - - override fun initData(bundle: Bundle?) { - mAlpha = 112 - } - - override fun bindLayout(): Int { - return R.layout.activity_bar_status_image_view - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener(barStatusImageViewSetTransparentBtn) - barStatusImageViewChangeAlphaSb.setOnSeekBarChangeListener(translucentListener) - barStatusImageViewAboutTv.text = mAlpha.toString() - - updateStatusBar() - } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.barStatusImageViewSetTransparentBtn -> barStatusImageViewChangeAlphaSb.progress = 0 - } - } - - private fun updateStatusBar() { - BarUtils.setStatusBarColor(this, Color.argb(mAlpha, 0, 0, 0), true) - } -} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt deleted file mode 100644 index 95c0f75268..0000000000 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt +++ /dev/null @@ -1,72 +0,0 @@ -package com.blankj.utilcode.pkg.feature.bar - -import android.graphics.Color -import android.os.Bundle -import android.view.View -import android.widget.SeekBar -import com.blankj.base.BaseLazyFragment -import com.blankj.utilcode.pkg.R -import com.blankj.utilcode.util.BarUtils -import com.blankj.utilcode.util.LogUtils -import kotlinx.android.synthetic.main.fragment_bar_status_image_view.* - -/** - * ``` - * author: Blankj - * blog : http://blankj.com - * time : 2017/07/01 - * desc : demo about BarUtils - * ``` - */ -class BarStatusImageViewFragment : BaseLazyFragment() { - - companion object { - fun newInstance(): BarStatusImageViewFragment { - return BarStatusImageViewFragment() - } - } - - private var mAlpha: Int = 0 - - private val translucentListener = object : SeekBar.OnSeekBarChangeListener { - override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { - mAlpha = progress - barStatusImageViewFragmentAboutTv.text = mAlpha.toString() - updateFakeStatusBar() - } - - override fun onStartTrackingTouch(seekBar: SeekBar) {} - - override fun onStopTrackingTouch(seekBar: SeekBar) {} - } - - override fun initData(bundle: Bundle?) { - mAlpha = 112 - } - - override fun bindLayout(): Int { - return R.layout.fragment_bar_status_image_view - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener(barStatusImageViewFragmentSetTransparentBtn) - barStatusImageViewFragmentChangeAlphaSb.setOnSeekBarChangeListener(translucentListener) - barStatusImageViewFragmentAboutTv.text = mAlpha.toString() - - updateFakeStatusBar() - } - - override fun doLazyBusiness() { - LogUtils.d("doLazyBusiness() called") - } - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.barStatusImageViewSetTransparentBtn -> barStatusImageViewFragmentChangeAlphaSb.progress = 0 - } - } - - fun updateFakeStatusBar() { - BarUtils.setStatusBarColor(barStatusImageViewFragmentFakeStatusBar, Color.argb(mAlpha, 0, 0, 0)) - } -} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/nav/BarNavActivity.kt similarity index 98% rename from feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt rename to feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/nav/BarNavActivity.kt index baf68b9e7c..2950c2bf5d 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/nav/BarNavActivity.kt @@ -1,4 +1,4 @@ -package com.blankj.utilcode.pkg.feature.bar +package com.blankj.utilcode.pkg.feature.bar.nav import android.content.Context import android.content.Intent diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/notification/BarNotificationActivity.kt similarity index 92% rename from feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt rename to feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/notification/BarNotificationActivity.kt index 86cca16aff..5504912ee6 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/notification/BarNotificationActivity.kt @@ -1,10 +1,9 @@ -package com.blankj.utilcode.pkg.feature.bar +package com.blankj.utilcode.pkg.feature.bar.notification import android.content.Context import android.content.Intent import android.os.Handler import com.blankj.common.activity.CommonActivity -import com.blankj.common.activity.CommonActivityTitleView import com.blankj.common.item.CommonItem import com.blankj.common.item.CommonItemClick import com.blankj.utilcode.pkg.R diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivity.kt similarity index 97% rename from feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt rename to feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivity.kt index 0570fb33c8..5983365f83 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivity.kt @@ -1,4 +1,4 @@ -package com.blankj.utilcode.pkg.feature.bar +package com.blankj.utilcode.pkg.feature.bar.status import android.content.Context import android.content.Intent diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityAlpha.kt similarity index 85% rename from feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt rename to feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityAlpha.kt index d9b3fa0a9b..b7464443bd 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityAlpha.kt @@ -1,4 +1,4 @@ -package com.blankj.utilcode.pkg.feature.bar +package com.blankj.utilcode.pkg.feature.bar.status import android.content.Context import android.content.Intent @@ -22,11 +22,11 @@ import com.blankj.utilcode.util.ColorUtils * desc : demo about BarUtils * ``` */ -class BarStatusAlphaActivity : CommonActivity() { +class BarStatusActivityAlpha : CommonActivity() { companion object { fun start(context: Context) { - val starter = Intent(context, BarStatusAlphaActivity::class.java) + val starter = Intent(context, BarStatusActivityAlpha::class.java) context.startActivity(starter) } } @@ -34,16 +34,16 @@ class BarStatusAlphaActivity : CommonActivity() { private var mAlpha: Int = 112 override fun bindLayout(): Int { - return R.layout.activity_bar_status_alpha1 + return R.layout.bar_status_alpha_activity } override fun initView(savedInstanceState: Bundle?, contentView: View?) { super.initView(savedInstanceState, contentView) - setCommonItems(findViewById(R.id.commonItemRv), bindItems()) + setCommonItems(findViewById(R.id.commonItemRv), getItems()) updateStatusBar() } - override fun bindItems(): List> { + private fun getItems(): List> { return CollectionUtils.newArrayList>( CommonItemSeekBar("Status Bar Alpha", 255, mAlpha, object : SeekBar.OnSeekBarChangeListener { override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityColor.kt similarity index 90% rename from feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt rename to feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityColor.kt index 73e7a34363..74b6368e1b 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityColor.kt @@ -1,4 +1,4 @@ -package com.blankj.utilcode.pkg.feature.bar +package com.blankj.utilcode.pkg.feature.bar.status import android.content.Context import android.content.Intent @@ -20,11 +20,11 @@ import com.blankj.utilcode.util.ColorUtils * desc : demo about BarUtils * ``` */ -class BarStatusColorActivity : CommonActivity() { +class BarStatusActivityColor : CommonActivity() { companion object { fun start(context: Context) { - val starter = Intent(context, BarStatusColorActivity::class.java) + val starter = Intent(context, BarStatusActivityColor::class.java) context.startActivity(starter) } } @@ -34,8 +34,8 @@ class BarStatusColorActivity : CommonActivity() { override fun bindItems(): List> { return CollectionUtils.newArrayList>( CommonItemClick(R.string.bar_status_random_color, ColorUtils.int2ArgbString(mColor)).setOnClickUpdateContentListener { - updateStatusBar() mColor = ColorUtils.getRandomColor() + updateStatusBar() return@setOnClickUpdateContentListener ColorUtils.int2ArgbString(mColor) } ) diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityCustom.kt similarity index 61% rename from feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt rename to feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityCustom.kt index 72712239f3..0cea718cf9 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityCustom.kt @@ -1,8 +1,10 @@ -package com.blankj.utilcode.pkg.feature.bar +package com.blankj.utilcode.pkg.feature.bar.status import android.content.Context import android.content.Intent import android.graphics.Color +import android.os.Bundle +import android.view.View import com.blankj.common.activity.CommonActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils @@ -16,16 +18,17 @@ import com.blankj.utilcode.util.BarUtils * desc : demo about BarUtils * ``` */ -class BarStatusCustomActivity : CommonActivity() { +class BarStatusActivityCustom : CommonActivity() { companion object { fun start(context: Context) { - val starter = Intent(context, BarStatusCustomActivity::class.java) + val starter = Intent(context, BarStatusActivityCustom::class.java) context.startActivity(starter) } } - override fun doBusiness() { + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) BarUtils.setStatusBarColor(this, Color.TRANSPARENT).setBackgroundResource(R.drawable.bar_status_custom) } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityDrawer.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityDrawer.kt new file mode 100644 index 0000000000..2ddbc3c13f --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityDrawer.kt @@ -0,0 +1,111 @@ +package com.blankj.utilcode.pkg.feature.bar.status + +import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import android.view.View +import android.widget.SeekBar +import com.blankj.common.activity.CommonActivity +import com.blankj.common.item.CommonItem +import com.blankj.common.item.CommonItemClick +import com.blankj.common.item.CommonItemSeekBar +import com.blankj.common.item.CommonItemSwitch +import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.BarUtils +import com.blankj.utilcode.util.CollectionUtils +import com.blankj.utilcode.util.ColorUtils +import com.blankj.utilcode.util.Utils +import kotlinx.android.synthetic.main.bar_status_drawer_activity.* + + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2017/05/27 + * desc : demo about BarUtils + * ``` + */ +class BarStatusActivityDrawer : CommonActivity() { + + companion object { + fun start(context: Context) { + val starter = Intent(context, BarStatusActivityDrawer::class.java) + context.startActivity(starter) + } + } + + private var mColor: Int = ColorUtils.getColor(R.color.colorPrimary) + private var mAlpha: Int = 112 + + private var mAlphaStatus: Boolean = false + private var mFrontStatus: Boolean = false + + override fun isSwipeBack(): Boolean { + return false + } + + override fun bindDrawer(): Boolean { + return true + } + + override fun bindLayout(): Int { + return R.layout.bar_status_drawer_activity + } + + private fun getItems(): MutableList> { + val randomColorItem = CommonItemClick(R.string.bar_status_random_color, ColorUtils.int2ArgbString(mColor)).setOnClickUpdateContentListener { + mColor = ColorUtils.getRandomColor() + updateStatusBar() + return@setOnClickUpdateContentListener ColorUtils.int2ArgbString(mColor) + } + + val alphaItem: CommonItem<*> = CommonItemSeekBar("Status Bar Alpha", 255, mAlpha, object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + mAlpha = progress + updateStatusBar() + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) {} + + override fun onStopTrackingTouch(seekBar: SeekBar?) {} + }) + + return CollectionUtils.newArrayList( + CommonItemSwitch(R.string.bar_status_title_alpha, Utils.Func1 { + updateStatusBar() + return@Func1 mAlphaStatus + }, Utils.Func1 { + mAlphaStatus = it + if (mAlphaStatus) { + barStatusDrawerRootLl.setBackgroundResource(R.drawable.image_lena) + commonItemAdapter.replaceItem(2, alphaItem, true) + } else { + barStatusDrawerRootLl.setBackgroundColor(Color.TRANSPARENT) + commonItemAdapter.replaceItem(2, randomColorItem, true) + } + }), + CommonItemSwitch(R.string.bar_status_is_front, Utils.Func1 { + return@Func1 mFrontStatus + }, Utils.Func1 { + mFrontStatus = it + updateStatusBar() + }), + randomColorItem + ) + } + + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) + setCommonItems(findViewById(R.id.commonItemRv), getItems()) + } + + private fun updateStatusBar() { + if (mAlphaStatus) { + BarUtils.setStatusBarColor4Drawer(drawerView.mBaseDrawerRootLayout, barStatusDrawerFakeStatusBar, Color.argb(mAlpha, 0, 0, 0), mFrontStatus) + } else { + BarUtils.setStatusBarColor4Drawer(drawerView.mBaseDrawerRootLayout, barStatusDrawerFakeStatusBar, mColor, mFrontStatus) + } + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityImageView.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityImageView.kt new file mode 100644 index 0000000000..533a40d7f5 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/BarStatusActivityImageView.kt @@ -0,0 +1,63 @@ +package com.blankj.utilcode.pkg.feature.bar.status + +import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import android.view.View +import android.widget.SeekBar +import com.blankj.common.activity.CommonActivity +import com.blankj.common.item.CommonItem +import com.blankj.common.item.CommonItemSeekBar +import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.BarUtils +import com.blankj.utilcode.util.CollectionUtils + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2017/05/27 + * desc : demo about BarUtils + * ``` + */ +class BarStatusActivityImageView : CommonActivity() { + + companion object { + fun start(context: Context) { + val starter = Intent(context, BarStatusActivityImageView::class.java) + context.startActivity(starter) + } + } + + private var mAlpha: Int = 112 + + override fun bindLayout(): Int { + return R.layout.bar_status_image_view_activity + } + + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) + setCommonItems(findViewById(R.id.commonItemRv), getItems()) + updateStatusBar() + } + + private fun getItems(): List> { + return CollectionUtils.newArrayList>( + CommonItemSeekBar("Status Bar Alpha", 255, mAlpha, object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + mAlpha = progress + updateStatusBar() + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) {} + + override fun onStopTrackingTouch(seekBar: SeekBar?) {} + }) + ) + } + + private fun updateStatusBar() { + BarUtils.setStatusBarColor(this, Color.argb(mAlpha, 0, 0, 0), true) + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentActivity.kt similarity index 82% rename from feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt rename to feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentActivity.kt index 3ad2ed21f1..d504987c93 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentActivity.kt @@ -1,4 +1,4 @@ -package com.blankj.utilcode.pkg.feature.bar +package com.blankj.utilcode.pkg.feature.bar.status.fragment import android.content.Context import android.content.Intent @@ -10,7 +10,7 @@ import android.support.v4.view.ViewPager import android.view.View import com.blankj.common.activity.CommonActivity import com.blankj.utilcode.pkg.R -import kotlinx.android.synthetic.main.activity_bar_status_fragment.* +import kotlinx.android.synthetic.main.bar_status_fragment_activity.* import java.util.* /** @@ -65,19 +65,18 @@ class BarStatusFragmentActivity : CommonActivity() { return false } - override fun initData(bundle: Bundle?) {} - override fun bindLayout(): Int { - return R.layout.activity_bar_status_fragment + return R.layout.bar_status_fragment_activity } override fun initView(savedInstanceState: Bundle?, contentView: View?) { - mFragmentList.add(BarStatusColorFragment.newInstance()) - mFragmentList.add(BarStatusAlphaFragment.newInstance()) - mFragmentList.add(BarStatusImageViewFragment.newInstance()) - mFragmentList.add(BarStatusCustomFragment.newInstance()) + super.initView(savedInstanceState, contentView) + mFragmentList.add(BarStatusFragmentColor.newInstance()) + mFragmentList.add(BarStatusFragmentAlpha.newInstance()) + mFragmentList.add(BarStatusFragmentImageView.newInstance()) + mFragmentList.add(BarStatusFragmentCustom.newInstance()) - barStatusFragmentVp.offscreenPageLimit = 3 + barStatusFragmentVp.offscreenPageLimit = mFragmentList.size - 1 barStatusFragmentVp.adapter = object : FragmentPagerAdapter(supportFragmentManager) { override fun getItem(position: Int): Fragment { return mFragmentList[position] @@ -87,7 +86,6 @@ class BarStatusFragmentActivity : CommonActivity() { return mFragmentList.size } } - barStatusFragmentVp.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {} @@ -100,8 +98,4 @@ class BarStatusFragmentActivity : CommonActivity() { barStatusFragmentNav.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) } - - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) {} } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentAlpha.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentAlpha.kt new file mode 100644 index 0000000000..15797fc505 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentAlpha.kt @@ -0,0 +1,68 @@ +package com.blankj.utilcode.pkg.feature.bar.status.fragment + +import android.graphics.Color +import android.os.Bundle +import android.view.View +import android.widget.SeekBar +import com.blankj.common.fragment.CommonFragment +import com.blankj.common.item.CommonItem +import com.blankj.common.item.CommonItemSeekBar +import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.BarUtils +import com.blankj.utilcode.util.CollectionUtils +import com.blankj.utilcode.util.ColorUtils +import kotlinx.android.synthetic.main.bar_status_alpha_fragment.* + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2017/07/01 + * desc : demo about BarUtils + * ``` + */ +class BarStatusFragmentAlpha : CommonFragment() { + + companion object { + fun newInstance(): BarStatusFragmentAlpha { + return BarStatusFragmentAlpha() + } + } + + override fun isLazy(): Boolean { + return true + } + + private var mAlpha: Int = 112 + + override fun bindLayout(): Int { + return R.layout.bar_status_alpha_fragment + } + + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) + setCommonItems(findViewById(R.id.commonItemRv), getItems()) + updateFakeStatusBar() + } + + private fun getItems(): List> { + return CollectionUtils.newArrayList>( + CommonItemSeekBar("Status Bar Alpha", 255, mAlpha, object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + mAlpha = progress + updateFakeStatusBar() + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) {} + + override fun onStopTrackingTouch(seekBar: SeekBar?) {} + }).apply { + backgroundColor = ColorUtils.setAlphaComponent(backgroundColor, 0.5f) + } + ) + } + + fun updateFakeStatusBar() { + BarUtils.setStatusBarColor(barStatusAlphaFragmentFakeStatusBar, Color.argb(mAlpha, 0, 0, 0)) + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentColor.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentColor.kt new file mode 100644 index 0000000000..029523e59d --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentColor.kt @@ -0,0 +1,59 @@ +package com.blankj.utilcode.pkg.feature.bar.status.fragment + +import android.os.Bundle +import android.view.View +import com.blankj.common.fragment.CommonFragment +import com.blankj.common.item.CommonItem +import com.blankj.common.item.CommonItemClick +import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.BarUtils +import com.blankj.utilcode.util.CollectionUtils +import com.blankj.utilcode.util.ColorUtils +import kotlinx.android.synthetic.main.bar_status_color_fragment.* + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2017/07/01 + * desc : demo about BarUtils + * ``` + */ +class BarStatusFragmentColor : CommonFragment() { + + companion object { + fun newInstance(): BarStatusFragmentColor { + return BarStatusFragmentColor() + } + } + + private var mColor: Int = ColorUtils.getColor(R.color.colorPrimary) + + override fun isLazy(): Boolean { + return true + } + + override fun bindLayout(): Int { + return R.layout.bar_status_color_fragment + } + + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) + setCommonItems(findViewById(R.id.commonItemRv), getItems()) + updateFakeStatusBar() + } + + private fun getItems(): List> { + return CollectionUtils.newArrayList>( + CommonItemClick(R.string.bar_status_random_color, ColorUtils.int2ArgbString(mColor)).setOnClickUpdateContentListener { + mColor = ColorUtils.getRandomColor() + updateFakeStatusBar() + return@setOnClickUpdateContentListener ColorUtils.int2ArgbString(mColor) + } + ) + } + + private fun updateFakeStatusBar() { + BarUtils.setStatusBarColor(barStatusColorFragmentFakeStatusBar, mColor) + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentCustom.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentCustom.kt new file mode 100644 index 0000000000..e8dbcd927c --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentCustom.kt @@ -0,0 +1,38 @@ +package com.blankj.utilcode.pkg.feature.bar.status.fragment + +import android.os.Bundle +import android.view.View +import com.blankj.common.fragment.CommonFragment +import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.BarUtils +import kotlinx.android.synthetic.main.bar_status_custom_fragment.* + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2017/07/01 + * desc : demo about BarUtils + * ``` + */ +class BarStatusFragmentCustom : CommonFragment() { + + companion object { + fun newInstance(): BarStatusFragmentCustom { + return BarStatusFragmentCustom() + } + } + + override fun isLazy(): Boolean { + return true + } + + override fun bindLayout(): Int { + return R.layout.bar_status_custom_fragment + } + + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) + BarUtils.setStatusBarCustom(barStatusCustomFragmentFakeStatusBar) + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentImageView.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentImageView.kt new file mode 100644 index 0000000000..54571b6ddd --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/status/fragment/BarStatusFragmentImageView.kt @@ -0,0 +1,65 @@ +package com.blankj.utilcode.pkg.feature.bar.status.fragment + +import android.graphics.Color +import android.os.Bundle +import android.view.View +import android.widget.SeekBar +import com.blankj.common.fragment.CommonFragment +import com.blankj.common.item.CommonItem +import com.blankj.common.item.CommonItemSeekBar +import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.util.BarUtils +import com.blankj.utilcode.util.CollectionUtils +import kotlinx.android.synthetic.main.bar_status_image_view_fragment.* + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2017/07/01 + * desc : demo about BarUtils + * ``` + */ +class BarStatusFragmentImageView : CommonFragment() { + + companion object { + fun newInstance(): BarStatusFragmentImageView { + return BarStatusFragmentImageView() + } + } + + private var mAlpha: Int = 112 + + override fun isLazy(): Boolean { + return true + } + + override fun bindLayout(): Int { + return R.layout.bar_status_image_view_fragment + } + + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) + setCommonItems(findViewById(R.id.commonItemRv), getItems()) + updateFakeStatusBar() + } + + private fun getItems(): List> { + return CollectionUtils.newArrayList>( + CommonItemSeekBar("Status Bar Alpha", 255, mAlpha, object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + mAlpha = progress + updateFakeStatusBar() + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) {} + + override fun onStopTrackingTouch(seekBar: SeekBar?) {} + }) + ) + } + + fun updateFakeStatusBar() { + BarUtils.setStatusBarColor(barStatusImageViewFragmentFakeStatusBar, Color.argb(mAlpha, 0, 0, 0)) + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusCompareActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusCompareActivity.kt index 31c5f86c99..7159b3e5a0 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusCompareActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusCompareActivity.kt @@ -3,7 +3,6 @@ package com.blankj.utilcode.pkg.feature.bus import android.content.Context import android.content.Intent import com.blankj.common.activity.CommonActivity -import com.blankj.common.activity.CommonActivityTitleView import com.blankj.common.item.CommonItem import com.blankj.common.item.CommonItemClick import com.blankj.common.item.CommonItemTitle @@ -14,6 +13,7 @@ import com.blankj.utilcode.util.ThreadUtils import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import java.util.* +import java.util.concurrent.CopyOnWriteArrayList /** @@ -66,8 +66,8 @@ class BusCompareActivity : CommonActivity() { * 注册 10000 个订阅者,共执行 10 次取平均值 */ private fun compareRegister10000Times() { - val eventBusTests = java.util.ArrayList() - val busUtilsTests = java.util.ArrayList() + val eventBusTests = CopyOnWriteArrayList() + val busUtilsTests = CopyOnWriteArrayList() compareWithEventBus("Register 10000 times.", 10, 10000, object : CompareCallback { override fun runEventBus() { @@ -203,9 +203,7 @@ class BusCompareActivity : CommonActivity() { */ private fun compareWithEventBus(name: String, sampleSize: Int, times: Int, callback: CompareCallback, onFinishCallback: OnFinishCallback) { - showLoading { - ThreadUtils.cancel(ThreadUtils.getCpuPool()) - } + showLoading() ThreadUtils.executeByCpu(object : ThreadUtils.Task() { override fun doInBackground(): String { val dur = Array(2) { LongArray(sampleSize) } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt index 4855a01ff2..79d408c2a0 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt @@ -2,21 +2,21 @@ package com.blankj.utilcode.pkg.feature.click import android.content.Context import android.content.Intent -import android.os.Bundle +import android.support.annotation.StringRes import android.view.View -import android.widget.Button +import android.widget.TextView +import com.blankj.base.rv.ItemViewHolder import com.blankj.common.activity.CommonActivity -import com.blankj.common.activity.CommonActivityTitleView +import com.blankj.common.item.CommonItem import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.* -import kotlinx.android.synthetic.main.activity_click.* /** * ``` * author: Blankj * blog : http://blankj.com * time : 2016/09/29 - * desc : demo about CleanUtils + * desc : demo about ClickUtils * ``` */ class ClickActivity : CommonActivity() { @@ -32,55 +32,84 @@ class ClickActivity : CommonActivity() { return R.string.demo_click } - override fun bindLayout(): Int { - return R.layout.activity_click - } + override fun bindItems(): MutableList> { + return CollectionUtils.newArrayList( + ClickItem(R.string.click_view_scale_default, Utils.Func1 { + ClickUtils.applyPressedViewScale(it) + }), + ClickItem(R.string.click_view_scale_half, Utils.Func1 { + ClickUtils.applyPressedViewScale(it, -0.5f) + }), + ClickItem(R.string.click_view_alpha_default, Utils.Func1 { + ClickUtils.applyPressedViewAlpha(it) + }), + ClickItem(R.string.click_bg_alpha_default, Utils.Func1 { + ClickUtils.applyPressedBgAlpha(it) + }), + ClickItem(R.string.click_bg_dark_default, Utils.Func1 { + ClickUtils.applyPressedBgDark(it) + }), + ClickItem(R.string.click_single_debouncing, Utils.Func1 { + ClickUtils.applyPressedBgDark(it) + ClickUtils.applySingleDebouncing(it, 5000) { + SnackbarUtils.with(mContentView) + .setMessage(StringUtils.getString(R.string.click_single_tip)) + .setBgColor(ColorUtils.getRandomColor(false)) + .setDuration(SnackbarUtils.LENGTH_LONG) + .show() + } + }), + ClickItem(R.string.click_global_debouncing, Utils.Func1 { + ClickUtils.applyPressedBgDark(it) + ClickUtils.applySingleDebouncing(it, 5000) { + SnackbarUtils.with(mContentView) + .setMessage(StringUtils.getString(R.string.click_global_tip)) + .setBgColor(ColorUtils.getRandomColor(false)) + .setDuration(SnackbarUtils.LENGTH_LONG) + .show() + } + }), + ClickItem(R.string.click_multi, Utils.Func1 { + ClickUtils.applyPressedBgDark(it) + it.setOnClickListener(object : ClickUtils.OnMultiClickListener(5) { + override fun onTriggerClick(v: View) { + ToastUtils.showShort("onTriggerClick") + } - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener( - clickViewScaleDefaultBtn, - clickViewScaleCustomBtn, - clickViewAlphaDefaultBtn, - clickBgAlphaDefaultBtn, - clickBgDarkDefaultBtn + override fun onBeforeTriggerClick(v: View, count: Int) { + ToastUtils.showShort(count) + } + }) + }) ) + } - ClickUtils.applyPressedViewScale(clickViewScaleDefaultBtn) - ClickUtils.applyPressedViewScale(clickViewScaleCustomBtn, -0.5f) - ClickUtils.applyPressedViewAlpha(clickViewAlphaDefaultBtn) - ClickUtils.applyPressedBgAlpha(clickBgAlphaDefaultBtn) - ClickUtils.applyPressedBgDark(clickBgDarkDefaultBtn) + override fun onDestroy() { + super.onDestroy() + SnackbarUtils.dismiss() + } +} - ClickUtils.applySingleDebouncing(clickSingleDebouncingBtn, 5000) { - SnackbarUtils.with(mContentView) - .setMessage(StringUtils.getString(R.string.click_single_tip)) - .setBgColor(ColorUtils.getRandomColor(false)) - .setDuration(SnackbarUtils.LENGTH_LONG) - .show() - } - ClickUtils.applyGlobalDebouncing(clickGlobalDebouncingBtn, 5000) { - SnackbarUtils.with(mContentView) - .setMessage(StringUtils.getString(R.string.click_global_tip)) +class ClickItem : CommonItem { + + private val mFunc1: Utils.Func1; + private val mTitle: String + + constructor(@StringRes title: Int, func1: Utils.Func1) : super(R.layout.common_item_title_click) { + mFunc1 = func1 + mTitle = StringUtils.getString(title) + } + + override fun bind(holder: ItemViewHolder, position: Int) { + super.bind(holder, position) + holder.findViewById(R.id.commonItemTitleTv).text = mTitle + holder.itemView.setOnClickListener() { + SnackbarUtils.with(it) + .setMessage(mTitle) .setBgColor(ColorUtils.getRandomColor(false)) .setDuration(SnackbarUtils.LENGTH_LONG) .show() } - clickMultiBtn.setOnClickListener(object : ClickUtils.OnMultiClickListener(5) { - override fun onTriggerClick(v: View) { - ToastUtils.showShort("onTriggerClick") - } - - override fun onBeforeTriggerClick(v: View, count: Int) { - ToastUtils.showShort(count) - } - }) - } - - override fun onDebouncingClick(view: View) { - SnackbarUtils.with(mContentView) - .setMessage((view as Button).text) - .setBgColor(ColorUtils.getRandomColor(false)) - .setDuration(SnackbarUtils.LENGTH_LONG) - .show() + mFunc1.call(holder.itemView) } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt index 1dbcfe51ee..c7c2e5fd0a 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt @@ -1,14 +1,17 @@ package com.blankj.utilcode.pkg.feature.fragment import android.os.Bundle +import android.support.v4.app.FragmentManager import android.view.View -import com.blankj.base.BaseLazyFragment +import com.blankj.common.fragment.CommonFragment +import com.blankj.common.item.CommonItem +import com.blankj.common.item.CommonItemClick import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.DialogHelper +import com.blankj.utilcode.util.CollectionUtils import com.blankj.utilcode.util.ColorUtils import com.blankj.utilcode.util.FragmentUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.fragment_child.* /** * ``` @@ -18,7 +21,7 @@ import kotlinx.android.synthetic.main.fragment_child.* * desc : demo about FragmentUtils * ``` */ -class ChildFragment : BaseLazyFragment() { +class ChildFragment : CommonFragment() { companion object { fun newInstance(): ChildFragment { @@ -29,42 +32,50 @@ class ChildFragment : BaseLazyFragment() { } } - override fun initData(bundle: Bundle?) {} + private lateinit var fm: FragmentManager + private val mBgColor = ColorUtils.getRandomColor(false) override fun bindLayout(): Int { return R.layout.fragment_child } override fun initView(savedInstanceState: Bundle?, contentView: View?) { - FragmentUtils.setBackgroundColor(this, ColorUtils.getRandomColor(false)) - applyDebouncingClickListener( - fragmentChildShowStackBtn, - fragmentChildPopBtn, - fragmentChildRemoveBtn - ) + super.initView(savedInstanceState, contentView) + FragmentUtils.setBackgroundColor(this, mBgColor) + fm = fragmentManager!! + setCommonItems(findViewById(R.id.commonItemRv), getItems()) } - override fun doLazyBusiness() {} - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.fragmentChildShowStackBtn -> DialogHelper.showFragmentDialog( - SpanUtils().appendLine("top: " + FragmentUtils.getSimpleName(FragmentUtils.getTop(fragmentManager!!))) - .appendLine("topInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopInStack(fragmentManager!!))) - .appendLine("topShow: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShow(fragmentManager!!))) - .appendLine("topShowInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShowInStack(fragmentManager!!))) - .appendLine() - .appendLine("---all of fragments---") - .appendLine(FragmentUtils.getAllFragments(fragmentManager!!).toString()) - .appendLine("----------------------") - .appendLine() - .appendLine("---stack top---") - .appendLine(FragmentUtils.getAllFragmentsInStack(fragmentManager!!).toString()) - .appendLine("---stack bottom---") - .create() - ) - R.id.fragmentChildPopBtn -> FragmentUtils.pop(fragmentManager!!); - R.id.fragmentChildRemoveBtn -> FragmentUtils.remove(this); + private fun getItems(): MutableList> { + return CollectionUtils.newArrayList>( + CommonItemClick(R.string.fragment_show_stack) { + DialogHelper.showFragmentDialog( + SpanUtils().appendLine("top: " + FragmentUtils.getSimpleName(FragmentUtils.getTop(fm))) + .appendLine("topInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopInStack(fm))) + .appendLine("topShow: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShow(fm))) + .appendLine("topShowInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShowInStack(fm))) + .appendLine() + .appendLine("---all of fragments---") + .appendLine(FragmentUtils.getAllFragments(fm).toString()) + .appendLine("----------------------") + .appendLine() + .appendLine("---stack top---") + .appendLine(FragmentUtils.getAllFragmentsInStack(fm).toString()) + .appendLine("---stack bottom---") + .create() + ) + }, + CommonItemClick(R.string.fragment_pop) { + FragmentUtils.pop(fm) + }, + CommonItemClick(R.string.fragment_remove) { + FragmentUtils.remove(this) + }, + SharedElementItem() + ).apply { + for (ci: CommonItem<*> in this) { + ci.backgroundColor = mBgColor + } } } -} +} \ No newline at end of file diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt index f474cb9f22..3e57295596 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt @@ -4,16 +4,19 @@ import android.os.Build import android.os.Bundle import android.support.annotation.RequiresApi import android.support.v4.app.Fragment +import android.support.v4.app.FragmentManager import android.transition.* import android.view.View -import com.blankj.base.BaseLazyFragment +import android.widget.ImageView +import com.blankj.base.rv.ItemViewHolder +import com.blankj.common.fragment.CommonFragment +import com.blankj.common.item.CommonItem +import com.blankj.common.item.CommonItemClick import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.DialogHelper -import com.blankj.utilcode.util.ColorUtils -import com.blankj.utilcode.util.FragmentUtils -import com.blankj.utilcode.util.SpanUtils -import com.blankj.utilcode.util.ToastUtils +import com.blankj.utilcode.util.* import kotlinx.android.synthetic.main.fragment_container.* +import java.util.* /** * ``` @@ -23,7 +26,7 @@ import kotlinx.android.synthetic.main.fragment_container.* * desc : demo about FragmentUtils * ``` */ -class ContainerFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener { +class ContainerFragment : CommonFragment(), FragmentUtils.OnBackClickListener { companion object { fun newInstance(): ContainerFragment { @@ -34,98 +37,111 @@ class ContainerFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener } } - override fun initData(bundle: Bundle?) {} + private lateinit var fm: FragmentManager + private val mBgColor = ColorUtils.getRandomColor(false) override fun bindLayout(): Int { return R.layout.fragment_container } override fun initView(savedInstanceState: Bundle?, contentView: View?) { - FragmentUtils.setBackgroundColor(this, ColorUtils.getRandomColor(false)) - applyDebouncingClickListener( - fragmentRootShowStackBtn, - fragmentRootAddChildBtn, - fragmentRootAddChildStackBtn, - fragmentRootAddHideBtn, - fragmentRootAddHideStackBtn, - fragmentRootAddShowBtn, - fragmentRootPopToRootBtn, - fragmentRootHideShowBtn, - fragmentRootReplaceBtn - ) + super.initView(savedInstanceState, contentView) + mContentView.setBackgroundColor(mBgColor) + fm = fragmentManager!! + setCommonItems(findViewById(R.id.commonItemRv), getItems()) } - override fun doLazyBusiness() {} - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.fragmentRootShowStackBtn -> DialogHelper.showFragmentDialog( - SpanUtils().appendLine("top: " + FragmentUtils.getSimpleName(FragmentUtils.getTop(fragmentManager!!))) - .appendLine("topInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopInStack(fragmentManager!!))) - .appendLine("topShow: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShow(fragmentManager!!))) - .appendLine("topShowInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShowInStack(fragmentManager!!))) - .appendLine() - .appendLine("---all of fragments---") - .appendLine(FragmentUtils.getAllFragments(fragmentManager!!).toString()) - .appendLine("----------------------") - .appendLine() - .appendLine("---stack top---") - .appendLine(FragmentUtils.getAllFragmentsInStack(fragmentManager!!).toString()) - .appendLine("---stack bottom---") - .create() - ) - R.id.fragmentRootAddChildBtn -> FragmentUtils.add( - fragmentManager!!, - ChildFragment.newInstance(), - id - ) - R.id.fragmentRootAddChildStackBtn -> FragmentUtils.add( - fragmentManager!!, - ChildFragment.newInstance(), - id, - false, - true - ) - R.id.fragmentRootAddHideBtn -> FragmentUtils.add( - fragmentManager!!, - ChildFragment.newInstance(), - id, - true - ) - R.id.fragmentRootAddHideStackBtn -> FragmentUtils.add( - fragmentManager!!, - ChildFragment.newInstance(), - id, - true, - true - ) - R.id.fragmentRootAddShowBtn -> FragmentUtils.add( - fragmentManager!!, - addSharedElement(ChildFragment.newInstance()), - id, - false, - false - ) - R.id.fragmentRootPopToRootBtn -> FragmentUtils.popTo( - fragmentManager!!, - ChildFragment::class.java, - true - ) - R.id.fragmentRootHideShowBtn -> { - val fragment1 = FragmentUtils.findFragment(fragmentManager!!, ChildFragment::class.java) - if (fragment1 != null) { - FragmentUtils.showHide(this, fragment1) - } else { - ToastUtils.showLong("please add demo1 first!") - } + private fun getItems(): ArrayList>? { + val item = SharedElementItem() + return CollectionUtils.newArrayList>( + CommonItemClick(R.string.fragment_show_stack) { + DialogHelper.showFragmentDialog( + SpanUtils().appendLine("top: " + FragmentUtils.getSimpleName(FragmentUtils.getTop(fm))) + .appendLine("topInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopInStack(fm))) + .appendLine("topShow: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShow(fm))) + .appendLine("topShowInStack: " + FragmentUtils.getSimpleName(FragmentUtils.getTopShowInStack(fm))) + .appendLine() + .appendLine("---all of fragments---") + .appendLine(FragmentUtils.getAllFragments(fm).toString()) + .appendLine("----------------------") + .appendLine() + .appendLine("---stack top---") + .appendLine(FragmentUtils.getAllFragmentsInStack(fm).toString()) + .appendLine("---stack bottom---") + .create() + ) + }, + CommonItemClick(R.string.fragment_add_child) { + FragmentUtils.add( + fm, + ChildFragment.newInstance(), + id + ) + }, + CommonItemClick(R.string.fragment_add_child_stack) { + FragmentUtils.add( + fm, + ChildFragment.newInstance(), + id, + false, + true + ) + }, + CommonItemClick(R.string.fragment_add_hide) { + FragmentUtils.add( + fm, + ChildFragment.newInstance(), + id, + true + ) + }, + CommonItemClick(R.string.fragment_add_hide_stack) { + FragmentUtils.add( + fm, + ChildFragment.newInstance(), + id, + true, + true + ) + }, + CommonItemClick(R.string.fragment_add_demo1_show) { + FragmentUtils.add( + fm, + addSharedElement(ChildFragment.newInstance()), + id, + false, + false + ) + }, + CommonItemClick(R.string.fragment_pop_to_root) { + FragmentUtils.popTo( + fm, + ChildFragment::class.java, + true + ) + }, + CommonItemClick(R.string.fragment_hide_demo0_show_demo1) { + val fragment1 = FragmentUtils.findFragment(fm, ChildFragment::class.java) + if (fragment1 != null) { + FragmentUtils.showHide(this, fragment1) + } else { + ToastUtils.showLong("please add demo1 first!") + } + }, + CommonItemClick(R.string.fragment_replace) { + FragmentUtils.replace( + fm, + addSharedElement(ChildFragment.newInstance()), + id, + true, + item.element + ) + }, + item + ).apply { + for (ci: CommonItem<*> in this) { + ci.backgroundColor = mBgColor } - R.id.fragmentRootReplaceBtn -> FragmentUtils.replace( - fragmentManager!!, - addSharedElement(ChildFragment.newInstance()), - id, - true, - fragmentRootSharedElementIv - ) } } @@ -143,10 +159,22 @@ class ContainerFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener } } +class SharedElementItem : CommonItem { + + lateinit var element: ImageView; + + constructor() : super(R.layout.fragment_item_shared_element) + + override fun bind(holder: ItemViewHolder, position: Int) { + super.bind(holder, position) + element = holder.findViewById(R.id.fragmentRootSharedElementIv) + } +} + @RequiresApi(Build.VERSION_CODES.LOLLIPOP) class DetailTransition() : TransitionSet() { init { - ordering = TransitionSet.ORDERING_TOGETHER + ordering = ORDERING_TOGETHER addTransition(ChangeBounds()).addTransition(ChangeTransform()).addTransition(ChangeImageTransform()) } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt index 604501abe1..99b6355629 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt @@ -10,7 +10,7 @@ import android.view.View import com.blankj.common.activity.CommonActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.FragmentUtils -import kotlinx.android.synthetic.main.activity_fragment.* +import kotlinx.android.synthetic.main.fragment_activity.* /** * ``` @@ -51,10 +51,11 @@ class FragmentActivity : CommonActivity() { } override fun bindLayout(): Int { - return R.layout.activity_fragment + return R.layout.fragment_activity } override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) if (savedInstanceState != null) { curIndex = savedInstanceState.getInt("curIndex") } @@ -72,10 +73,6 @@ class FragmentActivity : CommonActivity() { ) } - override fun doBusiness() {} - - override fun onDebouncingClick(view: View) {} - override fun onBackPressed() { if (!FragmentUtils.dispatchBackPress(mFragments[curIndex])) { super.onBackPressed() diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt index 4d266527bb..d2a9ac7bab 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt @@ -2,7 +2,7 @@ package com.blankj.utilcode.pkg.feature.fragment import android.os.Bundle import android.view.View -import com.blankj.base.BaseLazyFragment +import com.blankj.common.fragment.CommonFragment import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils import com.blankj.utilcode.util.ColorUtils @@ -17,7 +17,7 @@ import kotlinx.android.synthetic.main.fragment_root.* * desc : demo about FragmentUtils * ``` */ -class RootFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener { +class RootFragment : CommonFragment(), FragmentUtils.OnBackClickListener { companion object { fun newInstance(): RootFragment { @@ -28,13 +28,12 @@ class RootFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener { } } - override fun initData(bundle: Bundle?) {} - override fun bindLayout(): Int { return R.layout.fragment_root } override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) BarUtils.setStatusBarColor(rootFragmentFakeStatusBar, ColorUtils.getColor(R.color.colorPrimary)) FragmentUtils.add( childFragmentManager, @@ -43,10 +42,6 @@ class RootFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener { ) } - override fun doLazyBusiness() {} - - override fun onDebouncingClick(view: View) {} - override fun onBackClick(): Boolean { if (FragmentUtils.dispatchBackPress(childFragmentManager)) return true return if (childFragmentManager.backStackEntryCount == 0) { diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt index 0be5c0c738..531c78b9f1 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt @@ -5,12 +5,14 @@ import android.content.Intent import android.os.Bundle import android.view.View import com.blankj.common.activity.CommonActivity -import com.blankj.common.activity.CommonActivityTitleView +import com.blankj.common.item.CommonItem +import com.blankj.common.item.CommonItemClick +import com.blankj.common.item.CommonItemTitle import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.DialogHelper +import com.blankj.utilcode.util.CollectionUtils import com.blankj.utilcode.util.KeyboardUtils -import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_keyboard.* +import kotlinx.android.synthetic.main.keyboard_activity.* /** * ``` @@ -29,49 +31,44 @@ class KeyboardActivity : CommonActivity() { } } + private var titleItem: CommonItemTitle = CommonItemTitle("", true) + override fun bindTitleRes(): Int { return R.string.demo_keyboard } override fun bindLayout(): Int { - return R.layout.activity_keyboard + return R.layout.keyboard_activity } override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) KeyboardUtils.fixAndroidBug5497(this) - applyDebouncingClickListener( - keyboardHideSoftInputBtn, - keyboardShowSoftInputBtn, - keyboardToggleSoftInputBtn, - keyboardShowDialogBtn - ) - + setCommonItems(findViewById(R.id.commonItemRv), getItems()) KeyboardUtils.registerSoftInputChangedListener(this) { height -> - SpanUtils.with(keyboardAboutTv) - .appendLine("isSoftInputVisible: " + KeyboardUtils.isSoftInputVisible(this@KeyboardActivity)) - .append("height: $height") - .create() + titleItem.title = "isSoftInputVisible: " + KeyboardUtils.isSoftInputVisible(this@KeyboardActivity) + "\nkeyboardHeight: $height" if (height > 0) { keyboardEt.requestFocus() } } } - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.keyboardHideSoftInputBtn -> { - KeyboardUtils.hideSoftInput(this) - } - R.id.keyboardShowSoftInputBtn -> { - KeyboardUtils.showSoftInput(this) - } - R.id.keyboardToggleSoftInputBtn -> { - KeyboardUtils.toggleSoftInput() - } - R.id.keyboardShowDialogBtn -> { - keyboardEt.clearFocus() - DialogHelper.showKeyboardDialog() - } - } + private fun getItems(): MutableList> { + return CollectionUtils.newArrayList( + titleItem, + CommonItemClick(R.string.keyboard_hide_soft_input) { + KeyboardUtils.hideSoftInput(this) + }, + CommonItemClick(R.string.keyboard_show_soft_input) { + KeyboardUtils.showSoftInput(this) + }, + CommonItemClick(R.string.keyboard_toggle_soft_input) { + KeyboardUtils.toggleSoftInput() + }, + CommonItemClick(R.string.keyboard_show_dialog) { + keyboardEt.clearFocus() + DialogHelper.showKeyboardDialog() + } + ) } } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpActivity.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpActivity.java new file mode 100644 index 0000000000..772192b999 --- /dev/null +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpActivity.java @@ -0,0 +1,20 @@ +package com.blankj.utilcode.pkg.feature.mvp; + +import com.blankj.common.activity.CommonActivity; +import com.blankj.utilcode.pkg.R; + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/11/09
+ *     desc  :
+ * 
+ */ +public class MvpActivity extends CommonActivity { + + @Override + public int bindTitleRes() { + return R.string.demo_mvp; + } +} diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt index d4771514ce..fc9915cb53 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt @@ -88,6 +88,7 @@ class NetworkActivity : CommonActivity(), NetworkUtils.OnNetworkStatusChangedLis } override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) NetworkUtils.registerNetworkStatusChangedListener(this) updateItems() } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt index 921d85b32b..b226e4141d 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt @@ -118,10 +118,9 @@ class PermissionActivity : CommonActivity() { permissionsDenied: List) { LogUtils.d(permissionsDeniedForever, permissionsDenied) if (permissionsDeniedForever.isNotEmpty()) { - showSnackbar(true, "Calendar is denied forever") + showSnackbar(false, "Calendar is denied forever") } else { - showSnackbar(true, "Calendar is denied") - requestCalendar() + showSnackbar(false, "Calendar is denied") } itemsView.updateItems(bindItems()) } @@ -147,7 +146,6 @@ class PermissionActivity : CommonActivity() { showSnackbar(false, "Microphone is denied forever") } else { showSnackbar(false, "Microphone is denied") - requestRecordAudio() } itemsView.updateItems(bindItems()) } @@ -174,7 +172,6 @@ class PermissionActivity : CommonActivity() { showSnackbar(false, "Calendar or Microphone is denied forever") } else { showSnackbar(false, "Calendar or Microphone is denied") - requestCalendarAndRecordAudio() } itemsView.updateItems(bindItems()) } diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt index 72ec62f98f..47ab4e2b9f 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt @@ -18,7 +18,7 @@ import com.blankj.common.activity.CommonActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.ToastUtils -import kotlinx.android.synthetic.main.activity_span.* +import kotlinx.android.synthetic.main.span_activity.* /** * ``` @@ -57,7 +57,12 @@ class SpanActivity : CommonActivity() { return R.string.demo_span } + override fun bindLayout(): Int { + return R.layout.span_activity + } + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + super.initView(savedInstanceState, contentView) val clickableSpan = object : ClickableSpan() { override fun onClick(widget: View) { ToastUtils.showShort("事件触发了") @@ -210,12 +215,12 @@ class SpanActivity : CommonActivity() { override fun onDebouncingClick(view: View) {} - override fun onDestroy() { - if (valueAnimator != null && valueAnimator.isRunning) { - valueAnimator.cancel() - } - super.onDestroy() - } +// override fun onDestroy() { +// if (valueAnimator.isRunning) { +// valueAnimator.cancel() +// } +// super.onDestroy() +// } } class BlurMaskFilterSpan(private var mRadius: Float) : CharacterStyle(), UpdateAppearance { diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt index bec099d5cf..91d89a4864 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt @@ -1,14 +1,21 @@ package com.blankj.utilcode.pkg.helper -import android.app.Dialog +import android.content.DialogInterface import android.graphics.Bitmap import android.graphics.drawable.ColorDrawable -import android.support.v7.app.AlertDialog +import android.support.v4.app.FragmentActivity import android.text.method.ScrollingMovementMethod +import android.util.Pair import android.view.Gravity -import android.view.LayoutInflater import android.view.View -import android.widget.* +import android.view.Window +import android.widget.Button +import android.widget.EditText +import android.widget.ImageView +import android.widget.TextView +import com.blankj.base.dialog.BaseDialogFragment +import com.blankj.base.dialog.DialogLayoutCallback +import com.blankj.common.dialog.CommonDialogContent import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.* import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldRequest @@ -24,94 +31,153 @@ import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldReques object DialogHelper { fun showRationaleDialog(shouldRequest: ShouldRequest) { - val topActivity = ActivityUtils.getTopActivity() - AlertDialog.Builder(topActivity) - .setTitle(android.R.string.dialog_alert_title) - .setMessage(R.string.permission_rationale_message) - .setPositiveButton(android.R.string.ok) { dialog, which -> shouldRequest.again(true) } - .setNegativeButton(android.R.string.cancel) { dialog, which -> shouldRequest.again(false) } - .setCancelable(false) - .create() - .show() + val topActivity = ActivityUtils.getTopActivity() ?: return + CommonDialogContent().init(topActivity as FragmentActivity, + StringUtils.getString(android.R.string.dialog_alert_title), + StringUtils.getString(R.string.permission_rationale_message), + Pair(StringUtils.getString(android.R.string.ok), View.OnClickListener { + shouldRequest.again(true) + }), + Pair(StringUtils.getString(android.R.string.cancel), View.OnClickListener { + shouldRequest.again(false) + })).show() } fun showOpenAppSettingDialog() { - val topActivity = ActivityUtils.getTopActivity() - AlertDialog.Builder(topActivity) - .setTitle(android.R.string.dialog_alert_title) - .setMessage(R.string.permission_denied_forever_message) - .setPositiveButton(android.R.string.ok) { dialog, which -> PermissionUtils.launchAppDetailsSettings() } - .setNegativeButton(android.R.string.cancel) { dialog, which -> } - .setCancelable(false) - .create() + val topActivity = ActivityUtils.getTopActivity() ?: return + CommonDialogContent().init(topActivity as FragmentActivity, + StringUtils.getString(android.R.string.dialog_alert_title), + StringUtils.getString(R.string.permission_denied_forever_message), + Pair(StringUtils.getString(android.R.string.ok), View.OnClickListener { + PermissionUtils.launchAppDetailsSettings() + }), + Pair(StringUtils.getString(android.R.string.cancel), View.OnClickListener { + })) .show() } fun showKeyboardDialog() { - val topActivity = ActivityUtils.getTopActivity() - val dialog = Dialog(topActivity) - val dialogView = LayoutInflater.from(topActivity).inflate(R.layout.dialog_keyboard, null) - - val keyboardDialogEt = dialogView.findViewById(R.id.keyboardDialogEt) - val listener = View.OnClickListener { v -> - when (v.id) { - R.id.keyboardDialogHideSoftInputBtn -> KeyboardUtils.hideSoftInput(keyboardDialogEt) - R.id.keyboardDialogShowSoftInputBtn -> KeyboardUtils.showSoftInput(keyboardDialogEt) - R.id.keyboardDialogToggleSoftInputBtn -> KeyboardUtils.toggleSoftInput() - R.id.keyboardDialogCloseBtn -> { - KeyboardUtils.hideSoftInput(keyboardDialogEt) - dialog.dismiss() + val topActivity = ActivityUtils.getTopActivity() ?: return + BaseDialogFragment().init(topActivity as FragmentActivity, object : DialogLayoutCallback { + override fun bindTheme(): Int { + return View.NO_ID + } + + override fun bindLayout(): Int { + return R.layout.keyboard_dialog + } + + override fun initView(dialog: BaseDialogFragment, contentView: View) { + dialog.dialog.setCanceledOnTouchOutside(false) + + val keyboardDialogEt = contentView.findViewById(R.id.keyboardDialogEt) + val listener = View.OnClickListener { v -> + when (v.id) { + R.id.keyboardDialogHideSoftInputBtn -> KeyboardUtils.hideSoftInput(keyboardDialogEt) + R.id.keyboardDialogShowSoftInputBtn -> KeyboardUtils.showSoftInput(keyboardDialogEt) + R.id.keyboardDialogToggleSoftInputBtn -> KeyboardUtils.toggleSoftInput() + R.id.keyboardDialogCloseBtn -> { + KeyboardUtils.hideSoftInput(keyboardDialogEt) + dialog.dismiss() + } + } } + contentView.findViewById(R.id.keyboardDialogHideSoftInputBtn).setOnClickListener(listener) + contentView.findViewById(R.id.keyboardDialogShowSoftInputBtn).setOnClickListener(listener) + contentView.findViewById(R.id.keyboardDialogToggleSoftInputBtn).setOnClickListener(listener) + contentView.findViewById(R.id.keyboardDialogCloseBtn).setOnClickListener(listener) + + dialog.dialog.setOnShowListener(DialogInterface.OnShowListener { + KeyboardUtils.fixAndroidBug5497(dialog.dialog.window) + }) + } + + override fun setWindowStyle(window: Window) { + window.setBackgroundDrawable(ColorDrawable(0)) + val attributes = window.attributes + attributes.gravity = Gravity.BOTTOM + attributes.width = ScreenUtils.getAppScreenWidth() + attributes.height = ScreenUtils.getAppScreenHeight() * 2 / 5 + attributes.windowAnimations = R.style.BottomDialogAnimation + window.attributes = attributes } - } - dialogView.findViewById(R.id.keyboardDialogHideSoftInputBtn).setOnClickListener(listener) - dialogView.findViewById(R.id.keyboardDialogShowSoftInputBtn).setOnClickListener(listener) - dialogView.findViewById(R.id.keyboardDialogToggleSoftInputBtn).setOnClickListener(listener) - dialogView.findViewById(R.id.keyboardDialogCloseBtn).setOnClickListener(listener) - - dialog.setContentView(dialogView) - dialog.setCanceledOnTouchOutside(false) - - val window = dialog.window - dialog.setOnShowListener { KeyboardUtils.fixAndroidBug5497(window) } - - window.setBackgroundDrawable(ColorDrawable(0)) - val attributes = dialog.window.attributes - attributes.gravity = Gravity.BOTTOM - attributes.width = ScreenUtils.getAppScreenWidth() - attributes.height = ScreenUtils.getAppScreenHeight() * 2 / 5 - attributes.windowAnimations = R.style.BottomDialogAnimation - dialog.window.attributes = attributes - - dialog.show() + + override fun onCancel(dialog: BaseDialogFragment) {} + + override fun onDismiss(dialog: BaseDialogFragment) {} + }).show() } fun showFragmentDialog(info: CharSequence) { - val topActivity = ActivityUtils.getTopActivity() - val dialogView = LayoutInflater.from(topActivity).inflate(R.layout.dialog_fragment, null) - val aboutTv = dialogView.findViewById(R.id.fragmentDialogAboutTv) - aboutTv.movementMethod = ScrollingMovementMethod.getInstance() - aboutTv.text = info - val dialog = AlertDialog.Builder(topActivity).setView(dialogView).create() - dialog.show() + val topActivity = ActivityUtils.getTopActivity() ?: return + BaseDialogFragment().init(topActivity as FragmentActivity, object : DialogLayoutCallback { + override fun bindTheme(): Int { + return R.style.CommonContentDialogStyle + } + + override fun bindLayout(): Int { + return R.layout.fragment_dialog + } + + override fun initView(dialog: BaseDialogFragment, contentView: View) { + val aboutTv = contentView.findViewById(R.id.fragmentDialogAboutTv) + aboutTv.movementMethod = ScrollingMovementMethod.getInstance() + aboutTv.text = info + } + + override fun setWindowStyle(window: Window) {} + + override fun onCancel(dialog: BaseDialogFragment) {} + + override fun onDismiss(dialog: BaseDialogFragment) {} + }).show() } fun showScreenshotDialog(screenshot: Bitmap) { - val topActivity = ActivityUtils.getTopActivity() - val dialogView = LayoutInflater.from(topActivity).inflate(R.layout.dialog_screen, null) - val screenshotIv = dialogView.findViewById(R.id.screenDialogScreenshotIv) - screenshotIv.setImageBitmap(screenshot) - val dialog = AlertDialog.Builder(topActivity).setView(dialogView).create() - dialog.show() + val topActivity = ActivityUtils.getTopActivity() ?: return + BaseDialogFragment().init(topActivity as FragmentActivity, object : DialogLayoutCallback { + override fun bindTheme(): Int { + return R.style.CommonContentDialogStyle + } + + override fun bindLayout(): Int { + return R.layout.screen_dialog + } + + override fun initView(dialog: BaseDialogFragment, contentView: View) { + contentView.findViewById(R.id.screenDialogScreenshotIv) + .setImageBitmap(screenshot) + } + + override fun setWindowStyle(window: Window) {} + + override fun onCancel(dialog: BaseDialogFragment) {} + + override fun onDismiss(dialog: BaseDialogFragment) {} + }).show() } fun showToastDialog() { - val topActivity = ActivityUtils.getTopActivity() - val dialogView = LayoutInflater.from(topActivity).inflate(R.layout.dialog_toast, null) - dialogView.findViewById