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/207] 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/207] 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/207] 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/207] 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: Mon, 3 Jun 2019 23:04:53 +0800
Subject: [PATCH 005/207] see 06/03 log

---
 gradle/config/config.gradle                                 | 2 +-
 .../src/main/java/com/blankj/lib/base/BaseActivity.java     | 2 +-
 .../blankj/utilcode/pkg/feature/screen/ScreenActivity.kt    | 6 +++++-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/gradle/config/config.gradle b/gradle/config/config.gradle
index e455c4dba6..13d2d8c99b 100644
--- a/gradle/config/config.gradle
+++ b/gradle/config/config.gradle
@@ -36,7 +36,7 @@ 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"),
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..f3c0a9821c 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
@@ -85,7 +85,7 @@ private void initSwipeBack() {
             final SwipePanel swipeLayout = new SwipePanel(this);
             swipeLayout.setLeftDrawable(R.drawable.base_back);
             swipeLayout.setLeftEdgeSize(SizeUtils.dp2px(100));
-            swipeLayout.wrapView(mContentView);
+            swipeLayout.wrapView(findViewById(android.R.id.content));
             swipeLayout.setOnFullSwipeListener(new SwipePanel.OnFullSwipeListener() {
                 @Override
                 public void onFullSwipe(int direction) {
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt
index 33d6f57db3..31c2186d9f 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt
@@ -88,7 +88,11 @@ class ScreenActivity : BaseTitleActivity() {
             R.id.screenScreenshotBtn -> DialogHelper.showScreenshotDialog(ScreenUtils.screenShot(this))
             R.id.screenSetSleepDurationBtn -> ScreenUtils.setSleepDuration(100000)
         }
-        updateAboutScreen()
+        Utils.runOnUiThreadDelayed(object: Runnable {
+            override fun run() {
+                updateAboutScreen()
+            }
+        }, 36)
     }
 
     private fun updateAboutScreen() {

From c27ba55aadfe1dcc617d765590473f3773ac5157 Mon Sep 17 00:00:00 2001
From: Blankj <625783482@qq.com>
Date: Tue, 4 Jun 2019 21:47:33 +0800
Subject: [PATCH 006/207] see 06/04 log

---
 .gitignore                       | 2 +-
 gradle.properties                | 2 +-
 gradle/config/config.gradle      | 4 ++--
 gradle/config/configBuild.gradle | 1 +
 4 files changed, 5 insertions(+), 4 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/gradle.properties b/gradle.properties
index 8f4efeb23e..13c65e97f8 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -19,7 +19,7 @@
 
 #org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
 
-org.gradle.jvmargs=-Xmx8192m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+org.gradle.jvmargs=-Xmx8192m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -XX:-UseGCOverheadLimit -Dfile.encoding=UTF-8
 org.gradle.daemon=true
 org.gradle.configureondemand=true
 org.gradle.parallel=true
\ No newline at end of file
diff --git a/gradle/config/config.gradle b/gradle/config/config.gradle
index 13d2d8c99b..02827c9dc0 100644
--- a/gradle/config/config.gradle
+++ b/gradle/config/config.gradle
@@ -25,10 +25,10 @@ gradle.ext {
             plugin_bintray             : new DepConfig("com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4"),// 上传到 bintray
             plugin_traute              : new DepConfig("tech.harmonysoft:traute-gradle:1.1.10"),// 注解转非空判断
 
-            plugin_bus                 : new DepConfig(false/*是否本地调试*/, "", "com.blankj:bus-gradle-plugin:1.8", true),
+            plugin_bus                 : new DepConfig(true/*是否本地调试*/, "", "com.blankj:bus-gradle-plugin:1.8", true),
 
             buildSrc                   : new DepConfig(":buildSrc"),
-            bus_gradle_plugin          : new DepConfig(":bus-gradle-plugin", false),
+            bus_gradle_plugin          : new DepConfig(":bus-gradle-plugin", true),
             launcher_app               : new DepConfig(":launcher:app"),
             launcher_pkg               : new DepConfig(":launcher:pkg"),
             lib_base                   : new DepConfig(":lib:base"),
diff --git a/gradle/config/configBuild.gradle b/gradle/config/configBuild.gradle
index 516cc5f0ad..a223a3ea6e 100644
--- a/gradle/config/configBuild.gradle
+++ b/gradle/config/configBuild.gradle
@@ -79,6 +79,7 @@ class CustomListener implements BuildListener {
         gradle.depConfig.each { name, config ->
             if (!config.isApply) return
             if (config.useLocal) {
+                if (config.localPath == "") return
                 gradle.ext.dep[name] = gradle.rootProject.findProject(config.localPath)
             } else {
                 gradle.ext.dep[name] = config.remotePath

From 0d3390ce04c03025e7cb58b0f1b9cf71f4e0098f Mon Sep 17 00:00:00 2001
From: Blankj <625783482@qq.com>
Date: Wed, 5 Jun 2019 03:01:25 +0800
Subject: [PATCH 007/207] see 06/05 log

---
 .gitignore                                    |   1 -
 .../bus-gradle-plugin-1.7.0-groovydoc.jar     | Bin 69018 -> 0 bytes
 .../bus-gradle-plugin-1.7.0-groovydoc.jar.md5 |   1 -
 ...bus-gradle-plugin-1.7.0-groovydoc.jar.sha1 |   1 -
 .../1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar | Bin 32863 -> 0 bytes
 .../bus-gradle-plugin-1.7.0-javadoc.jar.md5   |   1 -
 .../bus-gradle-plugin-1.7.0-javadoc.jar.sha1  |   1 -
 .../1.7.0/bus-gradle-plugin-1.7.0-sources.jar | Bin 22945 -> 0 bytes
 .../bus-gradle-plugin-1.7.0-sources.jar.md5   |   1 -
 .../bus-gradle-plugin-1.7.0-sources.jar.sha1  |   1 -
 .../1.7.0/bus-gradle-plugin-1.7.0.jar         | Bin 56549 -> 0 bytes
 .../1.7.0/bus-gradle-plugin-1.7.0.jar.md5     |   1 -
 .../1.7.0/bus-gradle-plugin-1.7.0.jar.sha1    |   1 -
 .../1.7.0/bus-gradle-plugin-1.7.0.pom         |  40 ---------------
 .../1.7.0/bus-gradle-plugin-1.7.0.pom.md5     |   1 -
 .../1.7.0/bus-gradle-plugin-1.7.0.pom.sha1    |   1 -
 .../bus-gradle-plugin/maven-metadata.xml      |  12 -----
 .../bus-gradle-plugin/maven-metadata.xml.md5  |   1 -
 .../bus-gradle-plugin/maven-metadata.xml.sha1 |   1 -
 gradle/config/config.gradle                   |   1 +
 launcher/app/build.gradle                     |   6 +--
 launcher/app/src/main/AndroidManifest.xml     |   2 +-
 .../app/{UtilsApp.java => LauncherApp.java}   |   8 +--
 launcher/pkg/build.gradle                     |   2 +-
 .../com/blankj/launcher/pkg/MainActivity.kt   |   4 +-
 .../com/blankj/launcher/pkg/SplashActivity.kt |   4 +-
 .../com/blankj/lib/base/BaseActivity.java     |  48 ------------------
 .../com/blankj/lib/base/BaseApplication.java  |  11 ++--
 lib/common/.gitignore                         |   1 +
 lib/common/build.gradle                       |   8 +++
 lib/common/proguard-rules.pro                 |  21 ++++++++
 lib/common/src/main/AndroidManifest.xml       |   1 +
 .../blankj/lib/common/CommonApplication.java  |  19 +++++++
 .../blankj/lib/common/CommonBackActivity.java |  44 ++++++++++++++++
 .../com/blankj/lib/common/CommonConfig.java   |  14 +++++
 .../lib/common/CommonDrawerActivity.java}     |   7 +--
 .../lib/common/CommonTaskActivity.java}       |  40 +++++++++------
 .../lib/common/CommonTitleActivity.java}      |   7 +--
 .../src/main/res/anim/slide_in_left.xml       |   0
 .../src/main/res/anim/slide_in_right.xml      |   0
 .../src/main/res/anim/slide_out_left.xml      |   0
 .../src/main/res/anim/slide_out_right.xml     |   0
 .../src/main/res/drawable/base_back.png       | Bin
 .../main/res/drawable/base_sel_button_bg.xml  |   0
 .../drawable/base_sel_button_txt_color.xml    |   0
 .../main/res/drawable/main_avatar_round.png   | Bin
 .../src/main/res/drawable/main_bg_header.jpeg | Bin
 .../src/main/res/drawable/main_menu_blog.xml  |   0
 .../main/res/drawable/main_menu_github.xml    |   0
 .../res/layout/common_activity_drawer.xml}    |   2 +-
 .../common_activity_drawer_nav_header.xml}    |   0
 .../res/layout/common_activity_title.xml}     |   4 +-
 .../common_activity_title_stub_no_scroll.xml} |   0
 .../common_activity_title_stub_scroll.xml}    |   0
 .../src/main/res/menu/main_drawer.xml         |   0
 .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin
 .../src/main/res/values/colors.xml            |   0
 .../src/main/res/values/dimens.xml            |   0
 .../src/main/res/values/strings.xml           |   0
 .../src/main/res/values/styles.xml            |   0
 subutil/app/build.gradle                      |   2 +-
 .../java/com/blankj/subutil/app/SubUtilApp.kt |   5 +-
 subutil/pkg/build.gradle                      |   2 +-
 .../subutil/pkg/feature/SubUtilActivity.kt    |   4 +-
 .../pkg/feature/location/LocationActivity.kt  |   5 +-
 .../pkg/feature/pinyin/PinyinActivity.kt      |   5 +-
 utilcode/app/build.gradle                     |   2 +-
 .../com/blankj/utilcode/app/UtilCodeApp.kt    |   4 +-
 .../com/blankj/utilcode/util/ThreadUtils.java |  28 ++++++++++
 utilcode/pkg/build.gradle                     |   2 +-
 .../utilcode/pkg/feature/CoreUtilActivity.kt  |   4 +-
 .../pkg/feature/activity/ActivityActivity.kt  |   6 +--
 .../feature/activity/SubActivityActivity.kt   |   4 +-
 .../feature/adaptScreen/AdaptCloseActivity.kt |   4 +-
 .../adaptScreen/AdaptHeightActivity.kt        |   4 +-
 .../adaptScreen/AdaptScreenActivity.kt        |   5 +-
 .../feature/adaptScreen/AdaptWidthActivity.kt |   4 +-
 .../utilcode/pkg/feature/app/AppActivity.kt   |   5 +-
 .../utilcode/pkg/feature/bar/BarActivity.kt   |   5 +-
 .../pkg/feature/bar/BarNavActivity.kt         |   5 +-
 .../feature/bar/BarNotificationActivity.kt    |   5 +-
 .../pkg/feature/bar/BarStatusActivity.kt      |   5 +-
 .../pkg/feature/bar/BarStatusAlphaActivity.kt |   4 +-
 .../pkg/feature/bar/BarStatusColorActivity.kt |   4 +-
 .../feature/bar/BarStatusCustomActivity.kt    |   4 +-
 .../feature/bar/BarStatusDrawerActivity.kt    |   4 +-
 .../feature/bar/BarStatusFragmentActivity.kt  |   4 +-
 .../feature/bar/BarStatusImageViewActivity.kt |   4 +-
 .../feature/brightness/BrightnessActivity.kt  |   5 +-
 .../utilcode/pkg/feature/bus/BusActivity.kt   |   5 +-
 .../pkg/feature/bus/BusRemoteActivity.kt      |   5 +-
 .../pkg/feature/clean/CleanActivity.kt        |   5 +-
 .../pkg/feature/device/DeviceActivity.kt      |   6 +--
 .../feature/flashlight/FlashlightActivity.kt  |   5 +-
 .../pkg/feature/fragment/FragmentActivity.kt  |   4 +-
 .../pkg/feature/image/ImageActivity.kt        |   5 +-
 .../pkg/feature/keyboard/KeyboardActivity.kt  |   5 +-
 .../utilcode/pkg/feature/log/LogActivity.kt   |   5 +-
 .../pkg/feature/metaData/MetaDataActivity.kt  |   5 +-
 .../pkg/feature/network/NetworkActivity.kt    |   5 +-
 .../utilcode/pkg/feature/path/PathActivity.kt |   5 +-
 .../feature/permission/PermissionActivity.kt  |   5 +-
 .../pkg/feature/phone/PhoneActivity.kt        |   5 +-
 .../pkg/feature/process/ProcessActivity.kt    |   5 +-
 .../pkg/feature/reflect/ReflectActivity.kt    |   5 +-
 .../pkg/feature/resource/ResourceActivity.kt  |   5 +-
 .../utilcode/pkg/feature/rom/RomActivity.kt   |   5 +-
 .../pkg/feature/screen/ScreenActivity.kt      |   5 +-
 .../pkg/feature/sdcard/SDCardActivity.kt      |   5 +-
 .../pkg/feature/snackbar/SnackbarActivity.kt  |   5 +-
 .../pkg/feature/spStatic/SPStaticActivity.kt  |   5 +-
 .../utilcode/pkg/feature/span/SpanActivity.kt |   5 +-
 .../pkg/feature/toast/ToastActivity.kt        |   5 +-
 .../pkg/feature/vibrate/VibrateActivity.kt    |   5 +-
 114 files changed, 294 insertions(+), 294 deletions(-)
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.md5
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.sha1
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.md5
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.sha1
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.md5
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.sha1
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar.md5
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar.sha1
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.md5
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.sha1
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.md5
 delete mode 100644 busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.sha1
 rename launcher/app/src/main/java/com/blankj/launcher/app/{UtilsApp.java => LauncherApp.java} (70%)
 create mode 100644 lib/common/.gitignore
 create mode 100644 lib/common/build.gradle
 create mode 100644 lib/common/proguard-rules.pro
 create mode 100644 lib/common/src/main/AndroidManifest.xml
 create mode 100644 lib/common/src/main/java/com/blankj/lib/common/CommonApplication.java
 create mode 100644 lib/common/src/main/java/com/blankj/lib/common/CommonBackActivity.java
 create mode 100644 lib/common/src/main/java/com/blankj/lib/common/CommonConfig.java
 rename lib/{base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java => common/src/main/java/com/blankj/lib/common/CommonDrawerActivity.java} (91%)
 rename lib/{base/src/main/java/com/blankj/lib/base/BaseTaskActivity.java => common/src/main/java/com/blankj/lib/common/CommonTaskActivity.java} (65%)
 rename lib/{base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java => common/src/main/java/com/blankj/lib/common/CommonTitleActivity.java} (92%)
 rename lib/{base => common}/src/main/res/anim/slide_in_left.xml (100%)
 rename lib/{base => common}/src/main/res/anim/slide_in_right.xml (100%)
 rename lib/{base => common}/src/main/res/anim/slide_out_left.xml (100%)
 rename lib/{base => common}/src/main/res/anim/slide_out_right.xml (100%)
 rename lib/{base => common}/src/main/res/drawable/base_back.png (100%)
 rename lib/{base => common}/src/main/res/drawable/base_sel_button_bg.xml (100%)
 rename lib/{base => common}/src/main/res/drawable/base_sel_button_txt_color.xml (100%)
 rename lib/{base => common}/src/main/res/drawable/main_avatar_round.png (100%)
 rename lib/{base => common}/src/main/res/drawable/main_bg_header.jpeg (100%)
 rename lib/{base => common}/src/main/res/drawable/main_menu_blog.xml (100%)
 rename lib/{base => common}/src/main/res/drawable/main_menu_github.xml (100%)
 rename lib/{base/src/main/res/layout/activity_drawer.xml => common/src/main/res/layout/common_activity_drawer.xml} (93%)
 rename lib/{base/src/main/res/layout/activity_drawer_nav_header.xml => common/src/main/res/layout/common_activity_drawer_nav_header.xml} (100%)
 rename lib/{base/src/main/res/layout/activity_base_title.xml => common/src/main/res/layout/common_activity_title.xml} (91%)
 rename lib/{base/src/main/res/layout/activity_base_title_stub_no_scroll.xml => common/src/main/res/layout/common_activity_title_stub_no_scroll.xml} (100%)
 rename lib/{base/src/main/res/layout/activity_base_title_stub_scroll.xml => common/src/main/res/layout/common_activity_title_stub_scroll.xml} (100%)
 rename lib/{base => common}/src/main/res/menu/main_drawer.xml (100%)
 rename lib/{base => common}/src/main/res/mipmap-xhdpi/ic_launcher.png (100%)
 rename lib/{base => common}/src/main/res/values/colors.xml (100%)
 rename lib/{base => common}/src/main/res/values/dimens.xml (100%)
 rename lib/{base => common}/src/main/res/values/strings.xml (100%)
 rename lib/{base => common}/src/main/res/values/styles.xml (100%)

diff --git a/.gitignore b/.gitignore
index 193619553c..b9d244be48 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,4 +9,3 @@
 .externalNativeBuild
 /apk
 *.phrof
-/busMaven
diff --git a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar b/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar
deleted file mode 100644
index 7670b105589206281d2d0aef0b72e1ec74b20a52..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 69018
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
V_yu@PzmWhr0Uo#Tpum8?{vSvFzS#f(

diff --git a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.md5 b/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.md5
deleted file mode 100644
index 6a4b6377df..0000000000
--- a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.md5
+++ /dev/null
@@ -1 +0,0 @@
-f066bbc77d59ce6c1379873e5a89715e
\ No newline at end of file
diff --git a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.sha1 b/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.sha1
deleted file mode 100644
index 4281862896..0000000000
--- a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-27634ae190af35cf8cdd4acb5a0450a5f76d85e9
\ No newline at end of file
diff --git a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar b/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar
deleted file mode 100644
index 0be9be605ac7b0124bac26ab83af7705adfc0348..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 32863
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
Zd&@2(4gmj+!+raic-!zhJOBRc{{gCcqHq8J

diff --git a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.md5 b/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.md5
deleted file mode 100644
index 20b400d515..0000000000
--- a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.md5
+++ /dev/null
@@ -1 +0,0 @@
-d1f3a078f25631446d7f61a2b3f13b87
\ No newline at end of file
diff --git a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.sha1 b/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.sha1
deleted file mode 100644
index 3e58ea82e7..0000000000
--- a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-46debaa90519ccdb6aabb7034d5ac1a43c466c47
\ No newline at end of file
diff --git a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar b/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar
deleted file mode 100644
index 1f226ce7ef35c5903f1bf0631f0c77e8c33f770b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22945
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

diff --git a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.md5 b/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.md5
deleted file mode 100644
index 5ee6652502..0000000000
--- a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.md5
+++ /dev/null
@@ -1 +0,0 @@
-704f0fc2f320ad82e43447dcac14050d
\ No newline at end of file
diff --git a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.sha1 b/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.sha1
deleted file mode 100644
index 639eaea278..0000000000
--- a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-456c915220fe181bed8c67bef1568f70e7b0f1d1
\ No newline at end of file
diff --git a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar b/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar
deleted file mode 100644
index 6994f3ffc3cddfcc225449023bf529eee399fbcc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 56549
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
-
-  4.0.0
-  com.blankj
-  bus-gradle-plugin
-  1.7.0
-  
-    
-      com.android.tools.build
-      gradle
-      3.4.0
-      runtime
-    
-    
-      com.android.tools.build
-      gradle-api
-      3.4.0
-      runtime
-    
-    
-      org.javassist
-      javassist
-      3.24.0-GA
-      runtime
-    
-    
-      commons-io
-      commons-io
-      2.5
-      runtime
-    
-    
-      junit
-      junit
-      4.12
-      test
-    
-  
-
diff --git a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.md5 b/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.md5
deleted file mode 100644
index be008381f9..0000000000
--- a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.md5
+++ /dev/null
@@ -1 +0,0 @@
-03dd0e6302a92e8849d59866a2b2bf85
\ No newline at end of file
diff --git a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.sha1 b/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.sha1
deleted file mode 100644
index ee48929585..0000000000
--- a/busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ce864f19c593951f14bc93fd812fe4251cad7098
\ No newline at end of file
diff --git a/busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml b/busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml
deleted file mode 100644
index ec310da3ca..0000000000
--- a/busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-  com.blankj
-  bus-gradle-plugin
-  
-    1.7.0
-    
-      1.7.0
-    
-    20190603071129
-  
-
diff --git a/busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.md5 b/busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.md5
deleted file mode 100644
index 71bfc2e85b..0000000000
--- a/busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.md5
+++ /dev/null
@@ -1 +0,0 @@
-88dc3791e85eb3ccba2f1bb9d71dccbb
\ No newline at end of file
diff --git a/busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.sha1 b/busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.sha1
deleted file mode 100644
index 8fced4ac4e..0000000000
--- a/busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3c87365d79cf58e5eecaa328aceab560914ecd78
\ No newline at end of file
diff --git a/gradle/config/config.gradle b/gradle/config/config.gradle
index 02827c9dc0..0d952bc224 100644
--- a/gradle/config/config.gradle
+++ b/gradle/config/config.gradle
@@ -32,6 +32,7 @@ gradle.ext {
             launcher_app               : new DepConfig(":launcher:app"),
             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_lib                : new DepConfig(":subutil:lib"),
             subutil_pkg                : new DepConfig(":subutil:pkg"),
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/app/src/main/AndroidManifest.xml b/launcher/app/src/main/AndroidManifest.xml
index fd37da2e4a..e024a7bd85 100644
--- a/launcher/app/src/main/AndroidManifest.xml
+++ b/launcher/app/src/main/AndroidManifest.xml
@@ -3,7 +3,7 @@
     package="com.blankj.launcher.app">
 
     
@@ -12,11 +12,11 @@
  *     desc  : app about utils
  * 
*/ -public class UtilsApp extends BaseApplication { +public class LauncherApp extends CommonApplication { - private static UtilsApp sInstance; + private static LauncherApp sInstance; - public static UtilsApp getInstance() { + public static LauncherApp getInstance() { return sInstance; } diff --git a/launcher/pkg/build.gradle b/launcher/pkg/build.gradle index 9fe360a5dd..637f119cc4 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_common } \ 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..310b67e132 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 @@ -5,7 +5,7 @@ import android.os.Bundle import android.support.v7.app.ActionBarDrawerToggle import android.view.View import android.widget.ImageView -import com.blankj.lib.base.BaseDrawerActivity +import com.blankj.lib.common.CommonDrawerActivity import com.blankj.utilcode.constant.PermissionConstants import com.blankj.utilcode.util.* import kotlinx.android.synthetic.main.activity_main.* @@ -19,7 +19,7 @@ import kotlinx.android.synthetic.main.activity_main.* * desc : MainActivity * ``` */ -class MainActivity : BaseDrawerActivity() { +class MainActivity : CommonDrawerActivity() { override fun initData(bundle: Bundle?) { 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 9bfb7c8385..502aacd523 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 @@ -2,9 +2,9 @@ package com.blankj.launcher.pkg import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseActivity +import com.blankj.lib.common.CommonBackActivity -class SplashActivity : BaseActivity() { +class SplashActivity : CommonBackActivity() { override fun isSwipeBack(): Boolean { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } 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 f3c0a9821c..c346f7c2d3 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,12 +8,7 @@ import android.view.LayoutInflater; import android.view.View; -import com.blankj.swipepanel.SwipePanel; import com.blankj.utilcode.util.AntiShakeUtils; -import com.blankj.utilcode.util.AppUtils; -import com.blankj.utilcode.util.SizeUtils; -import com.blankj.utilcode.util.ToastUtils; -import com.blankj.utilcode.util.Utils; /** *
@@ -29,35 +24,14 @@ public abstract class BaseActivity extends AppCompatActivity
     protected View     mContentView;
     protected Activity mActivity;
 
-    public abstract boolean isSwipeBack();
-
-    /**
-     * 上次点击时间
-     */
-    private long lastClick = 0;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         mActivity = this;
         super.onCreate(savedInstanceState);
         initData(getIntent().getExtras());
         setRootLayout(bindLayout());
-        findViewById(android.R.id.content).setBackgroundColor(getResources().getColor(R.color.mediumGray));
         initView(savedInstanceState, mContentView);
         doBusiness();
-        initSwipeBack();
-
-        AppUtils.registerAppStatusChangedListener(this, new Utils.OnAppStatusChangedListener() {
-            @Override
-            public void onForeground() {
-                ToastUtils.showShort("foreground");
-            }
-
-            @Override
-            public void onBackground() {
-                ToastUtils.showShort("background");
-            }
-        });
     }
 
     @SuppressLint("ResourceType")
@@ -73,27 +47,5 @@ public void onClick(View view) {
             onWidgetClick(view);
         }
     }
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        AppUtils.unregisterAppStatusChangedListener(this);
-    }
-
-    private void initSwipeBack() {
-        if (isSwipeBack()) {
-            final SwipePanel swipeLayout = new SwipePanel(this);
-            swipeLayout.setLeftDrawable(R.drawable.base_back);
-            swipeLayout.setLeftEdgeSize(SizeUtils.dp2px(100));
-            swipeLayout.wrapView(findViewById(android.R.id.content));
-            swipeLayout.setOnFullSwipeListener(new SwipePanel.OnFullSwipeListener() {
-                @Override
-                public void onFullSwipe(int direction) {
-                    swipeLayout.close(direction);
-                    finish();
-                }
-            });
-        }
-    }
 }
 
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..5a7267216e 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
@@ -3,10 +3,7 @@
 import android.app.Application;
 import android.content.Context;
 import android.support.multidex.MultiDex;
-
-import com.blankj.utilcode.util.AppUtils;
-import com.blankj.utilcode.util.CrashUtils;
-import com.blankj.utilcode.util.LogUtils;
+import com.blankj.utilcode.util.*;
 import com.squareup.leakcanary.LeakCanary;
 
 import java.util.ArrayList;
@@ -28,6 +25,7 @@ public static BaseApplication getInstance() {
     }
 
     private Boolean isDebug;
+    private Boolean isMainProcess;
 
     @Override
     protected void attachBaseContext(Context base) {
@@ -100,4 +98,9 @@ private boolean isDebug() {
         if (isDebug == null) isDebug = AppUtils.isAppDebug();
         return isDebug;
     }
+
+    public boolean isMainProcess() {
+        if (isMainProcess == null) isMainProcess = ProcessUtils.isMainProcess();
+        return isMainProcess;
+    }
 }
diff --git a/lib/common/.gitignore b/lib/common/.gitignore
new file mode 100644
index 0000000000..796b96d1c4
--- /dev/null
+++ b/lib/common/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/lib/common/build.gradle b/lib/common/build.gradle
new file mode 100644
index 0000000000..881637b34a
--- /dev/null
+++ b/lib/common/build.gradle
@@ -0,0 +1,8 @@
+apply {
+    from "${rootDir.path}/gradle/config/configLib.gradle"
+}
+
+dependencies {
+    implementation fileTree(dir: 'libs', include: ['*.jar'])
+    api gradle.ext.dep.lib_base
+}
\ No newline at end of file
diff --git a/lib/common/proguard-rules.pro b/lib/common/proguard-rules.pro
new file mode 100644
index 0000000000..f1b424510d
--- /dev/null
+++ b/lib/common/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/lib/common/src/main/AndroidManifest.xml b/lib/common/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..32ea8ea189
--- /dev/null
+++ b/lib/common/src/main/AndroidManifest.xml
@@ -0,0 +1 @@
+
diff --git a/lib/common/src/main/java/com/blankj/lib/common/CommonApplication.java b/lib/common/src/main/java/com/blankj/lib/common/CommonApplication.java
new file mode 100644
index 0000000000..ed2f4245d5
--- /dev/null
+++ b/lib/common/src/main/java/com/blankj/lib/common/CommonApplication.java
@@ -0,0 +1,19 @@
+package com.blankj.lib.common;
+
+import com.blankj.lib.base.BaseApplication;
+
+/**
+ * 
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/06/05
+ *     desc  :
+ * 
+ */ +public class CommonApplication extends BaseApplication { + + @Override + public void onCreate() { + super.onCreate(); + } +} diff --git a/lib/common/src/main/java/com/blankj/lib/common/CommonBackActivity.java b/lib/common/src/main/java/com/blankj/lib/common/CommonBackActivity.java new file mode 100644 index 0000000000..76cfc09f36 --- /dev/null +++ b/lib/common/src/main/java/com/blankj/lib/common/CommonBackActivity.java @@ -0,0 +1,44 @@ +package com.blankj.lib.common; + +import android.os.Bundle; + +import com.blankj.common.R; +import com.blankj.lib.base.BaseActivity; +import com.blankj.swipepanel.SwipePanel; +import com.blankj.utilcode.util.SizeUtils; + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/06/05
+ *     desc  :
+ * 
+ */ +public abstract class CommonBackActivity extends BaseActivity { + + public abstract boolean isSwipeBack(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + findViewById(android.R.id.content).setBackgroundColor(getResources().getColor(R.color.mediumGray)); + initSwipeBack(); + } + + private void initSwipeBack() { + if (isSwipeBack()) { + final SwipePanel swipeLayout = new SwipePanel(this); + swipeLayout.setLeftDrawable(R.drawable.base_back); + swipeLayout.setLeftEdgeSize(SizeUtils.dp2px(100)); + swipeLayout.wrapView(findViewById(android.R.id.content)); + swipeLayout.setOnFullSwipeListener(new SwipePanel.OnFullSwipeListener() { + @Override + public void onFullSwipe(int direction) { + swipeLayout.close(direction); + finish(); + } + }); + } + } +} diff --git a/lib/common/src/main/java/com/blankj/lib/common/CommonConfig.java b/lib/common/src/main/java/com/blankj/lib/common/CommonConfig.java new file mode 100644 index 0000000000..f78e3c58f7 --- /dev/null +++ b/lib/common/src/main/java/com/blankj/lib/common/CommonConfig.java @@ -0,0 +1,14 @@ +package com.blankj.lib.common; + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/06/05
+ *     desc  :
+ * 
+ */ +public class CommonConfig { + + public static final String BUGLY_APP_ID = "82bcf9067d"; +} diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java b/lib/common/src/main/java/com/blankj/lib/common/CommonDrawerActivity.java similarity index 91% rename from lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java rename to lib/common/src/main/java/com/blankj/lib/common/CommonDrawerActivity.java index c7f7f1daea..efb9f52854 100755 --- a/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java +++ b/lib/common/src/main/java/com/blankj/lib/common/CommonDrawerActivity.java @@ -1,4 +1,4 @@ -package com.blankj.lib.base; +package com.blankj.lib.common; import android.annotation.SuppressLint; import android.content.Intent; @@ -12,6 +12,7 @@ import android.view.MenuItem; import android.widget.FrameLayout; +import com.blankj.common.R; import com.blankj.utilcode.util.ActivityUtils; import com.blankj.utilcode.util.StringUtils; @@ -24,7 +25,7 @@ * desc : base about drawer activity *
*/ -public abstract class BaseDrawerActivity extends BaseActivity { +public abstract class CommonDrawerActivity extends CommonBackActivity { protected DrawerLayout mBaseDrawerRootLayout; protected FrameLayout mBaseDrawerContainerView; @@ -50,7 +51,7 @@ public boolean isSwipeBack() { @SuppressLint("ResourceType") @Override public void setRootLayout(@LayoutRes int layoutId) { - super.setRootLayout(R.layout.activity_drawer); + super.setRootLayout(R.layout.common_activity_drawer); mBaseDrawerRootLayout = findViewById(R.id.baseDrawerRootLayout); mBaseDrawerContainerView = findViewById(R.id.baseDrawerContainerView); if (layoutId > 0) { diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseTaskActivity.java b/lib/common/src/main/java/com/blankj/lib/common/CommonTaskActivity.java similarity index 65% rename from lib/base/src/main/java/com/blankj/lib/base/BaseTaskActivity.java rename to lib/common/src/main/java/com/blankj/lib/common/CommonTaskActivity.java index 8cdec81a78..3fcb1b26ba 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/BaseTaskActivity.java +++ b/lib/common/src/main/java/com/blankj/lib/common/CommonTaskActivity.java @@ -1,4 +1,4 @@ -package com.blankj.lib.base; +package com.blankj.lib.common; import android.os.Bundle; import android.view.Gravity; @@ -17,30 +17,32 @@ * desc : base about task activity *
*/ -public abstract class BaseTaskActivity extends BaseTitleActivity { - - private ProgressBar loadingView; +public abstract class CommonTaskActivity extends CommonTitleActivity { public abstract T doInBackground(); public abstract void runOnUiThread(T data); + private ProgressBar loadingView; + + private ThreadUtils.SimpleTask bgTask = new ThreadUtils.SimpleTask() { + @Override + public T doInBackground() throws Throwable { + return CommonTaskActivity.this.doInBackground(); + } + + @Override + public void onSuccess(T result) { + runOnUiThread(result); + setLoadingVisibility(false); + } + }; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setLoadingVisibility(true); - ThreadUtils.executeByIo(new ThreadUtils.SimpleTask() { - @Override - public T doInBackground() throws Throwable { - return BaseTaskActivity.this.doInBackground(); - } - - @Override - public void onSuccess(T result) { - runOnUiThread(result); - setLoadingVisibility(false); - } - }); + ThreadUtils.executeByIo(bgTask); } void setLoadingVisibility(boolean isVisible) { @@ -52,4 +54,10 @@ void setLoadingVisibility(boolean isVisible) { } loadingView.setVisibility(isVisible ? View.VISIBLE : View.GONE); } + + @Override + protected void onDestroy() { + super.onDestroy(); + ThreadUtils.cancel(bgTask); + } } diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java b/lib/common/src/main/java/com/blankj/lib/common/CommonTitleActivity.java similarity index 92% rename from lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java rename to lib/common/src/main/java/com/blankj/lib/common/CommonTitleActivity.java index a40230420d..66d7f97970 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java +++ b/lib/common/src/main/java/com/blankj/lib/common/CommonTitleActivity.java @@ -1,4 +1,4 @@ -package com.blankj.lib.base; +package com.blankj.lib.common; import android.annotation.SuppressLint; import android.support.annotation.LayoutRes; @@ -11,6 +11,7 @@ import android.view.ViewStub; import android.widget.FrameLayout; +import com.blankj.common.R; import com.blankj.utilcode.util.BarUtils; import com.blankj.utilcode.util.ColorUtils; @@ -22,7 +23,7 @@ * desc : base about title activity *
*/ -public abstract class BaseTitleActivity extends BaseActivity { +public abstract class CommonTitleActivity extends CommonBackActivity { public abstract CharSequence bindTitle(); @@ -40,7 +41,7 @@ public boolean isSwipeBack() { @SuppressLint("ResourceType") @Override public void setRootLayout(@LayoutRes int layoutId) { - super.setRootLayout(R.layout.activity_base_title); + super.setRootLayout(R.layout.common_activity_title); baseTitleRootLayout = findViewById(R.id.baseTitleRootLayout); baseTitleToolbar = findViewById(R.id.baseTitleToolbar); if (layoutId > 0) { diff --git a/lib/base/src/main/res/anim/slide_in_left.xml b/lib/common/src/main/res/anim/slide_in_left.xml similarity index 100% rename from lib/base/src/main/res/anim/slide_in_left.xml rename to lib/common/src/main/res/anim/slide_in_left.xml diff --git a/lib/base/src/main/res/anim/slide_in_right.xml b/lib/common/src/main/res/anim/slide_in_right.xml similarity index 100% rename from lib/base/src/main/res/anim/slide_in_right.xml rename to lib/common/src/main/res/anim/slide_in_right.xml diff --git a/lib/base/src/main/res/anim/slide_out_left.xml b/lib/common/src/main/res/anim/slide_out_left.xml similarity index 100% rename from lib/base/src/main/res/anim/slide_out_left.xml rename to lib/common/src/main/res/anim/slide_out_left.xml diff --git a/lib/base/src/main/res/anim/slide_out_right.xml b/lib/common/src/main/res/anim/slide_out_right.xml similarity index 100% rename from lib/base/src/main/res/anim/slide_out_right.xml rename to lib/common/src/main/res/anim/slide_out_right.xml diff --git a/lib/base/src/main/res/drawable/base_back.png b/lib/common/src/main/res/drawable/base_back.png similarity index 100% rename from lib/base/src/main/res/drawable/base_back.png rename to lib/common/src/main/res/drawable/base_back.png diff --git a/lib/base/src/main/res/drawable/base_sel_button_bg.xml b/lib/common/src/main/res/drawable/base_sel_button_bg.xml similarity index 100% rename from lib/base/src/main/res/drawable/base_sel_button_bg.xml rename to lib/common/src/main/res/drawable/base_sel_button_bg.xml diff --git a/lib/base/src/main/res/drawable/base_sel_button_txt_color.xml b/lib/common/src/main/res/drawable/base_sel_button_txt_color.xml similarity index 100% rename from lib/base/src/main/res/drawable/base_sel_button_txt_color.xml rename to lib/common/src/main/res/drawable/base_sel_button_txt_color.xml diff --git a/lib/base/src/main/res/drawable/main_avatar_round.png b/lib/common/src/main/res/drawable/main_avatar_round.png similarity index 100% rename from lib/base/src/main/res/drawable/main_avatar_round.png rename to lib/common/src/main/res/drawable/main_avatar_round.png diff --git a/lib/base/src/main/res/drawable/main_bg_header.jpeg b/lib/common/src/main/res/drawable/main_bg_header.jpeg similarity index 100% rename from lib/base/src/main/res/drawable/main_bg_header.jpeg rename to lib/common/src/main/res/drawable/main_bg_header.jpeg diff --git a/lib/base/src/main/res/drawable/main_menu_blog.xml b/lib/common/src/main/res/drawable/main_menu_blog.xml similarity index 100% rename from lib/base/src/main/res/drawable/main_menu_blog.xml rename to lib/common/src/main/res/drawable/main_menu_blog.xml diff --git a/lib/base/src/main/res/drawable/main_menu_github.xml b/lib/common/src/main/res/drawable/main_menu_github.xml similarity index 100% rename from lib/base/src/main/res/drawable/main_menu_github.xml rename to lib/common/src/main/res/drawable/main_menu_github.xml diff --git a/lib/base/src/main/res/layout/activity_drawer.xml b/lib/common/src/main/res/layout/common_activity_drawer.xml similarity index 93% rename from lib/base/src/main/res/layout/activity_drawer.xml rename to lib/common/src/main/res/layout/common_activity_drawer.xml index 72f70ed969..8dffa243e4 100644 --- a/lib/base/src/main/res/layout/activity_drawer.xml +++ b/lib/common/src/main/res/layout/common_activity_drawer.xml @@ -21,7 +21,7 @@ android:layout_height="match_parent" android:layout_gravity="start" android:background="@color/white" - app:headerLayout="@layout/activity_drawer_nav_header" + app:headerLayout="@layout/common_activity_drawer_nav_header" app:menu="@menu/main_drawer" /> diff --git a/lib/base/src/main/res/layout/activity_drawer_nav_header.xml b/lib/common/src/main/res/layout/common_activity_drawer_nav_header.xml similarity index 100% rename from lib/base/src/main/res/layout/activity_drawer_nav_header.xml rename to lib/common/src/main/res/layout/common_activity_drawer_nav_header.xml diff --git a/lib/base/src/main/res/layout/activity_base_title.xml b/lib/common/src/main/res/layout/common_activity_title.xml similarity index 91% rename from lib/base/src/main/res/layout/activity_base_title.xml rename to lib/common/src/main/res/layout/common_activity_title.xml index b11ecf7341..7e91f07a01 100644 --- a/lib/base/src/main/res/layout/activity_base_title.xml +++ b/lib/common/src/main/res/layout/common_activity_title.xml @@ -24,14 +24,14 @@ android:id="@+id/baseTitleStubScroll" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout="@layout/activity_base_title_stub_scroll" + android:layout="@layout/common_activity_title_stub_scroll" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> diff --git a/lib/base/src/main/res/layout/activity_base_title_stub_no_scroll.xml b/lib/common/src/main/res/layout/common_activity_title_stub_no_scroll.xml similarity index 100% rename from lib/base/src/main/res/layout/activity_base_title_stub_no_scroll.xml rename to lib/common/src/main/res/layout/common_activity_title_stub_no_scroll.xml diff --git a/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml b/lib/common/src/main/res/layout/common_activity_title_stub_scroll.xml similarity index 100% rename from lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml rename to lib/common/src/main/res/layout/common_activity_title_stub_scroll.xml diff --git a/lib/base/src/main/res/menu/main_drawer.xml b/lib/common/src/main/res/menu/main_drawer.xml similarity index 100% rename from lib/base/src/main/res/menu/main_drawer.xml rename to lib/common/src/main/res/menu/main_drawer.xml diff --git a/lib/base/src/main/res/mipmap-xhdpi/ic_launcher.png b/lib/common/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from lib/base/src/main/res/mipmap-xhdpi/ic_launcher.png rename to lib/common/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/lib/base/src/main/res/values/colors.xml b/lib/common/src/main/res/values/colors.xml similarity index 100% rename from lib/base/src/main/res/values/colors.xml rename to lib/common/src/main/res/values/colors.xml diff --git a/lib/base/src/main/res/values/dimens.xml b/lib/common/src/main/res/values/dimens.xml similarity index 100% rename from lib/base/src/main/res/values/dimens.xml rename to lib/common/src/main/res/values/dimens.xml diff --git a/lib/base/src/main/res/values/strings.xml b/lib/common/src/main/res/values/strings.xml similarity index 100% rename from lib/base/src/main/res/values/strings.xml rename to lib/common/src/main/res/values/strings.xml diff --git a/lib/base/src/main/res/values/styles.xml b/lib/common/src/main/res/values/styles.xml similarity index 100% rename from lib/base/src/main/res/values/styles.xml rename to lib/common/src/main/res/values/styles.xml 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/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt b/subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt index cf0d10e4e5..acb07aade4 100644 --- a/subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt +++ b/subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt @@ -1,8 +1,7 @@ package com.blankj.subutil.app import android.content.Context - -import com.blankj.lib.base.BaseApplication +import com.blankj.lib.common.CommonApplication /** @@ -13,7 +12,7 @@ import com.blankj.lib.base.BaseApplication * desc : app about utils * ``` */ -class SubUtilApp : BaseApplication() { +class SubUtilApp : CommonApplication() { companion object { var instance: SubUtilApp? = null diff --git a/subutil/pkg/build.gradle b/subutil/pkg/build.gradle index 9fe360a5dd..637f119cc4 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_common } \ No newline at end of file diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt index fa042f461d..003b574025 100644 --- a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt +++ b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt @@ -4,7 +4,7 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.subutil.pkg.R import com.blankj.subutil.pkg.feature.location.LocationActivity import com.blankj.subutil.pkg.feature.pinyin.PinyinActivity @@ -18,7 +18,7 @@ import com.blankj.utilcode.util.BusUtils * desc : MainActivity * ``` */ -class SubUtilActivity : BaseTitleActivity() { +class SubUtilActivity : CommonTitleActivity() { companion object { @BusUtils.Subscribe(name = "SubUtilActivity#start") 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 b730814851..285e837065 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 @@ -7,11 +7,10 @@ import android.content.ServiceConnection import android.os.Bundle import android.os.IBinder import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.subutil.pkg.R import com.blankj.subutil.pkg.helper.PermissionHelper import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_location.* /** * ``` @@ -21,7 +20,7 @@ import kotlinx.android.synthetic.main.activity_location.* * desc : demo about LocationUtils * ``` */ -class LocationActivity : BaseTitleActivity() { +class LocationActivity : CommonTitleActivity() { companion object { fun start(context: Context) { 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 82d2f1b140..fd09aa1d86 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 @@ -4,10 +4,9 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.subutil.pkg.R import com.blankj.subutil.util.PinyinUtils -import kotlinx.android.synthetic.main.activity_pinyin.* /** * ``` @@ -17,7 +16,7 @@ import kotlinx.android.synthetic.main.activity_pinyin.* * desc : demo about PinyinUtils * ``` */ -class PinyinActivity : BaseTitleActivity() { +class PinyinActivity : CommonTitleActivity() { companion object { fun start(context: Context) { 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/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt b/utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt index 267ae1fc08..8136dec1f0 100644 --- a/utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt +++ b/utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt @@ -1,6 +1,6 @@ package com.blankj.utilcode.app -import com.blankj.lib.base.BaseApplication +import com.blankj.lib.common.CommonApplication import com.blankj.utilcode.util.Utils @@ -12,7 +12,7 @@ import com.blankj.utilcode.util.Utils * desc : app about utils * ``` */ -class UtilCodeApp : BaseApplication() { +class UtilCodeApp : CommonApplication() { companion object { lateinit var instance: UtilCodeApp 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..76aae62bda 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 @@ -7,6 +7,7 @@ import android.util.Log; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; @@ -846,9 +847,36 @@ public static void executeByCustomAtFixRate(final ExecutorService pool, * @param task The task to cancel. */ public static void cancel(final Task task) { + if (task == null) return; task.cancel(); } + /** + * Cancel the given tasks. + * + * @param tasks The tasks to cancel. + */ + public static void cancel(final Task... tasks) { + if (tasks == null || tasks.length == 0) return; + for (Task task : tasks) { + if (task == null) continue; + task.cancel(); + } + } + + /** + * Cancel the given tasks. + * + * @param tasks The tasks to cancel. + */ + public static void cancel(final List tasks) { + if (tasks == null || tasks.size() == 0) return; + for (Task task : tasks) { + if (task == null) continue; + task.cancel(); + } + } + /** * Set the deliver. * diff --git a/utilcode/pkg/build.gradle b/utilcode/pkg/build.gradle index 9fe360a5dd..637f119cc4 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_common } \ No newline at end of file diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt index df89f6d944..e1e519a06b 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt @@ -4,7 +4,7 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.feature.activity.ActivityActivity import com.blankj.utilcode.pkg.feature.adaptScreen.AdaptScreenActivity @@ -44,7 +44,7 @@ import com.blankj.utilcode.util.BusUtils * desc : * ``` */ -class CoreUtilActivity : BaseTitleActivity() { +class CoreUtilActivity : CommonTitleActivity() { companion object { @BusUtils.Subscribe(name = "CoreUtilActivity#start") 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..2ebc8144b5 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 @@ -9,14 +9,12 @@ import android.os.Bundle import android.support.v4.app.ActivityOptionsCompat import android.view.View import android.view.Window -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.feature.CoreUtilActivity import com.blankj.utilcode.util.ActivityUtils import com.blankj.utilcode.util.AppUtils -import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_activity.* import java.util.* /** @@ -27,7 +25,7 @@ import java.util.* * desc : demo about ActivityUtils * ``` */ -class ActivityActivity : BaseTitleActivity() { +class ActivityActivity : CommonTitleActivity() { companion object { fun start(context: Context) { 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..c0d8772ac8 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 @@ -5,7 +5,7 @@ import android.os.Bundle import android.support.v4.app.ActivityCompat import android.view.View import android.view.Window -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.ColorUtils @@ -17,7 +17,7 @@ import com.blankj.utilcode.util.ColorUtils * desc : demo about ActivityUtils * ``` */ -class SubActivityActivity : BaseTitleActivity() { +class SubActivityActivity : CommonTitleActivity() { override fun initData(bundle: Bundle?) {} diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt index 0298aeb62e..a7a1a61f68 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt @@ -6,11 +6,11 @@ import android.content.res.Resources import android.os.Bundle import android.view.View import android.view.WindowManager -import com.blankj.lib.base.BaseActivity +import com.blankj.lib.common.CommonBackActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.AdaptScreenUtils -class AdaptCloseActivity : BaseActivity() { +class AdaptCloseActivity : CommonBackActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt index 3e5c69e270..244c9c66b5 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt @@ -7,12 +7,12 @@ import android.graphics.Color import android.os.Bundle import android.view.View import android.view.WindowManager -import com.blankj.lib.base.BaseActivity +import com.blankj.lib.common.CommonBackActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.AdaptScreenUtils import kotlinx.android.synthetic.main.activity_adaptscreen_height.* -class AdaptHeightActivity : BaseActivity() { +class AdaptHeightActivity : CommonBackActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt index 2968afa302..1c30cd89da 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt @@ -4,11 +4,10 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R -import kotlinx.android.synthetic.main.activity_adaptscreen.* -class AdaptScreenActivity : BaseTitleActivity() { +class AdaptScreenActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt index adf4b254af..e8e2197155 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt @@ -7,12 +7,12 @@ import android.graphics.Color import android.os.Bundle import android.view.View import android.view.WindowManager -import com.blankj.lib.base.BaseActivity +import com.blankj.lib.common.CommonBackActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.AdaptScreenUtils import kotlinx.android.synthetic.main.activity_adaptscreen_width.* -class AdaptWidthActivity : BaseActivity() { +class AdaptWidthActivity : CommonBackActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt index 22fa6967c1..9c629744a9 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt @@ -4,12 +4,11 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.Config import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.PermissionHelper import com.blankj.utilcode.util.* -import kotlinx.android.synthetic.main.activity_app.* /** * ``` @@ -19,7 +18,7 @@ import kotlinx.android.synthetic.main.activity_app.* * desc : demo about AppUtils * ``` */ -class AppActivity : BaseTitleActivity() { +class AppActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt index ee78a0c84b..3b74b42f8d 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt @@ -4,9 +4,8 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R -import kotlinx.android.synthetic.main.activity_bar.* /** * ``` @@ -16,7 +15,7 @@ import kotlinx.android.synthetic.main.activity_bar.* * desc : demo about BarUtils * ``` */ -class BarActivity : BaseTitleActivity() { +class BarActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt index 9e35a6385b..22bbde911a 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt @@ -5,12 +5,11 @@ import android.content.Intent import android.os.Build import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils import com.blankj.utilcode.util.ColorUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_bar_nav.* /** * ``` @@ -20,7 +19,7 @@ import kotlinx.android.synthetic.main.activity_bar_nav.* * desc : demo about BarUtils * ``` */ -class BarNavActivity : BaseTitleActivity() { +class BarNavActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt index cf7bf90058..b9f4635150 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt @@ -5,10 +5,9 @@ import android.content.Intent import android.os.Bundle import android.os.Handler import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils -import kotlinx.android.synthetic.main.activity_bar_notification.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_bar_notification.* * desc : demo about BarUtils * ``` */ -class BarNotificationActivity : BaseTitleActivity() { +class BarNotificationActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt index 7edabaa9ca..cf203d4130 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt @@ -4,11 +4,10 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_bar_status.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_bar_status.* * desc : demo about BarUtils * ``` */ -class BarStatusActivity : BaseTitleActivity() { +class BarStatusActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt index 5edbe82af7..e89d18589b 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt @@ -6,7 +6,7 @@ import android.graphics.Color import android.os.Bundle import android.view.View import android.widget.SeekBar -import com.blankj.lib.base.BaseActivity +import com.blankj.lib.common.CommonBackActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils import kotlinx.android.synthetic.main.activity_bar_status_alpha.* @@ -19,7 +19,7 @@ import kotlinx.android.synthetic.main.activity_bar_status_alpha.* * desc : demo about BarUtils * ``` */ -class BarStatusAlphaActivity : BaseActivity() { +class BarStatusAlphaActivity : CommonBackActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt index 0626780558..1693898f2f 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt @@ -4,7 +4,7 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseActivity +import com.blankj.lib.common.CommonBackActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils import com.blankj.utilcode.util.ColorUtils @@ -18,7 +18,7 @@ import kotlinx.android.synthetic.main.activity_bar_status_color.* * desc : demo about BarUtils * ``` */ -class BarStatusColorActivity : BaseActivity() { +class BarStatusColorActivity : CommonBackActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt index 90b27c540a..54dde43699 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt @@ -5,7 +5,7 @@ import android.content.Intent import android.graphics.Color import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseActivity +import com.blankj.lib.common.CommonBackActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils @@ -18,7 +18,7 @@ import com.blankj.utilcode.util.BarUtils * desc : demo about BarUtils * ``` */ -class BarStatusCustomActivity : BaseActivity() { +class BarStatusCustomActivity : CommonBackActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt index 4f22147430..e814effde6 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt @@ -7,7 +7,7 @@ import android.os.Bundle import android.view.View import android.widget.CompoundButton import android.widget.SeekBar -import com.blankj.lib.base.BaseDrawerActivity +import com.blankj.lib.common.CommonDrawerActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils import com.blankj.utilcode.util.ColorUtils @@ -22,7 +22,7 @@ import kotlinx.android.synthetic.main.activity_bar_status_drawer.* * desc : demo about BarUtils * ``` */ -class BarStatusDrawerActivity : BaseDrawerActivity() { +class BarStatusDrawerActivity : CommonDrawerActivity() { companion object { fun start(context: Context) { 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..8195d31fc8 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 @@ -8,7 +8,7 @@ import android.support.v4.app.Fragment import android.support.v4.app.FragmentPagerAdapter import android.support.v4.view.ViewPager import android.view.View -import com.blankj.lib.base.BaseActivity +import com.blankj.lib.common.CommonBackActivity import com.blankj.utilcode.pkg.R import kotlinx.android.synthetic.main.activity_bar_status_fragment.* import java.util.* @@ -21,7 +21,7 @@ import java.util.* * desc : demo about BarUtils * ``` */ -class BarStatusFragmentActivity : BaseActivity() { +class BarStatusFragmentActivity : CommonBackActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt index e5c682c91a..b7ef61c033 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt @@ -6,7 +6,7 @@ import android.graphics.Color import android.os.Bundle import android.view.View import android.widget.SeekBar -import com.blankj.lib.base.BaseActivity +import com.blankj.lib.common.CommonBackActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils import kotlinx.android.synthetic.main.activity_bar_status_image_view.* @@ -19,7 +19,7 @@ import kotlinx.android.synthetic.main.activity_bar_status_image_view.* * desc : demo about BarUtils * ``` */ -class BarStatusImageViewActivity : BaseActivity() { +class BarStatusImageViewActivity : CommonBackActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt index fa0cc36626..671ebb9cfa 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt @@ -6,13 +6,12 @@ import android.os.Build import android.os.Bundle import android.view.View import android.widget.SeekBar -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BrightnessUtils import com.blankj.utilcode.util.PermissionUtils import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.ToastUtils -import kotlinx.android.synthetic.main.activity_brightness.* /** * ``` @@ -22,7 +21,7 @@ import kotlinx.android.synthetic.main.activity_brightness.* * desc : demo about BrightnessUtils * ``` */ -class BrightnessActivity : BaseTitleActivity() { +class BrightnessActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt index 1d08fb7315..c1864b51f4 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt @@ -4,11 +4,10 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BusUtils import com.blankj.utilcode.util.LogUtils -import kotlinx.android.synthetic.main.activity_bus.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_bus.* * desc : demo about BusUtils * ``` */ -class BusActivity : BaseTitleActivity() { +class BusActivity : CommonTitleActivity() { companion object { const val BUS_KEY = "BusActivity" diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt index 59171165dd..629bd18ffb 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt @@ -4,11 +4,10 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BusUtils import com.blankj.utilcode.util.LogUtils -import kotlinx.android.synthetic.main.activity_bus_remote.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_bus_remote.* * desc : demo about BusUtils * ``` */ -class BusRemoteActivity : BaseTitleActivity() { +class BusRemoteActivity : CommonTitleActivity() { companion object { const val BUS_KEY = "BusRemoteActivity" diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt index 5d39af51b9..14d0e72138 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt @@ -5,11 +5,10 @@ import android.content.Intent import android.os.Bundle import android.os.Environment import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.CleanUtils import com.blankj.utilcode.util.SnackbarUtils -import kotlinx.android.synthetic.main.activity_clean.* import java.io.File /** @@ -20,7 +19,7 @@ import java.io.File * desc : demo about CleanUtils * ``` */ -class CleanActivity : BaseTitleActivity() { +class CleanActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt index abae92b144..91c6d78d20 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt @@ -5,12 +5,10 @@ import android.content.Intent import android.os.Build import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.DeviceUtils -import com.blankj.utilcode.util.ScreenUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_device.* import java.util.* /** @@ -21,7 +19,7 @@ import java.util.* * desc : demo about DeviceUtils * ``` */ -class DeviceActivity : BaseTitleActivity() { +class DeviceActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt index 2844f13680..f5072e3c66 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt @@ -4,13 +4,12 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.PermissionHelper import com.blankj.utilcode.util.FlashlightUtils import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.ToastUtils -import kotlinx.android.synthetic.main.activity_flashlight.* /** * ``` @@ -20,7 +19,7 @@ import kotlinx.android.synthetic.main.activity_flashlight.* * desc : demo about FlashlightUtils * ``` */ -class FlashlightActivity : BaseTitleActivity() { +class FlashlightActivity : CommonTitleActivity() { companion object { fun start(context: Context) { 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..e3671bc2a7 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 @@ -7,7 +7,7 @@ import android.os.PersistableBundle import android.support.design.widget.BottomNavigationView import android.support.v4.app.Fragment import android.view.View -import com.blankj.lib.base.BaseActivity +import com.blankj.lib.common.CommonBackActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.FragmentUtils import kotlinx.android.synthetic.main.activity_fragment.* @@ -20,7 +20,7 @@ import kotlinx.android.synthetic.main.activity_fragment.* * desc : demo about FragmentUtils * ``` */ -class FragmentActivity : BaseActivity() { +class FragmentActivity : CommonBackActivity() { companion object { fun start(context: Context) { 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..7e622043a3 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 @@ -12,7 +12,7 @@ import android.view.View import android.widget.Button import android.widget.ImageView import android.widget.TextView -import com.blankj.lib.base.BaseTaskActivity +import com.blankj.lib.common.CommonTaskActivity import com.blankj.lib.base.rv.BaseAdapter import com.blankj.lib.base.rv.BaseCell import com.blankj.lib.base.rv.BaseViewHolder @@ -21,7 +21,6 @@ import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.ImageUtils import com.blankj.utilcode.util.StringUtils import com.blankj.utilcode.util.ToastUtils -import kotlinx.android.synthetic.main.activity_image.* /** * ``` @@ -31,7 +30,7 @@ import kotlinx.android.synthetic.main.activity_image.* * desc : demo about ImageUtils * ``` */ -class ImageActivity : BaseTaskActivity>() { +class ImageActivity : CommonTaskActivity>() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt index 48db773920..c95d6ed4db 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt @@ -4,12 +4,11 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.DialogHelper import com.blankj.utilcode.util.KeyboardUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_keyboard.* /** * ``` @@ -19,7 +18,7 @@ import kotlinx.android.synthetic.main.activity_keyboard.* * desc : demo about KeyboardUtils * ``` */ -class KeyboardActivity : BaseTitleActivity() { +class KeyboardActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt index 82e4668b1d..aaef033f8b 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt @@ -8,13 +8,12 @@ import android.os.Bundle import android.view.View import android.widget.CompoundButton import com.blankj.lib.base.BaseApplication -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.AppUtils import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.PathUtils import com.blankj.utilcode.util.StringUtils -import kotlinx.android.synthetic.main.activity_log.* import java.util.* @@ -26,7 +25,7 @@ import java.util.* * desc : demo about LogUtils * ``` */ -class LogActivity : BaseTitleActivity(), +class LogActivity : CommonTitleActivity(), CompoundButton.OnCheckedChangeListener { companion object { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt index afabd439ec..8e578945ed 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt @@ -4,11 +4,10 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.MetaDataUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_metadata.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_metadata.* * desc : demo about MetaDataUtils * ``` */ -class MetaDataActivity : BaseTitleActivity() { +class MetaDataActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt index 9e705d031e..83125c86a3 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt @@ -5,13 +5,12 @@ import android.content.Intent import android.os.Bundle import android.text.SpannableStringBuilder import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.AppUtils import com.blankj.utilcode.util.NetworkUtils import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.Utils -import kotlinx.android.synthetic.main.activity_network.* import java.util.concurrent.atomic.AtomicInteger /** @@ -22,7 +21,7 @@ import java.util.concurrent.atomic.AtomicInteger * desc : demo about NetworkUtils * ``` */ -class NetworkActivity : BaseTitleActivity() { +class NetworkActivity : CommonTitleActivity() { var cur: Int = 0 var count: AtomicInteger = AtomicInteger(); diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt index a562205fe1..9935d1b148 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt @@ -4,11 +4,10 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.PathUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_path.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_path.* * desc : demo about PathUtils * ``` */ -class PathActivity : BaseTitleActivity() { +class PathActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt index cb9efb9d50..643ceae4eb 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt @@ -6,12 +6,11 @@ import android.content.Intent import android.os.Build import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.constant.PermissionConstants import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.DialogHelper import com.blankj.utilcode.util.* -import kotlinx.android.synthetic.main.activity_permission.* /** * ``` @@ -21,7 +20,7 @@ import kotlinx.android.synthetic.main.activity_permission.* * desc : demo about PermissionUtils * ``` */ -class PermissionActivity : BaseTitleActivity() { +class PermissionActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt index 6b28c44f0f..07d631e375 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt @@ -4,12 +4,11 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.PermissionHelper import com.blankj.utilcode.util.PhoneUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_phone.* /** * ``` @@ -19,7 +18,7 @@ import kotlinx.android.synthetic.main.activity_phone.* * desc : demo about PhoneUtils * ``` */ -class PhoneActivity : BaseTitleActivity() { +class PhoneActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt index 404d06d71f..69210b4102 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt @@ -4,11 +4,10 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.ProcessUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_process.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_process.* * desc : demo about ProcessUtils * ``` */ -class ProcessActivity : BaseTitleActivity() { +class ProcessActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt index 7348182e4b..5f54a78d6a 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt @@ -4,11 +4,10 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.ReflectUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_reflect.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_reflect.* * desc : demo about ReflectUtils * ``` */ -class ReflectActivity : BaseTitleActivity() { +class ReflectActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt index e2fbb5a199..0808a6cd28 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt @@ -4,12 +4,11 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.Config import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.ResourceUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_resource.* /** * ``` @@ -19,7 +18,7 @@ import kotlinx.android.synthetic.main.activity_resource.* * desc : demo about ResourceUtils * ``` */ -class ResourceActivity : BaseTitleActivity() { +class ResourceActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt index 20a741c050..fc62fefa96 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt @@ -4,11 +4,10 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.RomUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_rom.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_rom.* * desc : demo about RomUtils * ``` */ -class RomActivity : BaseTitleActivity() { +class RomActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt index 31c2186d9f..de8075bb47 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt @@ -5,11 +5,10 @@ import android.content.Intent import android.os.Build import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.DialogHelper import com.blankj.utilcode.util.* -import kotlinx.android.synthetic.main.activity_screen.* /** @@ -20,7 +19,7 @@ import kotlinx.android.synthetic.main.activity_screen.* * desc : demo about RomUtils * ``` */ -class ScreenActivity : BaseTitleActivity() { +class ScreenActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt index 9748a095f9..d09582cda3 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt @@ -4,11 +4,10 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.SDCardUtils import com.blankj.utilcode.util.SpanUtils -import kotlinx.android.synthetic.main.activity_sdcard.* /** * ``` @@ -18,7 +17,7 @@ import kotlinx.android.synthetic.main.activity_sdcard.* * desc : demo about SDCardUtils * ``` */ -class SDCardActivity : BaseTitleActivity() { +class SDCardActivity : CommonTitleActivity() { companion object { fun start(context: Context) { 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..1114e03d0e 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 @@ -9,13 +9,12 @@ import android.text.SpannableStringBuilder import android.view.View import android.view.ViewGroup import android.widget.TextView -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.SnackbarUtils import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.ToastUtils -import kotlinx.android.synthetic.main.activity_snackbar.* /** * ``` @@ -25,7 +24,7 @@ import kotlinx.android.synthetic.main.activity_snackbar.* * desc : demo about SnackbarUtils * ``` */ -class SnackbarActivity : BaseTitleActivity() { +class SnackbarActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt index 6f28ea46c1..7227ba6443 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt @@ -4,10 +4,9 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.SPStaticUtils -import kotlinx.android.synthetic.main.activity_spstatic.* /** * ``` @@ -17,7 +16,7 @@ import kotlinx.android.synthetic.main.activity_spstatic.* * desc : demo about SPUtils * ``` */ -class SPStaticActivity : BaseTitleActivity() { +class SPStaticActivity : CommonTitleActivity() { companion object { fun start(context: Context) { 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..8659a440b6 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 @@ -14,11 +14,10 @@ import android.text.style.ClickableSpan import android.text.style.UpdateAppearance import android.view.View import android.view.animation.LinearInterpolator -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity 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.* /** * ``` @@ -28,7 +27,7 @@ import kotlinx.android.synthetic.main.activity_span.* * desc : demo about SpanUtils * ``` */ -class SpanActivity : BaseTitleActivity() { +class SpanActivity : CommonTitleActivity() { companion object { fun start(context: Context) { 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..5a9c82a7bb 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 @@ -7,12 +7,11 @@ import android.os.Bundle import android.support.v4.content.ContextCompat import android.view.Gravity import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.DialogHelper import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.ToastUtils -import kotlinx.android.synthetic.main.activity_toast.* /** * ``` @@ -22,7 +21,7 @@ import kotlinx.android.synthetic.main.activity_toast.* * desc : demo about ToastUtils * ``` */ -class ToastActivity : BaseTitleActivity() { +class ToastActivity : CommonTitleActivity() { companion object { fun start(context: Context) { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt index 539d6994c0..d06748f898 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt @@ -4,10 +4,9 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.blankj.lib.base.BaseTitleActivity +import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.VibrateUtils -import kotlinx.android.synthetic.main.activity_vibrate.* /** * ``` @@ -17,7 +16,7 @@ import kotlinx.android.synthetic.main.activity_vibrate.* * desc : demo about VibrateUtils * ``` */ -class VibrateActivity : BaseTitleActivity() { +class VibrateActivity : CommonTitleActivity() { companion object { fun start(context: Context) { From 208aee9a37827e062f6429bbe8de0557d42719c7 Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Wed, 5 Jun 2019 03:22:35 +0800 Subject: [PATCH 008/207] see 06/05 log --- .gitignore | 1 + .travis.yml | 2 +- .../main/java/com/blankj/bus/BusPlugin.groovy | 1 - .../main/java/com/blankj/bus/BusScan.groovy | 6 +- .../com/blankj/bus/BusTransformAsm.groovy | 8 +- gradle.properties | 6 - gradle/config/config.gradle | 2 +- gradle/config/configApp.gradle | 2 +- gradle/util/utils.gradle | 2 +- .../pkg/src/main/res/layout/activity_main.xml | 3 +- launcher/pkg/src/main/res/values/strings.xml | 3 +- .../com/blankj/lib/base/BaseApplication.java | 6 +- .../com/blankj/lib/base/BaseFragment.java | 4 +- .../main/res/drawable/base_sel_button_bg.xml | 8 +- .../res/layout/common_activity_drawer.xml | 3 +- .../common_activity_drawer_nav_header.xml | 3 +- .../main/res/layout/common_activity_title.xml | 3 +- .../common_activity_title_stub_no_scroll.xml | 3 +- .../common_activity_title_stub_scroll.xml | 3 +- .../com/blankj/subutil/util/http/Headers.java | 1 - .../src/main/res/layout/activity_location.xml | 3 +- .../src/main/res/layout/activity_pinyin.xml | 3 +- .../com/blankj/utilcode/util/AppUtils.java | 12 +- .../com/blankj/utilcode/util/BaseTest.java | 4 +- .../utilcode/util/EncryptUtilsTest.java | 218 ++++++------------ .../pkg/feature/image/ImageActivity.kt | 2 +- .../pkg/feature/screen/ScreenActivity.kt | 2 +- .../src/main/res/anim/slide_in_bottom_200.xml | 3 +- .../main/res/anim/slide_out_bottom_200.xml | 3 +- .../src/main/res/layout/activity_activity.xml | 3 +- .../main/res/layout/activity_activity_sub.xml | 3 +- .../main/res/layout/activity_adaptscreen.xml | 3 +- .../res/layout/activity_adaptscreen_close.xml | 3 +- .../layout/activity_adaptscreen_height.xml | 3 +- .../res/layout/activity_adaptscreen_width.xml | 3 +- .../pkg/src/main/res/layout/activity_app.xml | 3 +- .../pkg/src/main/res/layout/activity_bar.xml | 3 +- .../src/main/res/layout/activity_bar_nav.xml | 3 +- .../res/layout/activity_bar_notification.xml | 3 +- .../main/res/layout/activity_bar_status.xml | 3 +- .../res/layout/activity_bar_status_alpha.xml | 3 +- .../res/layout/activity_bar_status_color.xml | 3 +- .../res/layout/activity_bar_status_drawer.xml | 3 +- .../layout/activity_bar_status_fragment.xml | 3 +- .../layout/activity_bar_status_image_view.xml | 3 +- .../layout/activity_bar_status_swipe_back.xml | 3 +- .../main/res/layout/activity_brightness.xml | 3 +- .../pkg/src/main/res/layout/activity_bus.xml | 3 +- .../main/res/layout/activity_bus_remote.xml | 3 +- .../src/main/res/layout/activity_clean.xml | 3 +- .../src/main/res/layout/activity_device.xml | 3 +- .../main/res/layout/activity_flashlight.xml | 3 +- .../src/main/res/layout/activity_fragment.xml | 3 +- .../src/main/res/layout/activity_image.xml | 3 +- .../src/main/res/layout/activity_keyboard.xml | 3 +- .../pkg/src/main/res/layout/activity_log.xml | 3 +- .../src/main/res/layout/activity_metadata.xml | 3 +- .../src/main/res/layout/activity_network.xml | 3 +- .../pkg/src/main/res/layout/activity_path.xml | 3 +- .../main/res/layout/activity_permission.xml | 3 +- .../src/main/res/layout/activity_phone.xml | 3 +- .../src/main/res/layout/activity_process.xml | 3 +- .../src/main/res/layout/activity_reflect.xml | 3 +- .../src/main/res/layout/activity_resource.xml | 3 +- .../pkg/src/main/res/layout/activity_rom.xml | 3 +- .../src/main/res/layout/activity_screen.xml | 3 +- .../src/main/res/layout/activity_sdcard.xml | 3 +- .../src/main/res/layout/activity_snackbar.xml | 3 +- .../pkg/src/main/res/layout/activity_span.xml | 3 +- .../src/main/res/layout/activity_spstatic.xml | 3 +- .../src/main/res/layout/activity_toast.xml | 3 +- .../main/res/layout/activity_util_core.xml | 3 +- .../src/main/res/layout/activity_vibrate.xml | 3 +- .../pkg/src/main/res/layout/dialog_screen.xml | 3 +- .../res/layout/fragment_bar_status_alpha.xml | 3 +- .../res/layout/fragment_bar_status_color.xml | 3 +- .../res/layout/fragment_bar_status_custom.xml | 3 +- .../layout/fragment_bar_status_image_view.xml | 3 +- .../src/main/res/layout/fragment_child.xml | 3 +- .../main/res/layout/fragment_container.xml | 3 +- .../pkg/src/main/res/layout/fragment_root.xml | 6 +- .../pkg/src/main/res/layout/item_image.xml | 3 +- .../src/main/res/layout/item_image_header.xml | 3 +- .../src/main/res/layout/snackbar_custom.xml | 3 +- .../pkg/src/main/res/layout/toast_custom.xml | 3 +- 85 files changed, 166 insertions(+), 325 deletions(-) diff --git a/.gitignore b/.gitignore index b9d244be48..193619553c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ .externalNativeBuild /apk *.phrof +/busMaven diff --git a/.travis.yml b/.travis.yml index 5e8e014291..20b411b78b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ android: email: false before_install: - - yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;26.0.2" + - yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;26.0.2" script: - ./gradlew build connectedCheck diff --git a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusPlugin.groovy b/bus-gradle-plugin/src/main/java/com/blankj/bus/BusPlugin.groovy index 72584b9037..9ab59a045f 100755 --- a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusPlugin.groovy +++ b/bus-gradle-plugin/src/main/java/com/blankj/bus/BusPlugin.groovy @@ -3,7 +3,6 @@ package com.blankj.bus import com.android.build.gradle.AppExtension import com.android.build.gradle.AppPlugin import com.blankj.util.LogUtils - import org.gradle.api.Plugin import org.gradle.api.Project diff --git a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy b/bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy index b815f7965f..5500f81e3a 100755 --- a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy +++ b/bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy @@ -90,9 +90,9 @@ class BusScan { String temp = longMethodName.substring(0, i); int j = temp.lastIndexOf('.'); String sign = method.getReturnType().getName() + ' ' + - longMethodName.substring(0, j) + - ".INSTANCE" + - longMethodName.substring(j); + longMethodName.substring(0, j) + + ".INSTANCE" + + longMethodName.substring(j); busStaticMap.put(name, sign); return true } catch (NotFoundException ignore) { diff --git a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransformAsm.groovy b/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransformAsm.groovy index 97cd565c37..f7578a4db3 100755 --- a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransformAsm.groovy +++ b/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransformAsm.groovy @@ -52,7 +52,7 @@ class BusTransformAsm extends Transform { def referencedInputs = transformInvocation.getReferencedInputs() def isIncremental = transformInvocation.isIncremental() - if(!isIncremental) { + if (!isIncremental) { outputProvider.deleteAll(); } @@ -74,8 +74,8 @@ class BusTransformAsm extends Transform { LogUtils.l("scan dir: $dir [$dest]") - if(isIncremental) { - switch(status) { + if (isIncremental) { + switch (status) { case Status.NOTCHANGED: break; case Status.ADDED: @@ -90,7 +90,7 @@ class BusTransformAsm extends Transform { } } else { //Forgive me!, Some project will store 3rd-party aar for serveral copies in dexbuilder folder,,unknown issue. - if(inDuplcatedClassSafeMode() & !isIncremental && !flagForCleanDexBuilderFolder) { + if (inDuplcatedClassSafeMode() & !isIncremental && !flagForCleanDexBuilderFolder) { cleanDexBuilderFolder(dest); flagForCleanDexBuilderFolder = true; } diff --git a/gradle.properties b/gradle.properties index 13c65e97f8..975e987b66 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,24 +1,18 @@ # Project-wide Gradle settings. - # IDE (e.g. Android Studio) users: # Gradle settings configured through the IDE *will override* # any settings specified in this file. - # For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html - # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. # Default value: -Xmx10248m -XX:MaxPermSize=256m # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 - # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # 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 - org.gradle.jvmargs=-Xmx8192m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -XX:-UseGCOverheadLimit -Dfile.encoding=UTF-8 org.gradle.daemon=true org.gradle.configureondemand=true diff --git a/gradle/config/config.gradle b/gradle/config/config.gradle index 0d952bc224..160b1649bb 100644 --- a/gradle/config/config.gradle +++ b/gradle/config/config.gradle @@ -25,7 +25,7 @@ gradle.ext { plugin_bintray : new DepConfig("com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4"),// 上传到 bintray plugin_traute : new DepConfig("tech.harmonysoft:traute-gradle:1.1.10"),// 注解转非空判断 - plugin_bus : new DepConfig(true/*是否本地调试*/, "", "com.blankj:bus-gradle-plugin:1.8", true), + plugin_bus : new DepConfig(false/*是否本地调试*/, "", "com.blankj:bus-gradle-plugin:1.8", true), buildSrc : new DepConfig(":buildSrc"), bus_gradle_plugin : new DepConfig(":bus-gradle-plugin", true), diff --git a/gradle/config/configApp.gradle b/gradle/config/configApp.gradle index bd8762b6ef..dd49160df7 100644 --- a/gradle/config/configApp.gradle +++ b/gradle/config/configApp.gradle @@ -59,7 +59,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/gradle/util/utils.gradle b/gradle/util/utils.gradle index 0f12c751b4..24d836f930 100644 --- a/gradle/util/utils.gradle +++ b/gradle/util/utils.gradle @@ -9,7 +9,7 @@ def log(Object content) { } gradle.ext.Utils = [ - log : this.&log, + log : this.&log, object2String: LogFormatter.&object2String, ] diff --git a/launcher/pkg/src/main/res/layout/activity_main.xml b/launcher/pkg/src/main/res/layout/activity_main.xml index 3b31dafe32..9d757f9ef8 100644 --- a/launcher/pkg/src/main/res/layout/activity_main.xml +++ b/launcher/pkg/src/main/res/layout/activity_main.xml @@ -1,6 +1,5 @@ - diff --git a/launcher/pkg/src/main/res/values/strings.xml b/launcher/pkg/src/main/res/values/strings.xml index 8542005550..7abc06d3ba 100644 --- a/launcher/pkg/src/main/res/values/strings.xml +++ b/launcher/pkg/src/main/res/values/strings.xml @@ -1,2 +1 @@ - - + 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 5a7267216e..9af095bc4f 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 @@ -3,7 +3,11 @@ import android.app.Application; import android.content.Context; import android.support.multidex.MultiDex; -import com.blankj.utilcode.util.*; + +import com.blankj.utilcode.util.AppUtils; +import com.blankj.utilcode.util.CrashUtils; +import com.blankj.utilcode.util.LogUtils; +import com.blankj.utilcode.util.ProcessUtils; import com.squareup.leakcanary.LeakCanary; import java.util.ArrayList; 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..85416a13fe 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 @@ -31,9 +31,9 @@ public abstract class BaseFragment extends Fragment private static final String TAG = "BaseFragment"; private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN"; - protected Activity mActivity; + protected Activity mActivity; protected LayoutInflater mInflater; - protected View mContentView; + protected View mContentView; private long lastClick = 0; diff --git a/lib/common/src/main/res/drawable/base_sel_button_bg.xml b/lib/common/src/main/res/drawable/base_sel_button_bg.xml index a277d915cc..301be04998 100644 --- a/lib/common/src/main/res/drawable/base_sel_button_bg.xml +++ b/lib/common/src/main/res/drawable/base_sel_button_bg.xml @@ -3,9 +3,7 @@ - + @@ -13,9 +11,7 @@ - + diff --git a/lib/common/src/main/res/layout/common_activity_drawer.xml b/lib/common/src/main/res/layout/common_activity_drawer.xml index 8dffa243e4..0366111f24 100644 --- a/lib/common/src/main/res/layout/common_activity_drawer.xml +++ b/lib/common/src/main/res/layout/common_activity_drawer.xml @@ -1,6 +1,5 @@ - - diff --git a/lib/common/src/main/res/layout/common_activity_title.xml b/lib/common/src/main/res/layout/common_activity_title.xml index 7e91f07a01..644b6abc9f 100644 --- a/lib/common/src/main/res/layout/common_activity_title.xml +++ b/lib/common/src/main/res/layout/common_activity_title.xml @@ -1,6 +1,5 @@ - - diff --git a/lib/common/src/main/res/layout/common_activity_title_stub_scroll.xml b/lib/common/src/main/res/layout/common_activity_title_stub_scroll.xml index 96f5e09d49..6ab1978079 100644 --- a/lib/common/src/main/res/layout/common_activity_title_stub_scroll.xml +++ b/lib/common/src/main/res/layout/common_activity_title_stub_scroll.xml @@ -1,6 +1,5 @@ -> header = new HashMap<>(); - } diff --git a/subutil/pkg/src/main/res/layout/activity_location.xml b/subutil/pkg/src/main/res/layout/activity_location.xml index 4e50662802..5534245b4d 100755 --- a/subutil/pkg/src/main/res/layout/activity_location.xml +++ b/subutil/pkg/src/main/res/layout/activity_location.xml @@ -1,6 +1,5 @@ - - { String name; - int age; - int time; + int age; + int time; public Person(String name) { this.name = name; diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java index 980bab3119..ba1a271419 100644 --- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java +++ b/utilcode/lib/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java @@ -14,6 +14,7 @@ import java.util.Arrays; import static com.blankj.utilcode.util.TestConfig.PATH_ENCRYPT; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -38,11 +39,9 @@ public void encryptMD2() { blankjMD2, EncryptUtils.encryptMD2ToString("blankj".getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjMD2), - EncryptUtils.encryptMD2("blankj".getBytes()) - ) + assertArrayEquals( + hexString2Bytes(blankjMD2), + EncryptUtils.encryptMD2("blankj".getBytes()) ); } @@ -57,11 +56,9 @@ public void encryptMD5() { blankjMD5, EncryptUtils.encryptMD5ToString("blankj".getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjMD5), - EncryptUtils.encryptMD5("blankj".getBytes()) - ) + assertArrayEquals( + hexString2Bytes(blankjMD5), + EncryptUtils.encryptMD5("blankj".getBytes()) ); } @@ -375,73 +372,33 @@ public void decryptDES() { @Test public void encrypt3DES() { - assertTrue( - Arrays.equals( - bytesResDES3, - EncryptUtils.encrypt3DES( - bytesDataDES3, - bytesKeyDES3, - "DESede/ECB/NoPadding", - null - ) - ) + assertArrayEquals( + bytesResDES3, + EncryptUtils.encrypt3DES(bytesDataDES3, bytesKeyDES3, "DESede/ECB/NoPadding", null) ); assertEquals( res3DES, - EncryptUtils.encrypt3DES2HexString( - bytesDataDES3, - bytesKeyDES3, - "DESede/ECB/NoPadding", - null - ) + EncryptUtils.encrypt3DES2HexString(bytesDataDES3, bytesKeyDES3, "DESede/ECB/NoPadding", null) ); - assertTrue( - Arrays.equals( - base64Encode(bytesResDES3), - EncryptUtils.encrypt3DES2Base64( - bytesDataDES3, - bytesKeyDES3, - "DESede/ECB/NoPadding", - null - ) - ) + assertArrayEquals( + base64Encode(bytesResDES3), + EncryptUtils.encrypt3DES2Base64(bytesDataDES3, bytesKeyDES3, "DESede/ECB/NoPadding", null) ); } @Test public void decrypt3DES() { - assertTrue( - Arrays.equals( - bytesDataDES3, - EncryptUtils.decrypt3DES( - bytesResDES3, - bytesKeyDES3, - "DESede/ECB/NoPadding", - null - ) - ) + assertArrayEquals( + bytesDataDES3, + EncryptUtils.decrypt3DES(bytesResDES3, bytesKeyDES3, "DESede/ECB/NoPadding", null) ); - assertTrue( - Arrays.equals( - bytesDataDES3, - EncryptUtils.decryptHexString3DES( - res3DES, - bytesKeyDES3, - "DESede/ECB/NoPadding", - null - ) - ) + assertArrayEquals( + bytesDataDES3, + EncryptUtils.decryptHexString3DES(res3DES, bytesKeyDES3, "DESede/ECB/NoPadding", null) ); - assertTrue( - Arrays.equals( - bytesDataDES3, - EncryptUtils.decryptBase64_3DES( - base64Encode(bytesResDES3), - bytesKeyDES3, - "DESede/ECB/NoPadding", - null - ) - ) + assertArrayEquals( + bytesDataDES3, + EncryptUtils.decryptBase64_3DES(base64Encode(bytesResDES3), bytesKeyDES3, "DESede/ECB/NoPadding", null) ); } @@ -454,68 +411,32 @@ public void decrypt3DES() { @Test public void encryptAES() { - assertTrue( - Arrays.equals( - bytesResAES, - EncryptUtils.encryptAES( - bytesDataAES, - bytesKeyAES, - "AES/ECB/NoPadding", - null - ) - ) + assertArrayEquals( + bytesResAES, + EncryptUtils.encryptAES(bytesDataAES, bytesKeyAES, "AES/ECB/NoPadding", null) ); assertEquals( resAES, - EncryptUtils.encryptAES2HexString( - bytesDataAES, - bytesKeyAES, - "AES/ECB/NoPadding", - null - ) + EncryptUtils.encryptAES2HexString(bytesDataAES, bytesKeyAES, "AES/ECB/NoPadding", null) ); - assertTrue( - Arrays.equals( - base64Encode(bytesResAES), - EncryptUtils.encryptAES2Base64( - bytesDataAES, - bytesKeyAES, - "AES/ECB/NoPadding", - null - ) - ) + assertArrayEquals( + base64Encode(bytesResAES), + EncryptUtils.encryptAES2Base64(bytesDataAES, bytesKeyAES, "AES/ECB/NoPadding", null) ); } @Test public void decryptAES() { - assertTrue( - Arrays.equals( - bytesDataAES, - EncryptUtils.decryptAES(bytesResAES, bytesKeyAES, "AES/ECB/NoPadding", null) - ) + assertArrayEquals( + bytesDataAES, + EncryptUtils.decryptAES(bytesResAES, bytesKeyAES, "AES/ECB/NoPadding", null) ); - assertTrue( - Arrays.equals( - bytesDataAES, - EncryptUtils.decryptHexStringAES( - resAES, - bytesKeyAES, - "AES/ECB/NoPadding", - null - ) - ) + assertArrayEquals( + bytesDataAES, + EncryptUtils.decryptHexStringAES(resAES, bytesKeyAES, "AES/ECB/NoPadding", null) ); - assertTrue( - Arrays.equals( - bytesDataAES, - EncryptUtils.decryptBase64AES( - base64Encode(bytesResAES), - bytesKeyAES, - "AES/ECB/NoPadding", - null - ) - ) + assertArrayEquals(bytesDataAES, + EncryptUtils.decryptBase64AES(base64Encode(bytesResAES), bytesKeyAES, "AES/ECB/NoPadding", null) ); } @@ -530,22 +451,17 @@ public void encryptDecryptRSA() { } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } - assertTrue( - Arrays.equals( - EncryptUtils.decryptRSA( - EncryptUtils.encryptRSA( - dataRSA.getBytes(), - base64Decode(publicKey.getBytes()), - true, - "RSA/ECB/PKCS1Padding" - ), - base64Decode(privateKey.getBytes()), - false, - "RSA/ECB/PKCS1Padding" - ), - dataRSA.getBytes() - ) - ); + assertArrayEquals(EncryptUtils.decryptRSA( + EncryptUtils.encryptRSA( + dataRSA.getBytes(), + base64Decode(publicKey.getBytes()), + true, + "RSA/ECB/PKCS1Padding" + ), + base64Decode(privateKey.getBytes()), + false, + "RSA/ECB/PKCS1Padding" + ), dataRSA.getBytes()); } private static byte[] base64Encode(final byte[] input) { @@ -590,31 +506,31 @@ private static int hex2Int(final char hexChar) { throw new IllegalArgumentException(); } } - - private static void genKeyPair() throws NoSuchAlgorithmException { - + + private static void genKeyPair() throws NoSuchAlgorithmException { + SecureRandom secureRandom = new SecureRandom(); - + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); - + keyPairGenerator.initialize(1024, secureRandom); KeyPair keyPair = keyPairGenerator.generateKeyPair(); - + Key publicKey = keyPair.getPublic(); - + Key privateKey = keyPair.getPrivate(); - - byte[] publicKeyBytes = publicKey.getEncoded(); - byte[] privateKeyBytes = privateKey.getEncoded(); - + + byte[] publicKeyBytes = publicKey.getEncoded(); + byte[] privateKeyBytes = privateKey.getEncoded(); + String publicKeyBase64 = EncodeUtils.base64Encode2String(publicKeyBytes); String privateKeyBase64 = EncodeUtils.base64Encode2String(privateKeyBytes); - - System.out.println("publicKeyBase64.length():" + publicKeyBase64.length()); - System.out.println("publicKeyBase64:" + publicKeyBase64); - - System.out.println("privateKeyBase64.length():" + privateKeyBase64.length()); - System.out.println("privateKeyBase64:" + privateKeyBase64); - } + + System.out.println("publicKeyBase64.length():" + publicKeyBase64.length()); + System.out.println("publicKeyBase64:" + publicKeyBase64); + + System.out.println("privateKeyBase64.length():" + privateKeyBase64.length()); + System.out.println("privateKeyBase64:" + privateKeyBase64); + } } \ No newline at end of file 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 7e622043a3..14f3344b02 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 @@ -12,10 +12,10 @@ import android.view.View import android.widget.Button import android.widget.ImageView import android.widget.TextView -import com.blankj.lib.common.CommonTaskActivity import com.blankj.lib.base.rv.BaseAdapter import com.blankj.lib.base.rv.BaseCell import com.blankj.lib.base.rv.BaseViewHolder +import com.blankj.lib.common.CommonTaskActivity import com.blankj.utilcode.pkg.Config import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.ImageUtils diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt index de8075bb47..27f39848e2 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt @@ -87,7 +87,7 @@ class ScreenActivity : CommonTitleActivity() { R.id.screenScreenshotBtn -> DialogHelper.showScreenshotDialog(ScreenUtils.screenShot(this)) R.id.screenSetSleepDurationBtn -> ScreenUtils.setSleepDuration(100000) } - Utils.runOnUiThreadDelayed(object: Runnable { + Utils.runOnUiThreadDelayed(object : Runnable { override fun run() { updateAboutScreen() } diff --git a/utilcode/pkg/src/main/res/anim/slide_in_bottom_200.xml b/utilcode/pkg/src/main/res/anim/slide_in_bottom_200.xml index 30a22b751f..a3012c2433 100755 --- a/utilcode/pkg/src/main/res/anim/slide_in_bottom_200.xml +++ b/utilcode/pkg/src/main/res/anim/slide_in_bottom_200.xml @@ -1,6 +1,5 @@ - \ No newline at end of file diff --git a/utilcode/pkg/src/main/res/anim/slide_out_bottom_200.xml b/utilcode/pkg/src/main/res/anim/slide_out_bottom_200.xml index 0a12c38230..758f8def70 100755 --- a/utilcode/pkg/src/main/res/anim/slide_out_bottom_200.xml +++ b/utilcode/pkg/src/main/res/anim/slide_out_bottom_200.xml @@ -1,6 +1,5 @@ - \ No newline at end of file diff --git a/utilcode/pkg/src/main/res/layout/activity_activity.xml b/utilcode/pkg/src/main/res/layout/activity_activity.xml index 0ac660d12a..87c610e5e6 100644 --- a/utilcode/pkg/src/main/res/layout/activity_activity.xml +++ b/utilcode/pkg/src/main/res/layout/activity_activity.xml @@ -1,6 +1,5 @@ - - - - - - - - - - - - - - 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..1e9661db02 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 @@ -1,6 +1,5 @@ - - diff --git a/utilcode/pkg/src/main/res/layout/activity_bar_status_swipe_back.xml b/utilcode/pkg/src/main/res/layout/activity_bar_status_swipe_back.xml index 652aec932f..e01fac9b3d 100644 --- a/utilcode/pkg/src/main/res/layout/activity_bar_status_swipe_back.xml +++ b/utilcode/pkg/src/main/res/layout/activity_bar_status_swipe_back.xml @@ -1,6 +1,5 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/utilcode/pkg/src/main/res/layout/fragment_bar_status_custom.xml b/utilcode/pkg/src/main/res/layout/fragment_bar_status_custom.xml index a2aadd7e51..33a8f1e431 100644 --- a/utilcode/pkg/src/main/res/layout/fragment_bar_status_custom.xml +++ b/utilcode/pkg/src/main/res/layout/fragment_bar_status_custom.xml @@ -1,6 +1,5 @@ - diff --git a/utilcode/pkg/src/main/res/layout/fragment_bar_status_image_view.xml b/utilcode/pkg/src/main/res/layout/fragment_bar_status_image_view.xml index ae66a041f0..6d3cf94d6d 100644 --- a/utilcode/pkg/src/main/res/layout/fragment_bar_status_image_view.xml +++ b/utilcode/pkg/src/main/res/layout/fragment_bar_status_image_view.xml @@ -1,6 +1,5 @@ - diff --git a/utilcode/pkg/src/main/res/layout/fragment_child.xml b/utilcode/pkg/src/main/res/layout/fragment_child.xml index a22aeed019..065bd26b12 100644 --- a/utilcode/pkg/src/main/res/layout/fragment_child.xml +++ b/utilcode/pkg/src/main/res/layout/fragment_child.xml @@ -1,6 +1,5 @@ - - - @@ -18,8 +17,7 @@ - + android:layout_height="wrap_content"> diff --git a/utilcode/pkg/src/main/res/layout/item_image.xml b/utilcode/pkg/src/main/res/layout/item_image.xml index 018335ce4f..4ecac1d603 100644 --- a/utilcode/pkg/src/main/res/layout/item_image.xml +++ b/utilcode/pkg/src/main/res/layout/item_image.xml @@ -1,6 +1,5 @@ - diff --git a/utilcode/pkg/src/main/res/layout/item_image_header.xml b/utilcode/pkg/src/main/res/layout/item_image_header.xml index 39b93e8c02..6f1874349b 100644 --- a/utilcode/pkg/src/main/res/layout/item_image_header.xml +++ b/utilcode/pkg/src/main/res/layout/item_image_header.xml @@ -1,6 +1,5 @@ - diff --git a/utilcode/pkg/src/main/res/layout/snackbar_custom.xml b/utilcode/pkg/src/main/res/layout/snackbar_custom.xml index 842e154230..10dbc26c7f 100644 --- a/utilcode/pkg/src/main/res/layout/snackbar_custom.xml +++ b/utilcode/pkg/src/main/res/layout/snackbar_custom.xml @@ -1,6 +1,5 @@ - - Date: Wed, 5 Jun 2019 03:27:29 +0800 Subject: [PATCH 009/207] see 06/05 log --- .../com/blankj/utilcode/util/BaseTest.java | 71 ++++---- .../utilcode/util/EncryptUtilsTest.java | 170 ++++++------------ 2 files changed, 88 insertions(+), 153 deletions(-) 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 4c38a6251c..3613be05e5 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 @@ -10,7 +10,6 @@ import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowLog; -import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; /** @@ -38,41 +37,41 @@ public void execute(@NonNull Runnable command) { @Test public void test() throws Exception { - final CountDownLatch countDownLatch = new CountDownLatch(1); - for (int i = 0; i < 100; i++) { - final int finalI = i; - ThreadUtils.Task task = new ThreadUtils.Task() { - - @Override - public Void doInBackground() throws Throwable { - for (int j = 0; j < 10000; j++) { - Thread.sleep(100); - System.out.println(j); - } - return null; - } - - @Override - public void onSuccess(Void result) { - System.out.println(finalI + Thread.currentThread().getName()); - } - - @Override - public void onCancel() { - System.out.println(finalI + "onCancel"); - } - - @Override - public void onFail(Throwable t) { - System.out.println(finalI + "onFail" + t); - } - }; - ThreadUtils.executeBySingle(task); - Thread.sleep(100); - task.cancel(); - } - countDownLatch.countDown(); - countDownLatch.await(); +// final CountDownLatch countDownLatch = new CountDownLatch(1); +// for (int i = 0; i < 100; i++) { +// final int finalI = i; +// ThreadUtils.Task task = new ThreadUtils.Task() { +// +// @Override +// public Void doInBackground() throws Throwable { +// for (int j = 0; j < 10000; j++) { +// Thread.sleep(100); +// System.out.println(j); +// } +// return null; +// } +// +// @Override +// public void onSuccess(Void result) { +// System.out.println(finalI + Thread.currentThread().getName()); +// } +// +// @Override +// public void onCancel() { +// System.out.println(finalI + "onCancel"); +// } +// +// @Override +// public void onFail(Throwable t) { +// System.out.println(finalI + "onFail" + t); +// } +// }; +// ThreadUtils.executeBySingle(task); +// Thread.sleep(100); +// task.cancel(); +// } +// countDownLatch.countDown(); +// countDownLatch.await(); // final Scanner scanner = new Scanner(System.in); diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java index ba1a271419..b18d692573 100644 --- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java +++ b/utilcode/lib/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java @@ -11,12 +11,10 @@ import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; -import java.util.Arrays; import static com.blankj.utilcode.util.TestConfig.PATH_ENCRYPT; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; /** @@ -82,11 +80,9 @@ public void encryptSHA1() { blankjSHA1, EncryptUtils.encryptSHA1ToString("blankj".getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjSHA1), - EncryptUtils.encryptSHA1("blankj".getBytes()) - ) + assertArrayEquals( + hexString2Bytes(blankjSHA1), + EncryptUtils.encryptSHA1("blankj".getBytes()) ); } @@ -101,11 +97,9 @@ public void encryptSHA224() { blankjSHA224, EncryptUtils.encryptSHA224ToString("blankj".getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjSHA224), - EncryptUtils.encryptSHA224("blankj".getBytes()) - ) + assertArrayEquals( + hexString2Bytes(blankjSHA224), + EncryptUtils.encryptSHA224("blankj".getBytes()) ); } @@ -120,12 +114,10 @@ public void encryptSHA256() { blankjSHA256, EncryptUtils.encryptSHA256ToString("blankj".getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjSHA256), - EncryptUtils.encryptSHA256("blankj".getBytes()) - ) - ); + assertArrayEquals( + hexString2Bytes(blankjSHA256), + EncryptUtils.encryptSHA256("blankj".getBytes())); + } @Test @@ -139,11 +131,9 @@ public void encryptSHA384() { blankjSHA384, EncryptUtils.encryptSHA384ToString("blankj".getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjSHA384), - EncryptUtils.encryptSHA384("blankj".getBytes()) - ) + assertArrayEquals( + hexString2Bytes(blankjSHA384), + EncryptUtils.encryptSHA384("blankj".getBytes()) ); } @@ -158,11 +148,9 @@ public void encryptSHA512() { blankjSHA512, EncryptUtils.encryptSHA512ToString("blankj".getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjSHA512), - EncryptUtils.encryptSHA512("blankj".getBytes()) - ) + assertArrayEquals( + hexString2Bytes(blankjSHA512), + EncryptUtils.encryptSHA512("blankj".getBytes()) ); } @@ -181,11 +169,9 @@ public void encryptHmacMD5() { blankjHmacMD5, EncryptUtils.encryptHmacMD5ToString("blankj".getBytes(), blankjHmackey.getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjHmacMD5), - EncryptUtils.encryptHmacMD5("blankj".getBytes(), blankjHmackey.getBytes()) - ) + assertArrayEquals( + hexString2Bytes(blankjHmacMD5), + EncryptUtils.encryptHmacMD5("blankj".getBytes(), blankjHmackey.getBytes()) ); } @@ -200,11 +186,9 @@ public void encryptHmacSHA1() { blankjHmacSHA1, EncryptUtils.encryptHmacSHA1ToString("blankj".getBytes(), blankjHmackey.getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjHmacSHA1), - EncryptUtils.encryptHmacSHA1("blankj".getBytes(), blankjHmackey.getBytes()) - ) + assertArrayEquals( + hexString2Bytes(blankjHmacSHA1), + EncryptUtils.encryptHmacSHA1("blankj".getBytes(), blankjHmackey.getBytes()) ); } @@ -219,11 +203,9 @@ public void encryptHmacSHA224() { blankjHmacSHA224, EncryptUtils.encryptHmacSHA224ToString("blankj".getBytes(), blankjHmackey.getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjHmacSHA224), - EncryptUtils.encryptHmacSHA224("blankj".getBytes(), blankjHmackey.getBytes()) - ) + assertArrayEquals( + hexString2Bytes(blankjHmacSHA224), + EncryptUtils.encryptHmacSHA224("blankj".getBytes(), blankjHmackey.getBytes()) ); } @@ -238,11 +220,9 @@ public void encryptHmacSHA256() { blankjHmacSHA256, EncryptUtils.encryptHmacSHA256ToString("blankj".getBytes(), blankjHmackey.getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjHmacSHA256), - EncryptUtils.encryptHmacSHA256("blankj".getBytes(), blankjHmackey.getBytes()) - ) + assertArrayEquals( + hexString2Bytes(blankjHmacSHA256), + EncryptUtils.encryptHmacSHA256("blankj".getBytes(), blankjHmackey.getBytes()) ); } @@ -257,11 +237,9 @@ public void encryptHmacSHA384() { blankjHmacSHA384, EncryptUtils.encryptHmacSHA384ToString("blankj".getBytes(), blankjHmackey.getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjHmacSHA384), - EncryptUtils.encryptHmacSHA384("blankj".getBytes(), blankjHmackey.getBytes()) - ) + assertArrayEquals( + hexString2Bytes(blankjHmacSHA384), + EncryptUtils.encryptHmacSHA384("blankj".getBytes(), blankjHmackey.getBytes()) ); } @@ -275,11 +253,9 @@ public void encryptHmacSHA512() { blankjHmacSHA512, EncryptUtils.encryptHmacSHA512ToString("blankj".getBytes(), blankjHmackey.getBytes()) ); - assertTrue( - Arrays.equals( - hexString2Bytes(blankjHmacSHA512), - EncryptUtils.encryptHmacSHA512("blankj".getBytes(), blankjHmackey.getBytes()) - ) + assertArrayEquals( + hexString2Bytes(blankjHmacSHA512), + EncryptUtils.encryptHmacSHA512("blankj".getBytes(), blankjHmackey.getBytes()) ); } @@ -293,73 +269,33 @@ public void encryptHmacSHA512() { @Test public void encryptDES() { - assertTrue( - Arrays.equals( - bytesResDES, - EncryptUtils.encryptDES( - bytesDataDES, - bytesKeyDES, - "DES/ECB/NoPadding", - null - ) - ) + assertArrayEquals( + bytesResDES, + EncryptUtils.encryptDES(bytesDataDES, bytesKeyDES, "DES/ECB/NoPadding", null) ); assertEquals( resDES, - EncryptUtils.encryptDES2HexString( - bytesDataDES, - bytesKeyDES, - "DES/ECB/NoPadding", - null - ) - ); - assertTrue( - Arrays.equals( - base64Encode(bytesResDES), - EncryptUtils.encryptDES2Base64( - bytesDataDES, - bytesKeyDES, - "DES/ECB/NoPadding", - null - ) - ) + EncryptUtils.encryptDES2HexString(bytesDataDES, bytesKeyDES, "DES/ECB/NoPadding", null) + ); + assertArrayEquals( + base64Encode(bytesResDES), + EncryptUtils.encryptDES2Base64(bytesDataDES, bytesKeyDES, "DES/ECB/NoPadding", null) ); } @Test public void decryptDES() { - assertTrue( - Arrays.equals( - bytesDataDES, - EncryptUtils.decryptDES( - bytesResDES, - bytesKeyDES, - "DES/ECB/NoPadding", - null - ) - ) - ); - assertTrue( - Arrays.equals( - bytesDataDES, - EncryptUtils.decryptHexStringDES( - resDES, - bytesKeyDES, - "DES/ECB/NoPadding", - null - ) - ) - ); - assertTrue( - Arrays.equals( - bytesDataDES, - EncryptUtils.decryptBase64DES( - base64Encode(bytesResDES), - bytesKeyDES, - "DES/ECB/NoPadding", - null - ) - ) + assertArrayEquals( + bytesDataDES, + EncryptUtils.decryptDES(bytesResDES, bytesKeyDES, "DES/ECB/NoPadding", null) + ); + assertArrayEquals( + bytesDataDES, + EncryptUtils.decryptHexStringDES(resDES, bytesKeyDES, "DES/ECB/NoPadding", null) + ); + assertArrayEquals( + bytesDataDES, + EncryptUtils.decryptBase64DES(base64Encode(bytesResDES), bytesKeyDES, "DES/ECB/NoPadding", null) ); } From 29bff6f01639e4a923b0d83e5231a51f98fe26d9 Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Wed, 5 Jun 2019 20:14:11 +0800 Subject: [PATCH 010/207] see 06/06 log --- .../com/blankj/lib/base/rv/BaseAdapter.java | 7 ++ .../java/com/blankj/lib/base/rv/BaseCell.java | 3 + .../com/blankj/utilcode/util/LogUtils.java | 92 +++++++++---------- .../pkg/feature/image/ImageActivity.kt | 1 + 4 files changed, 53 insertions(+), 50 deletions(-) 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..541e041a67 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 @@ -63,4 +63,11 @@ public final void onBindViewHolder(@NonNull BaseViewHolder holder, int position) public int getItemCount() { return mData.size(); } + + @Override + public void onViewRecycled(@NonNull BaseViewHolder holder) { + super.onViewRecycled(holder); + int position = holder.getAdapterPosition(); + mData.get(position).onViewRecycled(holder, position); + } } 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..fae208d451 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 @@ -28,6 +28,9 @@ static View getViewByType(int type) { public abstract void bind(@NonNull final BaseViewHolder holder, final int position); + public void onViewRecycled(@NonNull final BaseViewHolder holder, final int position) { + } + protected int viewType; public BaseCell(int layoutId) { 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..bd194c0892 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 @@ -102,7 +102,7 @@ public final class LogUtils { private static final String PLACEHOLDER = " "; private static final Config CONFIG = new Config(); - private static final ThreadLocal SDF_THREAD_LOCAL = new ThreadLocal<>(); + private static SimpleDateFormat simpleDateFormat; private static final ExecutorService EXECUTOR = Executors.newSingleThreadExecutor(); @@ -214,7 +214,7 @@ public static void xml(@TYPE final int type, final String tag, final String cont public static void log(final int type, final String tag, final Object... contents) { if (!CONFIG.isLogSwitch()) return; - int type_low = type & 0x0f, type_high = type & 0xf0; + final int type_low = type & 0x0f, type_high = type & 0xf0; if (CONFIG.isLog2ConsoleSwitch() || CONFIG.isLog2FileSwitch() || type_high == FILE) { if (type_low < CONFIG.mConsoleFilter && type_low < CONFIG.mFileFilter) return; final TagHead tagHead = processTagAndHead(tag); @@ -223,7 +223,12 @@ public static void log(final int type, final String tag, final Object... content print2Console(type_low, tagHead.tag, tagHead.consoleHead, body); } if ((CONFIG.isLog2FileSwitch() || type_high == FILE) && type_low >= CONFIG.mFileFilter) { - print2File(type_low, tagHead.tag, tagHead.fileHead + body); + EXECUTOR.execute(new Runnable() { + @Override + public void run() { + print2File(type_low, tagHead.tag, tagHead.fileHead + body); + } + }); } } } @@ -471,45 +476,40 @@ private static void printSingleTagMsg(final int type, final String tag, final St } private static void print2File(final int type, final String tag, final String msg) { - Date now = new Date(System.currentTimeMillis()); - String format = getSdf().format(now); + String format = getSdf().format(new Date()); String date = format.substring(0, 10); String time = format.substring(11); final String fullPath = - CONFIG.getDir() + CONFIG.getFilePrefix() + "-" + date + "-" + CONFIG.getProcessName() + ".txt"; - if (!createOrExistsFile(fullPath)) { + CONFIG.getDir() + CONFIG.getFilePrefix() + "_" + date + "_" + CONFIG.getProcessName() + ".txt"; + if (!createOrExistsFile(fullPath, date)) { Log.e("LogUtils", "create " + fullPath + " failed!"); return; } - StringBuilder sb = new StringBuilder(); - sb.append(time) - .append(T[type - V]) - .append("/") - .append(tag) - .append(msg) - .append(LINE_SEP); - final String content = sb.toString(); + final String content = time + + T[type - V] + + "/" + + tag + + msg + + LINE_SEP; input2File(content, fullPath); } private static SimpleDateFormat getSdf() { - SimpleDateFormat simpleDateFormat = SDF_THREAD_LOCAL.get(); if (simpleDateFormat == null) { - simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); - SDF_THREAD_LOCAL.set(simpleDateFormat); + simpleDateFormat = new SimpleDateFormat("yyyy_MM_dd HH:mm:ss", Locale.getDefault()); } return simpleDateFormat; } - private static boolean createOrExistsFile(final String filePath) { + private static boolean createOrExistsFile(final String filePath, final String date) { File file = new File(filePath); if (file.exists()) return file.isFile(); if (!createOrExistsDir(file.getParentFile())) return false; try { - deleteDueLogs(filePath); + deleteDueLogs(filePath, date); boolean isCreate = file.createNewFile(); if (isCreate) { - printDeviceInfo(filePath); + printDeviceInfo(filePath, date); } return isCreate; } catch (IOException e) { @@ -518,22 +518,20 @@ private static boolean createOrExistsFile(final String filePath) { } } - private static void deleteDueLogs(String filePath) { + private static void deleteDueLogs(final String filePath, final String date) { if (CONFIG.getSaveDays() <= 0) return; File file = new File(filePath); File parentFile = file.getParentFile(); File[] files = parentFile.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { - return name.matches("^" + CONFIG.getFilePrefix() + "-[0-9]{4}-[0-9]{2}-[0-9]{2}-.*\\.txt$"); + return name.matches("^" + CONFIG.getFilePrefix() + "_[0-9]{4}_[0-9]{2}_[0-9]{2}_.*$"); } }); if (files == null || files.length <= 0) return; - final int length = filePath.length(); - final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); + final SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd", Locale.getDefault()); try { - String curDay = findDate(filePath); - long dueMillis = sdf.parse(curDay).getTime() - CONFIG.getSaveDays() * 86400000L; + long dueMillis = sdf.parse(date).getTime() - CONFIG.getSaveDays() * 86400000L; for (final File aFile : files) { String name = aFile.getName(); int l = name.length(); @@ -556,7 +554,7 @@ public void run() { } private static String findDate(String str) { - Pattern pattern = Pattern.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}"); + Pattern pattern = Pattern.compile("[0-9]{4}_[0-9]{2}_[0-9]{2}"); Matcher matcher = pattern.matcher(str); if (matcher.find()) { return matcher.group(); @@ -564,7 +562,7 @@ private static String findDate(String str) { return ""; } - private static void printDeviceInfo(final String filePath) { + private static void printDeviceInfo(final String filePath, final String date) { String versionName = ""; int versionCode = 0; try { @@ -578,9 +576,8 @@ private static void printDeviceInfo(final String filePath) { } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } - String time = filePath.substring(filePath.length() - 14, filePath.length() - 4); final String head = "************* Log Head ****************" + - "\nDate of Log : " + time + + "\nDate of Log : " + date + "\nDevice Manufacturer: " + Build.MANUFACTURER + "\nDevice Model : " + Build.MODEL + "\nAndroid Version : " + Build.VERSION.RELEASE + @@ -607,27 +604,22 @@ private static boolean isSpace(final String s) { private static void input2File(final String input, final String filePath) { if (CONFIG.mFileWriter == null) { - EXECUTOR.execute(new Runnable() { - @Override - public void run() { - BufferedWriter bw = null; - try { - bw = new BufferedWriter(new FileWriter(filePath, true)); - bw.write(input); - } catch (IOException e) { - e.printStackTrace(); - Log.e("LogUtils", "log to " + filePath + " failed!"); - } finally { - try { - if (bw != null) { - bw.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } + BufferedWriter bw = null; + try { + bw = new BufferedWriter(new FileWriter(filePath, true)); + bw.write(input); + } catch (IOException e) { + e.printStackTrace(); + Log.e("LogUtils", "log to " + filePath + " failed!"); + } finally { + try { + if (bw != null) { + bw.close(); } + } catch (IOException e) { + e.printStackTrace(); } - }); + } } else { CONFIG.mFileWriter.write(filePath, input); } 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 14f3344b02..47669da9cd 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 @@ -21,6 +21,7 @@ import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.ImageUtils import com.blankj.utilcode.util.StringUtils import com.blankj.utilcode.util.ToastUtils +import kotlinx.android.synthetic.main.activity_image.* /** * ``` From 99b27911ce7eb52bdee920ff709517d0d531e803 Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Wed, 5 Jun 2019 20:41:40 +0800 Subject: [PATCH 011/207] see 06/06 log --- aaa.txt | 0 ..._2019_06_05_com.blankj.androidutilcode.txt | 410 ++++++++++++++++++ .../pkg/feature/location/LocationActivity.kt | 1 + .../pkg/feature/pinyin/PinyinActivity.kt | 1 + .../com/blankj/utilcode/util/LogUtils.java | 2 +- .../pkg/feature/activity/ActivityActivity.kt | 1 + .../adaptScreen/AdaptScreenActivity.kt | 1 + .../utilcode/pkg/feature/app/AppActivity.kt | 1 + .../utilcode/pkg/feature/bar/BarActivity.kt | 1 + .../pkg/feature/bar/BarNavActivity.kt | 1 + .../feature/bar/BarNotificationActivity.kt | 1 + .../pkg/feature/bar/BarStatusActivity.kt | 1 + .../feature/brightness/BrightnessActivity.kt | 1 + .../utilcode/pkg/feature/bus/BusActivity.kt | 1 + .../pkg/feature/bus/BusRemoteActivity.kt | 1 + .../pkg/feature/clean/CleanActivity.kt | 1 + .../pkg/feature/device/DeviceActivity.kt | 1 + .../feature/flashlight/FlashlightActivity.kt | 1 + .../pkg/feature/keyboard/KeyboardActivity.kt | 1 + .../utilcode/pkg/feature/log/LogActivity.kt | 1 + .../pkg/feature/metaData/MetaDataActivity.kt | 1 + .../pkg/feature/network/NetworkActivity.kt | 1 + .../utilcode/pkg/feature/path/PathActivity.kt | 1 + .../feature/permission/PermissionActivity.kt | 1 + .../pkg/feature/phone/PhoneActivity.kt | 1 + .../pkg/feature/process/ProcessActivity.kt | 1 + .../pkg/feature/reflect/ReflectActivity.kt | 1 + .../pkg/feature/resource/ResourceActivity.kt | 1 + .../utilcode/pkg/feature/rom/RomActivity.kt | 1 + .../pkg/feature/screen/ScreenActivity.kt | 1 + .../pkg/feature/sdcard/SDCardActivity.kt | 1 + .../pkg/feature/snackbar/SnackbarActivity.kt | 1 + .../pkg/feature/spStatic/SPStaticActivity.kt | 1 + .../utilcode/pkg/feature/span/SpanActivity.kt | 1 + .../pkg/feature/toast/ToastActivity.kt | 1 + .../pkg/feature/vibrate/VibrateActivity.kt | 1 + 36 files changed, 444 insertions(+), 1 deletion(-) create mode 100644 aaa.txt create mode 100644 log/util_2019_06_05_com.blankj.androidutilcode.txt diff --git a/aaa.txt b/aaa.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/log/util_2019_06_05_com.blankj.androidutilcode.txt b/log/util_2019_06_05_com.blankj.androidutilcode.txt new file mode 100644 index 0000000000..c348d892b7 --- /dev/null +++ b/log/util_2019_06_05_com.blankj.androidutilcode.txt @@ -0,0 +1,410 @@ +************* Log Head **************** +Date of Log : 2019_06_05 +Device Manufacturer: OnePlus +Device Model : ONEPLUS A6000 +Android Version : 8.1.0 +Android SDK : 27 +App VersionName : 1.24.0 +App VersionCode : 1024000 +************* Log Head **************** + +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.407 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.413 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.414 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.415 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.416 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.418 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.419 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.420 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.421 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.422 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.423 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.423 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.424 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.425 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.425 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.426 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.427 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.428 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.428 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.429 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.431 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.432 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.433 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.433 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.434 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.434 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.435 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.435 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.436 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.436 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.437 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.437 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.438 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.439 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.439 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.440 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.440 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.441 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.441 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.442 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.442 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.443 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.444 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.444 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.445 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.445 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.446 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.446 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.447 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.447 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.448 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.448 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.449 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.449 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.450 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.450 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.451 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.452 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.452 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.453 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.453 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.454 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.454 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.455 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.455 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.456 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.456 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.457 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.457 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.458 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.458 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.459 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.459 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.460 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.460 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.461 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.461 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.462 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.462 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.463 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.463 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.464 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.464 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.465 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.465 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.466 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.466 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.467 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.467 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.467 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.468 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.468 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.469 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.469 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.470 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.470 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.471 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.471 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.471 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.472 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.472 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.473 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.473 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.474 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.474 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.475 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.475 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.476 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.476 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.477 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.477 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.478 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.478 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.479 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.480 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.480 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.481 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.481 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.482 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.482 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.483 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.483 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.484 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.485 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.485 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.486 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.487 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.487 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.488 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.488 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.488 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.489 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.489 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.490 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.490 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.491 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.491 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.492 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.492 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.492 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.493 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.493 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.494 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.494 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.495 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.495 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.495 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.496 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.496 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.497 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.497 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.498 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.498 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.499 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.499 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.499 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.500 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.500 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.501 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.501 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.502 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.502 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.503 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.503 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.503 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.504 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.504 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.505 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.505 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.506 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.506 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.507 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.507 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.507 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.508 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.508 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.509 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.509 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.510 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.510 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.510 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.511 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.511 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.512 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.512 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.513 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.513 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.514 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.514 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.514 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.515 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.515 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.516 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.516 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.517 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.517 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.517 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.518 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file +20:40:24.518 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file +20:40:24.519 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file 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 285e837065..0bba8f7249 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 @@ -11,6 +11,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.subutil.pkg.R import com.blankj.subutil.pkg.helper.PermissionHelper import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_location.* /** * ``` 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 fd09aa1d86..11ff994eca 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 @@ -7,6 +7,7 @@ import android.view.View import com.blankj.lib.common.CommonTitleActivity import com.blankj.subutil.pkg.R import com.blankj.subutil.util.PinyinUtils +import kotlinx.android.synthetic.main.activity_pinyin.* /** * ``` 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 bd194c0892..559e290f96 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 @@ -496,7 +496,7 @@ private static void print2File(final int type, final String tag, final String ms private static SimpleDateFormat getSdf() { if (simpleDateFormat == null) { - simpleDateFormat = new SimpleDateFormat("yyyy_MM_dd HH:mm:ss", Locale.getDefault()); + simpleDateFormat = new SimpleDateFormat("yyyy_MM_dd HH:mm:ss.SSS ", Locale.getDefault()); } return simpleDateFormat; } 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 2ebc8144b5..cf2fc5921d 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 @@ -15,6 +15,7 @@ import com.blankj.utilcode.pkg.feature.CoreUtilActivity import com.blankj.utilcode.util.ActivityUtils import com.blankj.utilcode.util.AppUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_activity.* import java.util.* /** diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt index 1c30cd89da..423f81123c 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt @@ -6,6 +6,7 @@ import android.os.Bundle import android.view.View import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R +import kotlinx.android.synthetic.main.activity_adaptscreen.* class AdaptScreenActivity : CommonTitleActivity() { diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt index 9c629744a9..088ef712f7 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt @@ -9,6 +9,7 @@ import com.blankj.utilcode.pkg.Config import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.PermissionHelper import com.blankj.utilcode.util.* +import kotlinx.android.synthetic.main.activity_app.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt index 3b74b42f8d..0090fa74f9 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt @@ -6,6 +6,7 @@ import android.os.Bundle import android.view.View import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R +import kotlinx.android.synthetic.main.activity_bar.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt index 22bbde911a..1a15e2cb31 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt @@ -10,6 +10,7 @@ import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils import com.blankj.utilcode.util.ColorUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_bar_nav.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt index b9f4635150..b25fcb89d3 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt @@ -8,6 +8,7 @@ import android.view.View import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils +import kotlinx.android.synthetic.main.activity_bar_notification.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt index cf203d4130..a61e799bd5 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt @@ -8,6 +8,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BarUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_bar_status.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt index 671ebb9cfa..4841a5a06d 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt @@ -12,6 +12,7 @@ import com.blankj.utilcode.util.BrightnessUtils import com.blankj.utilcode.util.PermissionUtils import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.ToastUtils +import kotlinx.android.synthetic.main.activity_brightness.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt index c1864b51f4..f934d30e6f 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt @@ -8,6 +8,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BusUtils import com.blankj.utilcode.util.LogUtils +import kotlinx.android.synthetic.main.activity_bus.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt index 629bd18ffb..2f6d296bff 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt @@ -8,6 +8,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.BusUtils import com.blankj.utilcode.util.LogUtils +import kotlinx.android.synthetic.main.activity_bus_remote.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt index 14d0e72138..a0854d63e8 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt @@ -9,6 +9,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.CleanUtils import com.blankj.utilcode.util.SnackbarUtils +import kotlinx.android.synthetic.main.activity_clean.* import java.io.File /** diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt index 91c6d78d20..460272fbc6 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt @@ -9,6 +9,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.DeviceUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_device.* import java.util.* /** diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt index f5072e3c66..923f2f6bb7 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt @@ -10,6 +10,7 @@ import com.blankj.utilcode.pkg.helper.PermissionHelper import com.blankj.utilcode.util.FlashlightUtils import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.ToastUtils +import kotlinx.android.synthetic.main.activity_flashlight.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt index c95d6ed4db..1135adbc8e 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt @@ -9,6 +9,7 @@ import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.DialogHelper import com.blankj.utilcode.util.KeyboardUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_keyboard.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt index aaef033f8b..7164477208 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt @@ -14,6 +14,7 @@ import com.blankj.utilcode.util.AppUtils import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.PathUtils import com.blankj.utilcode.util.StringUtils +import kotlinx.android.synthetic.main.activity_log.* import java.util.* diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt index 8e578945ed..51bee6198a 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt @@ -8,6 +8,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.MetaDataUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_metadata.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt index 83125c86a3..413e5e9a50 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt @@ -11,6 +11,7 @@ import com.blankj.utilcode.util.AppUtils import com.blankj.utilcode.util.NetworkUtils import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.Utils +import kotlinx.android.synthetic.main.activity_network.* import java.util.concurrent.atomic.AtomicInteger /** diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt index 9935d1b148..0b86b61876 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt @@ -8,6 +8,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.PathUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_path.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt index 643ceae4eb..3c71325099 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt @@ -11,6 +11,7 @@ import com.blankj.utilcode.constant.PermissionConstants import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.DialogHelper import com.blankj.utilcode.util.* +import kotlinx.android.synthetic.main.activity_permission.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt index 07d631e375..95d2454928 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt @@ -9,6 +9,7 @@ import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.PermissionHelper import com.blankj.utilcode.util.PhoneUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_phone.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt index 69210b4102..04fda17cf3 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt @@ -8,6 +8,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.ProcessUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_process.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt index 5f54a78d6a..22e5c012ae 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt @@ -8,6 +8,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.ReflectUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_reflect.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt index 0808a6cd28..46c66a02cb 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt @@ -9,6 +9,7 @@ import com.blankj.utilcode.pkg.Config import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.ResourceUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_resource.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt index fc62fefa96..c74896dc76 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt @@ -8,6 +8,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.RomUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_rom.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt index 27f39848e2..ee18438165 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt @@ -9,6 +9,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.DialogHelper import com.blankj.utilcode.util.* +import kotlinx.android.synthetic.main.activity_screen.* /** diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt index d09582cda3..cd1cea2b0a 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt @@ -8,6 +8,7 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.SDCardUtils import com.blankj.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.activity_sdcard.* /** * ``` 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 1114e03d0e..bede1a877d 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 @@ -15,6 +15,7 @@ import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.SnackbarUtils import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.ToastUtils +import kotlinx.android.synthetic.main.activity_snackbar.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt index 7227ba6443..ebafaf005c 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt @@ -7,6 +7,7 @@ import android.view.View import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.SPStaticUtils +import kotlinx.android.synthetic.main.activity_spstatic.* /** * ``` 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 8659a440b6..3200097c4e 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 @@ -18,6 +18,7 @@ import com.blankj.lib.common.CommonTitleActivity 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.* /** * ``` 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 5a9c82a7bb..c23c6a7699 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 @@ -12,6 +12,7 @@ import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.helper.DialogHelper import com.blankj.utilcode.util.SpanUtils import com.blankj.utilcode.util.ToastUtils +import kotlinx.android.synthetic.main.activity_toast.* /** * ``` diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt index d06748f898..79ac5b991b 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt +++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt @@ -7,6 +7,7 @@ import android.view.View import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.util.VibrateUtils +import kotlinx.android.synthetic.main.activity_vibrate.* /** * ``` From e4954f6556ca55b1075eb8009d73d93871c39d51 Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Wed, 5 Jun 2019 20:42:09 +0800 Subject: [PATCH 012/207] see 06/06 log --- aaa.txt | 0 ..._2019_06_05_com.blankj.androidutilcode.txt | 410 ------------------ 2 files changed, 410 deletions(-) delete mode 100644 aaa.txt delete mode 100644 log/util_2019_06_05_com.blankj.androidutilcode.txt diff --git a/aaa.txt b/aaa.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/log/util_2019_06_05_com.blankj.androidutilcode.txt b/log/util_2019_06_05_com.blankj.androidutilcode.txt deleted file mode 100644 index c348d892b7..0000000000 --- a/log/util_2019_06_05_com.blankj.androidutilcode.txt +++ /dev/null @@ -1,410 +0,0 @@ -************* Log Head **************** -Date of Log : 2019_06_05 -Device Manufacturer: OnePlus -Device Model : ONEPLUS A6000 -Android Version : 8.1.0 -Android SDK : 27 -App VersionName : 1.24.0 -App VersionCode : 1024000 -************* Log Head **************** - -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:31:29D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:31:29I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.407 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.413 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.414 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.415 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.416 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.418 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.419 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.420 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.421 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.422 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.423 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.423 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.424 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.425 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.425 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.426 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.427 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.428 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.428 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.429 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.431 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.432 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.433 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.433 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.434 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.434 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.435 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.435 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.436 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.436 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.437 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.437 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.438 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.439 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.439 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.440 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.440 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.441 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.441 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.442 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.442 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.443 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.444 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.444 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.445 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.445 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.446 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.446 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.447 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.447 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.448 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.448 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.449 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.449 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.450 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.450 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.451 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.452 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.452 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.453 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.453 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.454 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.454 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.455 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.455 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.456 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.456 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.457 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.457 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.458 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.458 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.459 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.459 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.460 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.460 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.461 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.461 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.462 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.462 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.463 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.463 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.464 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.464 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.465 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.465 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.466 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.466 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.467 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.467 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.467 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.468 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.468 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.469 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.469 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.470 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.470 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.471 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.471 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.471 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.472 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.472 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.473 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.473 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.474 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.474 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.475 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.475 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.476 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.476 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.477 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.477 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.478 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.478 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.479 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.480 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.480 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.481 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.481 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.482 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.482 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.483 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.483 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.484 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.485 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.485 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.486 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.487 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.487 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.488 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.488 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.488 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.489 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.489 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.490 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.490 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.491 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.491 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.492 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.492 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.492 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.493 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.493 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.494 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.494 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.495 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.495 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.495 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.496 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.496 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.497 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.497 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.498 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.498 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.499 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.499 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.499 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.500 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.500 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.501 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.501 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.502 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.502 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.503 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.503 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.503 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.504 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.504 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.505 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.505 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.506 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.506 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.507 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.507 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.507 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.508 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.508 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.509 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.509 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.510 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.510 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.510 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.511 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.511 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.512 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.512 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.513 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.513 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.514 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.514 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.514 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.515 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.515 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.516 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.516 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.517 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.517 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.517 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.518 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file -20:40:24.518 D/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:222)]: test0 log to file -20:40:24.519 I/LogActivity [main, com.blankj.utilcode.pkg.feature.log.LogActivity.onWidgetClick(LogActivity.kt:223)]: test0 log to file From e5a7822a308ee0e7640c2cdbe1dbc9461251bca4 Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Wed, 5 Jun 2019 20:57:23 +0800 Subject: [PATCH 013/207] see 06/06 log --- gradle.properties | 2 +- gradle/config/config.gradle | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 975e987b66..d008422916 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,5 +15,5 @@ #org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 org.gradle.jvmargs=-Xmx8192m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -XX:-UseGCOverheadLimit -Dfile.encoding=UTF-8 org.gradle.daemon=true -org.gradle.configureondemand=true +#org.gradle.configureondemand=true org.gradle.parallel=true \ No newline at end of file diff --git a/gradle/config/config.gradle b/gradle/config/config.gradle index 160b1649bb..69391b0822 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_000 - versionName = '1.24.0'// E.g. 1.9.72 => 1,009,072 + versionCode = 1_024_001 + versionName = '1.24.1'// E.g. 1.9.72 => 1,009,072 // lib version kotlin_version = '1.3.10' From 164219f106389b8cb8f827753a28b4beae564e7a Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Wed, 5 Jun 2019 21:03:20 +0800 Subject: [PATCH 014/207] see 06/06 log --- CHANGELOG.md | 1 + README-CN.md | 2 +- README.md | 2 +- gradle.properties | 4 ++-- utilcode/README-CN.md | 2 +- utilcode/README-STATIC-BUS.md | 2 +- utilcode/README.md | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95dfb60cc3..d3eb780835 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ +* `19/06/06` [fix] LogUtils write to file. Publish v1.24.1. * `19/06/03` [fix] Refactoring framework. Publish v1.24.0. * `19/04/25` [fix] LogUtils delete due log. * `19/04/24` [upd] The swipe panel. diff --git a/README-CN.md b/README-CN.md index ed48125319..742271b60e 100644 --- a/README-CN.md +++ b/README-CN.md @@ -41,7 +41,7 @@ [logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png -[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.24.0-brightgreen.svg +[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.24.1-brightgreen.svg [auc]: https://github.com/Blankj/AndroidUtilCode [apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg diff --git a/README.md b/README.md index 94e726a625..cf72836942 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ If this project helps you a lot and you want to support the project's developmen [logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png -[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.24.0-brightgreen.svg +[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.24.1-brightgreen.svg [auc]: https://github.com/Blankj/AndroidUtilCode [apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg diff --git a/gradle.properties b/gradle.properties index d008422916..67ac4b047e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,5 +15,5 @@ #org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 org.gradle.jvmargs=-Xmx8192m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -XX:-UseGCOverheadLimit -Dfile.encoding=UTF-8 org.gradle.daemon=true -#org.gradle.configureondemand=true -org.gradle.parallel=true \ No newline at end of file +org.gradle.configureondemand=true +#org.gradle.parallel=true \ No newline at end of file diff --git a/utilcode/README-CN.md b/utilcode/README-CN.md index 0bdb622940..0595b58c38 100644 --- a/utilcode/README-CN.md +++ b/utilcode/README-CN.md @@ -2,7 +2,7 @@ Gradle: ```groovy -implementation 'com.blankj:utilcode:1.24.0' +implementation 'com.blankj:utilcode:1.24.1' // if u use AndroidX, use the following implementation 'com.blankj:utilcodex:1.24.0' diff --git a/utilcode/README-STATIC-BUS.md b/utilcode/README-STATIC-BUS.md index c60c0c0f0f..ec38d76fcd 100644 --- a/utilcode/README-STATIC-BUS.md +++ b/utilcode/README-STATIC-BUS.md @@ -27,7 +27,7 @@ apply plugin: "com.blankj.bus" 给 base 模块添加 [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode) 依赖: ```groovy -api "com.blankj:utilcode:1.24.0" +api "com.blankj:utilcode:1.24.1" ``` 比如 module0 中存在的 `Module0Activity.java`,我们通常都是在它内部写一个 `start` 函数来启动它,现在我们给它添加 `@BusUtils.Subscribe` 注解,并给注解的 `name` 赋唯一值,要注意,函数务必要 `public static` 哦: diff --git a/utilcode/README.md b/utilcode/README.md index 5a6a295b4c..a7a04a84d6 100644 --- a/utilcode/README.md +++ b/utilcode/README.md @@ -2,7 +2,7 @@ Gradle: ```groovy -implementation 'com.blankj:utilcode:1.24.0' +implementation 'com.blankj:utilcode:1.24.1' // if u use AndroidX, use the following implementation 'com.blankj:utilcodex:1.24.0' From 96621bd58dad003a18bbe08da1ebf38b734cde1f Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Wed, 5 Jun 2019 21:04:01 +0800 Subject: [PATCH 015/207] see 06/06 log --- utilcode/README-CN.md | 2 +- utilcode/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/utilcode/README-CN.md b/utilcode/README-CN.md index 0595b58c38..9a33d2f2f6 100644 --- a/utilcode/README-CN.md +++ b/utilcode/README-CN.md @@ -5,7 +5,7 @@ Gradle: implementation 'com.blankj:utilcode:1.24.1' // if u use AndroidX, use the following -implementation 'com.blankj:utilcodex:1.24.0' +implementation 'com.blankj:utilcodex:1.24.1' ``` diff --git a/utilcode/README.md b/utilcode/README.md index a7a04a84d6..c1f2039d2b 100644 --- a/utilcode/README.md +++ b/utilcode/README.md @@ -5,7 +5,7 @@ Gradle: implementation 'com.blankj:utilcode:1.24.1' // if u use AndroidX, use the following -implementation 'com.blankj:utilcodex:1.24.0' +implementation 'com.blankj:utilcodex:1.24.1' ``` From 4bfa2dd46eacd45c81003090d72ccc355d277821 Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Thu, 6 Jun 2019 09:38:09 +0800 Subject: [PATCH 016/207] see 06/07 log --- gradle.properties | 2 +- gradle/config/config.gradle | 4 ++-- .../src/main/java/com/blankj/utilcode/util/LogUtils.java | 7 +++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 67ac4b047e..2c82fcf4f0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,5 +15,5 @@ #org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 org.gradle.jvmargs=-Xmx8192m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -XX:-UseGCOverheadLimit -Dfile.encoding=UTF-8 org.gradle.daemon=true -org.gradle.configureondemand=true +#org.gradle.configureondemand=true #org.gradle.parallel=true \ No newline at end of file diff --git a/gradle/config/config.gradle b/gradle/config/config.gradle index 69391b0822..f1f1b2a479 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_001 - versionName = '1.24.1'// E.g. 1.9.72 => 1,009,072 + versionCode = 1_024_002 + versionName = '1.24.2'// E.g. 1.9.72 => 1,009,072 // lib version kotlin_version = '1.3.10' 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 559e290f96..47b12b20a4 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 @@ -480,7 +480,9 @@ private static void print2File(final int type, final String tag, final String ms String date = format.substring(0, 10); String time = format.substring(11); final String fullPath = - CONFIG.getDir() + CONFIG.getFilePrefix() + "_" + date + "_" + CONFIG.getProcessName() + ".txt"; + CONFIG.getDir() + CONFIG.getFilePrefix() + "_" + + date + "_" + + CONFIG.getProcessName() + ".txt"; if (!createOrExistsFile(fullPath, date)) { Log.e("LogUtils", "create " + fullPath + " failed!"); return; @@ -757,7 +759,8 @@ public final Config setFileWriter(final IFileWriter fileWriter) { } public final String getProcessName() { - return mProcessName; + if (mProcessName == null) return ""; + return mProcessName.replace(":", "_"); } public final String getDefaultDir() { From 31bcebbaebc4a5e2e67f8bf26aeab9a46150b813 Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Thu, 6 Jun 2019 09:39:55 +0800 Subject: [PATCH 017/207] see 06/07 log --- CHANGELOG.md | 1 + README-CN.md | 2 +- README.md | 2 +- utilcode/README-CN.md | 4 ++-- utilcode/README-STATIC-BUS.md | 2 +- utilcode/README.md | 4 ++-- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3eb780835..3dedf5d528 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ +* `19/06/07` [fix] LogUtils file name contains ':'. Publish v1.24.2. * `19/06/06` [fix] LogUtils write to file. Publish v1.24.1. * `19/06/03` [fix] Refactoring framework. Publish v1.24.0. * `19/04/25` [fix] LogUtils delete due log. diff --git a/README-CN.md b/README-CN.md index 742271b60e..1bda0b968b 100644 --- a/README-CN.md +++ b/README-CN.md @@ -41,7 +41,7 @@ [logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png -[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.24.1-brightgreen.svg +[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.24.2-brightgreen.svg [auc]: https://github.com/Blankj/AndroidUtilCode [apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg diff --git a/README.md b/README.md index cf72836942..af2b8e95ff 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ If this project helps you a lot and you want to support the project's developmen [logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png -[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.24.1-brightgreen.svg +[aucSvg]: https://img.shields.io/badge/AndroidUtilCode-v1.24.2-brightgreen.svg [auc]: https://github.com/Blankj/AndroidUtilCode [apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg diff --git a/utilcode/README-CN.md b/utilcode/README-CN.md index 9a33d2f2f6..8db3bc857b 100644 --- a/utilcode/README-CN.md +++ b/utilcode/README-CN.md @@ -2,10 +2,10 @@ Gradle: ```groovy -implementation 'com.blankj:utilcode:1.24.1' +implementation 'com.blankj:utilcode:1.24.2' // if u use AndroidX, use the following -implementation 'com.blankj:utilcodex:1.24.1' +implementation 'com.blankj:utilcodex:1.24.2' ``` diff --git a/utilcode/README-STATIC-BUS.md b/utilcode/README-STATIC-BUS.md index ec38d76fcd..2d3ac30150 100644 --- a/utilcode/README-STATIC-BUS.md +++ b/utilcode/README-STATIC-BUS.md @@ -27,7 +27,7 @@ apply plugin: "com.blankj.bus" 给 base 模块添加 [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode) 依赖: ```groovy -api "com.blankj:utilcode:1.24.1" +api "com.blankj:utilcode:1.24.2" ``` 比如 module0 中存在的 `Module0Activity.java`,我们通常都是在它内部写一个 `start` 函数来启动它,现在我们给它添加 `@BusUtils.Subscribe` 注解,并给注解的 `name` 赋唯一值,要注意,函数务必要 `public static` 哦: diff --git a/utilcode/README.md b/utilcode/README.md index c1f2039d2b..2ba7451dfa 100644 --- a/utilcode/README.md +++ b/utilcode/README.md @@ -2,10 +2,10 @@ Gradle: ```groovy -implementation 'com.blankj:utilcode:1.24.1' +implementation 'com.blankj:utilcode:1.24.2' // if u use AndroidX, use the following -implementation 'com.blankj:utilcodex:1.24.1' +implementation 'com.blankj:utilcodex:1.24.2' ``` From 7060007c4b80b1286a62340d96f3e38fb506eb09 Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Tue, 18 Jun 2019 23:12:05 +0800 Subject: [PATCH 018/207] 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 082/207] 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