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 01/52] 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 @@
-
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 02/52] 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 03/52] 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 04/52] 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 @@ - - + + 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; + /** *- + +- - - - @@ -69,5 +69,5 @@ android:text="@string/sub_util" /> - -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 @@ -- \ 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"> -@@ -94,6 +93,6 @@ android:textSize="30pt" /> - +@@ -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: Sat, 29 Jun 2019 19:59:42 +0800 Subject: [PATCH 05/52] see 06/29 log --- .../test/java/com/blankj/utilcode/util/TimeUtilsTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java index 2ba0a41586..5ab8ee17eb 100644 --- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java +++ b/utilcode/lib/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java @@ -42,15 +42,14 @@ public class TimeUtilsTest { public void millis2String() { assertEquals(timeString, TimeUtils.millis2String(timeMillis)); assertEquals(timeStringFormat, TimeUtils.millis2String(timeMillis, mFormat)); - assertEquals("2017年05月04日", TimeUtils.millis2String(timeMillis, "yyyy年MM月dd日")); - assertEquals("16时37分", TimeUtils.millis2String(timeMillis, "HH时mm分")); + assertEquals(timeStringFormat, TimeUtils.millis2String(timeMillis, "yyyy MM dd HH:mm:ss")); } @Test public void string2Millis() { assertEquals(timeMillis, TimeUtils.string2Millis(timeString)); assertEquals(timeMillis, TimeUtils.string2Millis(timeStringFormat, mFormat)); - assertEquals(timeMillis, TimeUtils.string2Millis(timeStringFormat, "yyyy年MM月dd日HH时mm分")); + assertEquals(timeMillis, TimeUtils.string2Millis(timeStringFormat, "yyyy MM dd HH:mm:ss")); } @Test From 40c0e36fbb1dc33ebce09a6fa162e07380271cf9 Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Thu, 15 Aug 2019 01:36:03 +0800 Subject: [PATCH 06/52] see 08/15 log --- lib/utilcode/README-CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utilcode/README-CN.md b/lib/utilcode/README-CN.md index d610595e3c..cce78181fc 100644 --- a/lib/utilcode/README-CN.md +++ b/lib/utilcode/README-CN.md @@ -1185,7 +1185,7 @@ getComments : 获取压缩文件中的注释链表 [log.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt [map.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/main/java/com/blankj/utilcode/util/MapUtils.java -[map.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/test/java/com/blankj/utilcode/util/MapUtilsTest.java +[map.test]: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/test/java/com/blankj/utilcode/util/MapUtilsTest.java [metaData.java]: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java [metaData.demo]: https://github.com/Blankj/AndroidUtilCode/blob/master/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt From 73dc60c4cdfa10a2b296df3e28ce9af2784be582 Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Sat, 30 Nov 2019 13:03:30 +0800 Subject: [PATCH 07/52] see 11/30 log --- buildSrc/src/main/groovy/Config.groovy | 2 +- config.json | 2 +- .../pkg/src/main/java/com/blankj/main/pkg/MainActivity.kt | 2 +- .../utilcode/pkg/feature/reflect/TestPrivateStaticFinal.java | 2 +- lib/base/build.gradle | 2 +- lib/subutil/build.gradle | 4 ++-- lib/utildebug/build.gradle | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/buildSrc/src/main/groovy/Config.groovy b/buildSrc/src/main/groovy/Config.groovy index 03181d7927..cc279262a8 100644 --- a/buildSrc/src/main/groovy/Config.groovy +++ b/buildSrc/src/main/groovy/Config.groovy @@ -41,7 +41,7 @@ class Config { 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.26.0"), + lib_utilcodex : new DepConfig(true, true, ":lib:utilcodex", "com.blankj:utilcodex:1.26.0"), 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*/ diff --git a/config.json b/config.json index 188e2ff509..630e76de6a 100644 --- a/config.json +++ b/config.json @@ -20,7 +20,7 @@ {"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.26.0"}, + {"isApply": true, "useLocal": true, "localPath": ":lib:utilcodex", "remotePath": "com.blankj:utilcodex:1.26.0"}, {"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/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 fb45369c5b..ccce008ded 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 @@ -2,8 +2,8 @@ package com.blankj.main.pkg import android.graphics.Color import android.os.Bundle -import androidx.appcompat.app.ActionBarDrawerToggle import android.view.View +import androidx.appcompat.app.ActionBarDrawerToggle import com.blankj.common.activity.CommonActivity import com.blankj.common.item.CommonItem import com.blankj.common.item.CommonItemClick diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/TestPrivateStaticFinal.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/TestPrivateStaticFinal.java index e62c518699..b7efb5f4d7 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/TestPrivateStaticFinal.java +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/TestPrivateStaticFinal.java @@ -1,6 +1,6 @@ package com.blankj.utilcode.pkg.feature.reflect; -import android.support.annotation.Keep; +import androidx.annotation.Keep; /** * diff --git a/lib/base/build.gradle b/lib/base/build.gradle index 2285071b5e..6fffd3af61 100644 --- a/lib/base/build.gradle +++ b/lib/base/build.gradle @@ -1,7 +1,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') api Config.depConfig.lib_subutil.dep - api Config.depConfig.lib_utilcode.dep + api Config.depConfig.lib_utilcodex.dep api Config.depConfig.support_appcompat.dep api Config.depConfig.support_material.dep diff --git a/lib/subutil/build.gradle b/lib/subutil/build.gradle index 662f2a4ec7..e7eaf45da1 100644 --- a/lib/subutil/build.gradle +++ b/lib/subutil/build.gradle @@ -13,14 +13,14 @@ readme { dependencies { compileOnly Config.depConfig.support_appcompat.dep compileOnly Config.depConfig.support_material.dep - compileOnly Config.depConfig.lib_utilcode.dep + compileOnly Config.depConfig.lib_utilcodex.dep api(Config.depConfig.glide.dep) { exclude group: "com.android.support" } api Config.depConfig.retrofit.dep api Config.depConfig.gson.dep - testImplementation Config.depConfig.lib_utilcode.dep + testImplementation Config.depConfig.lib_utilcodex.dep testImplementation Config.depConfig.test_junit.dep testImplementation Config.depConfig.test_robolectric.dep } \ No newline at end of file diff --git a/lib/utildebug/build.gradle b/lib/utildebug/build.gradle index b6380100bb..558735162a 100644 --- a/lib/utildebug/build.gradle +++ b/lib/utildebug/build.gradle @@ -5,7 +5,7 @@ apply { } dependencies { - implementation Config.depConfig.lib_utilcode.dep + implementation Config.depConfig.lib_utilcodex.dep implementation Config.depConfig.swipe_panel.dep implementation Config.depConfig.photo_view.dep compileOnly Config.depConfig.support_appcompat.dep From 3fd7a91e0e3bbd2ddbaf2b79163527b02dcc87d9 Mon Sep 17 00:00:00 2001 From: BlankjDate: Tue, 7 Apr 2020 00:11:37 +0800 Subject: [PATCH 08/52] see 04/07 log --- lib/utildebug/build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/utildebug/build.gradle b/lib/utildebug/build.gradle index b733473cf1..6e1157ef0b 100644 --- a/lib/utildebug/build.gradle +++ b/lib/utildebug/build.gradle @@ -9,4 +9,8 @@ dependencies { testImplementation Config.depConfig.test_junit.dep testImplementation Config.depConfig.test_robolectric.dep testImplementation Config.depConfig.support_appcompat.dep +} + +afterEvaluate { + verifyReleaseResources.enabled(false) } \ No newline at end of file From 96c45acb8eb47a58c84bb467e6b126500765f5b2 Mon Sep 17 00:00:00 2001 From: Blankj Date: Tue, 7 Apr 2020 17:21:35 +0800 Subject: [PATCH 09/52] see 04/07 log --- .../src/test/java/com/blankj/utilcode/util/BaseTest.java | 8 +++++--- .../java/com/blankj/utilcode/util/UiMessageUtilsTest.java | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/utilcode/src/test/java/com/blankj/utilcode/util/BaseTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/BaseTest.java index 6e097938bf..ebaa83564d 100644 --- a/lib/utilcode/src/test/java/com/blankj/utilcode/util/BaseTest.java +++ b/lib/utilcode/src/test/java/com/blankj/utilcode/util/BaseTest.java @@ -1,7 +1,5 @@ package com.blankj.utilcode.util; -import android.support.annotation.NonNull; -import java.util.concurrent.Executor; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; @@ -9,6 +7,10 @@ import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowLog; +import java.util.concurrent.Executor; + +import androidx.annotation.NonNull; + /** * * author: Blankj @@ -18,7 +20,7 @@ **/ @RunWith(RobolectricTestRunner.class) -@Config(manifest = Config.NONE,shadows = { ShadowLog.class }) +@Config(manifest = Config.NONE, shadows = {ShadowLog.class}) public class BaseTest { @BusUtils.Bus(tag = "base") diff --git a/lib/utilcode/src/test/java/com/blankj/utilcode/util/UiMessageUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/UiMessageUtilsTest.java index 1ef00ee586..140dd77683 100644 --- a/lib/utilcode/src/test/java/com/blankj/utilcode/util/UiMessageUtilsTest.java +++ b/lib/utilcode/src/test/java/com/blankj/utilcode/util/UiMessageUtilsTest.java @@ -1,9 +1,10 @@ package com.blankj.utilcode.util; -import android.support.annotation.NonNull; import org.junit.Test; +import androidx.annotation.NonNull; + /** ** author: blankj From 7145da0408a6f5ed8f0bbd531245750eb1a1c75d Mon Sep 17 00:00:00 2001 From: Blankj* - * @param array the array to remove the element from, may not beDate: Tue, 5 May 2020 02:24:34 +0800 Subject: [PATCH 10/52] see 05/05 log --- buildSrc/src/main/groovy/Config.groovy | 8 ++++---- lib/base/build.gradle | 8 ++++---- lib/subutil/build.gradle | 4 ++-- lib/utilcode/build.gradle | 8 ++++---- lib/utildebug/build.gradle | 6 +++--- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/buildSrc/src/main/groovy/Config.groovy b/buildSrc/src/main/groovy/Config.groovy index d8e41b3ca2..88b8eb9a5a 100644 --- a/buildSrc/src/main/groovy/Config.groovy +++ b/buildSrc/src/main/groovy/Config.groovy @@ -60,10 +60,10 @@ class Config { //./gradlew clean plugin:plugin_bus-gradle-plugin:mavenLocal // 上传到本地 mavenLocal //./gradlew clean plugin:plugin_bus-gradle-plugin:bintrayUpload // 上传到 jcenter - support_appcompat : new DepConfig("androidx.appcompat:appcompat:$androidxVersion"), - support_material : new DepConfig("com.google.android.material:material:$androidxVersion"), - support_multidex : new DepConfig("com.android.support:multidex:1.0.2"), - support_constraint : new DepConfig("com.android.support.constraint:constraint-layout:1.1.3"), + androidx_appcompat : new DepConfig("androidx.appcompat:appcompat:$androidxVersion"), + androidx_material : new DepConfig("com.google.android.material:material:$androidxVersion"), + androidx_multidex : new DepConfig("androidx.multidex:multidex:2.0.0"), + androidx_constraint : new DepConfig("androidx.constraintlayout:constraintlayout:1.1.3"), kotlin : new DepConfig("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"), diff --git a/lib/base/build.gradle b/lib/base/build.gradle index 9a1ac7b329..bb7fa31573 100644 --- a/lib/base/build.gradle +++ b/lib/base/build.gradle @@ -3,10 +3,10 @@ dependencies { api Config.depConfig.lib_subutil.dep api Config.depConfig.lib_utilcode.dep - api Config.depConfig.support_appcompat.dep - api Config.depConfig.support_material.dep - api Config.depConfig.support_multidex.dep - api Config.depConfig.support_constraint.dep + api Config.depConfig.androidx_appcompat.dep + api Config.depConfig.androidx_material.dep + api Config.depConfig.androidx_multidex.dep + api Config.depConfig.androidx_constraint.dep api Config.depConfig.kotlin.dep api Config.depConfig.free_proguard.dep api Config.depConfig.swipe_panel.dep diff --git a/lib/subutil/build.gradle b/lib/subutil/build.gradle index a8798fea1b..a561916f3e 100644 --- a/lib/subutil/build.gradle +++ b/lib/subutil/build.gradle @@ -9,8 +9,8 @@ readme { } dependencies { - compileOnly Config.depConfig.support_appcompat.dep - compileOnly Config.depConfig.support_material.dep + compileOnly Config.depConfig.androidx_appcompat.dep + compileOnly Config.depConfig.androidx_material.dep compileOnly Config.depConfig.lib_utilcode.dep api(Config.depConfig.glide.dep) { exclude group: "com.android.support" diff --git a/lib/utilcode/build.gradle b/lib/utilcode/build.gradle index a3ed94861c..891f7dbf40 100644 --- a/lib/utilcode/build.gradle +++ b/lib/utilcode/build.gradle @@ -29,13 +29,13 @@ android { dependencies { implementation Config.depConfig.gson.dep - compileOnly Config.depConfig.support_appcompat.dep - compileOnly Config.depConfig.support_material.dep + compileOnly Config.depConfig.androidx_appcompat.dep + compileOnly Config.depConfig.androidx_material.dep testImplementation Config.depConfig.test_junit.dep testImplementation Config.depConfig.test_robolectric.dep - testImplementation Config.depConfig.support_appcompat.dep - testImplementation Config.depConfig.support_material.dep + testImplementation Config.depConfig.androidx_appcompat.dep + testImplementation Config.depConfig.androidx_material.dep testImplementation Config.depConfig.eventbus_lib.dep } diff --git a/lib/utildebug/build.gradle b/lib/utildebug/build.gradle index 6e1157ef0b..82b55495b0 100644 --- a/lib/utildebug/build.gradle +++ b/lib/utildebug/build.gradle @@ -1,6 +1,6 @@ dependencies { - compileOnly Config.depConfig.support_appcompat.dep - compileOnly Config.depConfig.support_material.dep + compileOnly Config.depConfig.androidx_appcompat.dep + compileOnly Config.depConfig.androidx_material.dep implementation Config.depConfig.lib_utilcode.dep implementation Config.depConfig.swipe_panel.dep @@ -8,7 +8,7 @@ dependencies { testImplementation Config.depConfig.test_junit.dep testImplementation Config.depConfig.test_robolectric.dep - testImplementation Config.depConfig.support_appcompat.dep + testImplementation Config.depConfig.androidx_appcompat.dep } afterEvaluate { From c7190639ec44b9ff4b5b35f5580458b77abd79c7 Mon Sep 17 00:00:00 2001 From: Blankj Date: Tue, 5 May 2020 02:26:00 +0800 Subject: [PATCH 11/52] see 05/05 log --- buildApp.gradle | 2 +- buildSrc/src/main/groovy/Config.groovy | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/buildApp.gradle b/buildApp.gradle index 2220ed6947..8cb7de95fe 100644 --- a/buildApp.gradle +++ b/buildApp.gradle @@ -68,7 +68,7 @@ android { dependencies { // LeakCanary - debugImplementation Config.depConfig.leakcanary_android.dep + debugImplementation Config.depConfig.leakcanary.dep debugImplementation Config.depConfig.lib_utildebug.dep releaseImplementation Config.depConfig.lib_utildebug_no_op.dep diff --git a/buildSrc/src/main/groovy/Config.groovy b/buildSrc/src/main/groovy/Config.groovy index 88b8eb9a5a..6074cf4d2e 100644 --- a/buildSrc/src/main/groovy/Config.groovy +++ b/buildSrc/src/main/groovy/Config.groovy @@ -20,7 +20,7 @@ class Config { // lib version static gradlePluginVersion = '3.5.2' static kotlinVersion = '1.3.50' - static androidxVersion = '1.0.0' + static androidxVersion = '1.1.0' static depConfig = [ /*Never delete this line*/ @@ -60,14 +60,14 @@ class Config { //./gradlew clean plugin:plugin_bus-gradle-plugin:mavenLocal // 上传到本地 mavenLocal //./gradlew clean plugin:plugin_bus-gradle-plugin:bintrayUpload // 上传到 jcenter - androidx_appcompat : new DepConfig("androidx.appcompat:appcompat:$androidxVersion"), - androidx_material : new DepConfig("com.google.android.material:material:$androidxVersion"), - androidx_multidex : new DepConfig("androidx.multidex:multidex:2.0.0"), - androidx_constraint : new DepConfig("androidx.constraintlayout:constraintlayout:1.1.3"), + androidx_appcompat : new DepConfig("androidx.appcompat:appcompat:$androidxVersion"), + androidx_material : new DepConfig("com.google.android.material:material:$androidxVersion"), + androidx_multidex : new DepConfig("androidx.multidex:multidex:2.0.0"), + androidx_constraint : new DepConfig("androidx.constraintlayout:constraintlayout:1.1.3"), kotlin : new DepConfig("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"), - leakcanary_android : new DepConfig("com.squareup.leakcanary:leakcanary-android:2.1"), + leakcanary : new DepConfig("com.squareup.leakcanary:leakcanary-android:2.1"), free_proguard : new DepConfig("com.blankj:free-proguard:1.0.2"), swipe_panel : new DepConfig("com.blankj:swipe-panel:1.2"), From c351507a082875429db451bef2a818aead420077 Mon Sep 17 00:00:00 2001 From: Blankj Date: Sun, 25 Oct 2020 02:53:58 +0800 Subject: [PATCH 12/52] see 10/25 log --- .../com/blankj/utilcode/pkg/feature/mvp/MvpActivity.java | 2 -- lib/base/src/main/java/com/blankj/base/mvp/BaseModel.java | 7 ++++--- lib/base/src/main/java/com/blankj/base/mvp/BaseView.java | 2 ++ .../java/com/blankj/utilcode/util/DebouncingUtils.java | 3 ++- .../src/main/java/com/blankj/utilcode/util/ViewUtils.java | 3 ++- 5 files changed, 10 insertions(+), 7 deletions(-) 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 index 05ae20c92d..7fff29f4a7 100644 --- 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 @@ -1,7 +1,5 @@ package com.blankj.utilcode.pkg.feature.mvp; -import android.arch.lifecycle.ViewModel; -import android.arch.lifecycle.ViewModelProvider; import android.content.Context; import android.content.Intent; import android.os.Bundle; diff --git a/lib/base/src/main/java/com/blankj/base/mvp/BaseModel.java b/lib/base/src/main/java/com/blankj/base/mvp/BaseModel.java index 84c930fd74..2f2b81d6e0 100644 --- a/lib/base/src/main/java/com/blankj/base/mvp/BaseModel.java +++ b/lib/base/src/main/java/com/blankj/base/mvp/BaseModel.java @@ -1,10 +1,11 @@ package com.blankj.base.mvp; -import android.arch.lifecycle.LiveData; -import android.arch.lifecycle.MutableLiveData; -import android.support.annotation.CallSuper; import android.util.Log; +import androidx.annotation.CallSuper; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; + /** * * author: blankj diff --git a/lib/base/src/main/java/com/blankj/base/mvp/BaseView.java b/lib/base/src/main/java/com/blankj/base/mvp/BaseView.java index 94f36bcdaa..a68909d01f 100644 --- a/lib/base/src/main/java/com/blankj/base/mvp/BaseView.java +++ b/lib/base/src/main/java/com/blankj/base/mvp/BaseView.java @@ -5,10 +5,12 @@ import java.util.HashMap; import java.util.Map; +import androidx.annotation.CallSuper; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleObserver; +import androidx.lifecycle.OnLifecycleEvent; /** **/ public class MvpView extends BaseViewdiff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/DebouncingUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/DebouncingUtils.java index c9f2c8ff79..889ac86090 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/DebouncingUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/DebouncingUtils.java @@ -1,7 +1,6 @@ package com.blankj.utilcode.util; import android.os.SystemClock; -import android.support.annotation.NonNull; import android.text.TextUtils; import android.view.View; @@ -9,6 +8,8 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import androidx.annotation.NonNull; + /** **/ public class MvpPresenter extends BasePresenter* author: Blankj diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ViewUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ViewUtils.java index a06e3503bf..f0ef043322 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ViewUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ViewUtils.java @@ -2,7 +2,6 @@ import android.content.Context; import android.os.Build; -import android.support.annotation.LayoutRes; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -10,6 +9,8 @@ import java.util.Locale; +import androidx.annotation.LayoutRes; + /** **/ -public interface IMvp { +public interface MvpMvp { interface View { void setLoadingVisible(boolean visible); diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpPresenter.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpPresenter.java index 01990aa3af..fcb68bd3ed 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpPresenter.java +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpPresenter.java @@ -13,7 +13,7 @@ ** author: Blankj From e6ec42f72adfe3351f9280ddce4027b2b98801b4 Mon Sep 17 00:00:00 2001 From: Blankj*/ -public class MvpModel extends BaseModel implements IMvp.Model { +public class MvpModel extends BaseModel implements MvpMvp.Model { private int index; diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/IMvp.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpMvp.java similarity index 94% rename from feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/IMvp.java rename to feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpMvp.java index 4e8edc023e..d0335ef203 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/IMvp.java +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpMvp.java @@ -10,7 +10,7 @@ * desc : *Date: Fri, 6 Nov 2020 14:28:45 +0800 Subject: [PATCH 13/52] see 11/06 log --- buildSrc/src/main/groovy/Config.groovy | 2 +- .../blankj/utilcode/pkg/feature/mvp/MvpActivity.java | 2 -- .../com/blankj/utilcode/pkg/feature/mvp/MvpModel.java | 2 +- .../pkg/feature/mvp/{IMvp.java => MvpMvp.java} | 2 +- .../blankj/utilcode/pkg/feature/mvp/MvpPresenter.java | 2 +- .../com/blankj/utilcode/pkg/feature/mvp/MvpView.java | 3 +-- .../src/main/java/com/blankj/base/mvp/BaseModel.java | 4 ---- .../main/java/com/blankj/base/mvp/BasePresenter.java | 6 ------ .../java/com/blankj/utilcode/util/CleanUtils.java | 11 +++++++++++ plugin/api-gradle-plugin/CHANGELOG.md | 3 +++ plugin/api-gradle-plugin/README.md | 2 +- .../src/main/java/com/blankj/api/ApiClassVisitor.java | 7 +++---- plugin/bus-gradle-plugin/README.md | 2 +- 13 files changed, 24 insertions(+), 24 deletions(-) rename feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/{IMvp.java => MvpMvp.java} (94%) diff --git a/buildSrc/src/main/groovy/Config.groovy b/buildSrc/src/main/groovy/Config.groovy index ec58830c02..db0ca894bf 100644 --- a/buildSrc/src/main/groovy/Config.groovy +++ b/buildSrc/src/main/groovy/Config.groovy @@ -53,7 +53,7 @@ class Config { // 上传新版本插件更新 pluginPath 中的版本号,并设置 isApply = false // 通过 mavenLocal 上传本地版本,设置 isApply = true 即可应用插件来调试,最后通过 bintrayUpload 来发布插件 - plugin_api : new DepConfig(isApply: true, useLocal: false, pluginPath: "com.blankj:api-gradle-plugin:1.4", pluginId: "com.blankj.api"), + plugin_api : new DepConfig(isApply: true, useLocal: false, pluginPath: "com.blankj:api-gradle-plugin:latest.release", pluginId: "com.blankj.api"), //./gradlew clean :plugin_api-gradle-plugin:mavenLocal // 上传到本地 mavenLocal //./gradlew clean :plugin_api-gradle-plugin:bintrayUpload // 上传到 jcenter plugin_bus : new DepConfig(isApply: true, useLocal: false, pluginPath: "com.blankj:bus-gradle-plugin:2.6", pluginId: "com.blankj.bus"), 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 index 813431f6f8..7aa5fe26b1 100644 --- 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 @@ -1,7 +1,5 @@ package com.blankj.utilcode.pkg.feature.mvp; -import android.arch.lifecycle.ViewModel; -import android.arch.lifecycle.ViewModelProvider; import android.content.Context; import android.content.Intent; import android.os.Bundle; diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpModel.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpModel.java index 8697f11c1d..e16b4f1934 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpModel.java +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpModel.java @@ -12,7 +12,7 @@ * desc : * - implements IMvp.Presenter { + implements MvpMvp.Presenter { @Override public void onBindView() { diff --git a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpView.java b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpView.java index 054cd7ade9..e916398e48 100644 --- a/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpView.java +++ b/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/mvp/MvpView.java @@ -6,7 +6,6 @@ import com.blankj.base.mvp.BaseView; import com.blankj.utilcode.pkg.R; -import com.blankj.utilcode.pkg.feature.fragment.FragmentActivity; import com.blankj.utilcode.util.ClickUtils; import com.blankj.utilcode.util.LogUtils; import com.blankj.utilcode.util.SizeUtils; @@ -22,7 +21,7 @@ * - implements IMvp.View { + implements MvpMvp.View { private TextView mvpTv; private TextView mvpMeasureWidthTv; diff --git a/lib/base/src/main/java/com/blankj/base/mvp/BaseModel.java b/lib/base/src/main/java/com/blankj/base/mvp/BaseModel.java index 84c930fd74..1623f90254 100644 --- a/lib/base/src/main/java/com/blankj/base/mvp/BaseModel.java +++ b/lib/base/src/main/java/com/blankj/base/mvp/BaseModel.java @@ -1,7 +1,5 @@ package com.blankj.base.mvp; -import android.arch.lifecycle.LiveData; -import android.arch.lifecycle.MutableLiveData; import android.support.annotation.CallSuper; import android.util.Log; @@ -15,8 +13,6 @@ */ public abstract class BaseModel { - LiveData null
+ * @param array the array to remove the element from, may benull
* @param index the position of the element to be removed * @return A new array containing the existing elements except the element * at the specified position. * @throws IndexOutOfBoundsException if the index is out of range - * (index < 0 || index >= array.length), or if the array isnull
. - * @since 2.1 + * (index < 0 || index >= array.length) */ - public static Object[] remove(Object[] array, int index) { + @Nullable + public static Object[] remove(@Nullable Object[] array, int index) { + if (array == null) return null; return (Object[]) remove((Object) array, index); } @@ -861,9 +949,9 @@ public static Object[] remove(Object[] array, int index) { * @param element the element to be removed * @return A new array containing the existing elements except the first * occurrence of the specified element. - * @since 2.1 */ - public static Object[] removeElement(Object[] array, Object element) { + @Nullable + public static Object[] removeElement(@Nullable Object[] array, @Nullable Object element) { int index = indexOf(array, element); if (index == INDEX_NOT_FOUND) { return copy(array); @@ -871,11 +959,14 @@ public static Object[] removeElement(Object[] array, Object element) { return remove(array, index); } - public static boolean[] remove(boolean[] array, int index) { + @Nullable + public static boolean[] remove(@Nullable boolean[] array, int index) { + if (array == null) return null; return (boolean[]) remove((Object) array, index); } - public static boolean[] removeElement(boolean[] array, boolean element) { + @Nullable + public static boolean[] removeElement(@Nullable boolean[] array, boolean element) { int index = indexOf(array, element); if (index == INDEX_NOT_FOUND) { return copy(array); @@ -883,11 +974,14 @@ public static boolean[] removeElement(boolean[] array, boolean element) { return remove(array, index); } - public static byte[] remove(byte[] array, int index) { + @Nullable + public static byte[] remove(@Nullable byte[] array, int index) { + if (array == null) return null; return (byte[]) remove((Object) array, index); } - public static byte[] removeElement(byte[] array, byte element) { + @Nullable + public static byte[] removeElement(@Nullable byte[] array, byte element) { int index = indexOf(array, element); if (index == INDEX_NOT_FOUND) { return copy(array); @@ -895,11 +989,14 @@ public static byte[] removeElement(byte[] array, byte element) { return remove(array, index); } - public static char[] remove(char[] array, int index) { + @Nullable + public static char[] remove(@Nullable char[] array, int index) { + if (array == null) return null; return (char[]) remove((Object) array, index); } - public static char[] removeElement(char[] array, char element) { + @Nullable + public static char[] removeElement(@Nullable char[] array, char element) { int index = indexOf(array, element); if (index == INDEX_NOT_FOUND) { return copy(array); @@ -907,23 +1004,30 @@ public static char[] removeElement(char[] array, char element) { return remove(array, index); } - public static double[] remove(double[] array, int index) { + @Nullable + public static double[] remove(@Nullable double[] array, int index) { + if (array == null) return null; return (double[]) remove((Object) array, index); } - public static double[] removeElement(double[] array, double element) { + @Nullable + public static double[] removeElement(@Nullable double[] array, double element) { int index = indexOf(array, element); if (index == INDEX_NOT_FOUND) { return copy(array); } + //noinspection ConstantConditions return remove(array, index); } - public static float[] remove(float[] array, int index) { + @Nullable + public static float[] remove(@Nullable float[] array, int index) { + if (array == null) return null; return (float[]) remove((Object) array, index); } - public static float[] removeElement(float[] array, float element) { + @Nullable + public static float[] removeElement(@Nullable float[] array, float element) { int index = indexOf(array, element); if (index == INDEX_NOT_FOUND) { return copy(array); @@ -931,11 +1035,14 @@ public static float[] removeElement(float[] array, float element) { return remove(array, index); } - public static int[] remove(int[] array, int index) { + @Nullable + public static int[] remove(@Nullable int[] array, int index) { + if (array == null) return null; return (int[]) remove((Object) array, index); } - public static int[] removeElement(int[] array, int element) { + @Nullable + public static int[] removeElement(@Nullable int[] array, int element) { int index = indexOf(array, element); if (index == INDEX_NOT_FOUND) { return copy(array); @@ -943,11 +1050,14 @@ public static int[] removeElement(int[] array, int element) { return remove(array, index); } - public static long[] remove(long[] array, int index) { + @Nullable + public static long[] remove(@Nullable long[] array, int index) { + if (array == null) return null; return (long[]) remove((Object) array, index); } - public static long[] removeElement(long[] array, long element) { + @Nullable + public static long[] removeElement(@Nullable long[] array, long element) { int index = indexOf(array, element); if (index == INDEX_NOT_FOUND) { return copy(array); @@ -955,11 +1065,14 @@ public static long[] removeElement(long[] array, long element) { return remove(array, index); } - public static short[] remove(short[] array, int index) { + @Nullable + public static short[] remove(@Nullable short[] array, int index) { + if (array == null) return null; return (short[]) remove((Object) array, index); } - public static short[] removeElement(short[] array, short element) { + @Nullable + public static short[] removeElement(@Nullable short[] array, short element) { int index = indexOf(array, element); if (index == INDEX_NOT_FOUND) { return copy(array); @@ -967,7 +1080,8 @@ public static short[] removeElement(short[] array, short element) { return remove(array, index); } - private static Object remove(Object array, int index) { + @NonNull + private static Object remove(@NonNull Object array, int index) { int length = getLength(array); if (index < 0 || index >= length) { throw new IndexOutOfBoundsException("Index: " + index + ", Length: " + length); @@ -986,11 +1100,11 @@ private static Object remove(Object array, int index) { // object indexOf /////////////////////////////////////////////////////////////////////////// - public static int indexOf(Object[] array, Object objectToFind) { + public static int indexOf(@Nullable Object[] array, @Nullable Object objectToFind) { return indexOf(array, objectToFind, 0); } - public static int indexOf(Object[] array, final Object objectToFind, int startIndex) { + public static int indexOf(@Nullable Object[] array, @Nullable final Object objectToFind, int startIndex) { if (array == null) { return INDEX_NOT_FOUND; } @@ -1013,11 +1127,11 @@ public static int indexOf(Object[] array, final Object objectToFind, int startIn return INDEX_NOT_FOUND; } - public static int lastIndexOf(Object[] array, Object objectToFind) { + public static int lastIndexOf(@Nullable Object[] array, @Nullable Object objectToFind) { return lastIndexOf(array, objectToFind, Integer.MAX_VALUE); } - public static int lastIndexOf(Object[] array, Object objectToFind, int startIndex) { + public static int lastIndexOf(@Nullable Object[] array, @Nullable Object objectToFind, int startIndex) { if (array == null) { return INDEX_NOT_FOUND; } @@ -1042,7 +1156,7 @@ public static int lastIndexOf(Object[] array, Object objectToFind, int startInde return INDEX_NOT_FOUND; } - public static boolean contains(Object[] array, Object objectToFind) { + public static boolean contains(@Nullable Object[] array, @Nullable Object objectToFind) { return indexOf(array, objectToFind) != INDEX_NOT_FOUND; } @@ -1050,11 +1164,11 @@ public static boolean contains(Object[] array, Object objectToFind) { // long indexOf /////////////////////////////////////////////////////////////////////////// - public static int indexOf(long[] array, long valueToFind) { + public static int indexOf(@Nullable long[] array, long valueToFind) { return indexOf(array, valueToFind, 0); } - public static int indexOf(long[] array, long valueToFind, int startIndex) { + public static int indexOf(@Nullable long[] array, long valueToFind, int startIndex) { if (array == null) { return INDEX_NOT_FOUND; } @@ -1069,11 +1183,11 @@ public static int indexOf(long[] array, long valueToFind, int startIndex) { return INDEX_NOT_FOUND; } - public static int lastIndexOf(long[] array, long valueToFind) { + public static int lastIndexOf(@Nullable long[] array, long valueToFind) { return lastIndexOf(array, valueToFind, Integer.MAX_VALUE); } - public static int lastIndexOf(long[] array, long valueToFind, int startIndex) { + public static int lastIndexOf(@Nullable long[] array, long valueToFind, int startIndex) { if (array == null) { return INDEX_NOT_FOUND; } @@ -1090,7 +1204,7 @@ public static int lastIndexOf(long[] array, long valueToFind, int startIndex) { return INDEX_NOT_FOUND; } - public static boolean contains(long[] array, long valueToFind) { + public static boolean contains(@Nullable long[] array, long valueToFind) { return indexOf(array, valueToFind) != INDEX_NOT_FOUND; } @@ -1098,11 +1212,11 @@ public static boolean contains(long[] array, long valueToFind) { // int indexOf /////////////////////////////////////////////////////////////////////////// - public static int indexOf(int[] array, int valueToFind) { + public static int indexOf(@Nullable int[] array, int valueToFind) { return indexOf(array, valueToFind, 0); } - public static int indexOf(int[] array, int valueToFind, int startIndex) { + public static int indexOf(@Nullable int[] array, int valueToFind, int startIndex) { if (array == null) { return INDEX_NOT_FOUND; } @@ -1117,11 +1231,11 @@ public static int indexOf(int[] array, int valueToFind, int startIndex) { return INDEX_NOT_FOUND; } - public static int lastIndexOf(int[] array, int valueToFind) { + public static int lastIndexOf(@Nullable int[] array, int valueToFind) { return lastIndexOf(array, valueToFind, Integer.MAX_VALUE); } - public static int lastIndexOf(int[] array, int valueToFind, int startIndex) { + public static int lastIndexOf(@Nullable int[] array, int valueToFind, int startIndex) { if (array == null) { return INDEX_NOT_FOUND; } @@ -1138,7 +1252,7 @@ public static int lastIndexOf(int[] array, int valueToFind, int startIndex) { return INDEX_NOT_FOUND; } - public static boolean contains(int[] array, int valueToFind) { + public static boolean contains(@Nullable int[] array, int valueToFind) { return indexOf(array, valueToFind) != INDEX_NOT_FOUND; } @@ -1146,11 +1260,11 @@ public static boolean contains(int[] array, int valueToFind) { // short indexOf /////////////////////////////////////////////////////////////////////////// - public static int indexOf(short[] array, short valueToFind) { + public static int indexOf(@Nullable short[] array, short valueToFind) { return indexOf(array, valueToFind, 0); } - public static int indexOf(short[] array, short valueToFind, int startIndex) { + public static int indexOf(@Nullable short[] array, short valueToFind, int startIndex) { if (array == null) { return INDEX_NOT_FOUND; } @@ -1165,11 +1279,11 @@ public static int indexOf(short[] array, short valueToFind, int startIndex) { return INDEX_NOT_FOUND; } - public static int lastIndexOf(short[] array, short valueToFind) { + public static int lastIndexOf(@Nullable short[] array, short valueToFind) { return lastIndexOf(array, valueToFind, Integer.MAX_VALUE); } - public static int lastIndexOf(short[] array, short valueToFind, int startIndex) { + public static int lastIndexOf(@Nullable short[] array, short valueToFind, int startIndex) { if (array == null) { return INDEX_NOT_FOUND; } @@ -1186,7 +1300,7 @@ public static int lastIndexOf(short[] array, short valueToFind, int startIndex) return INDEX_NOT_FOUND; } - public static boolean contains(short[] array, short valueToFind) { + public static boolean contains(@Nullable short[] array, short valueToFind) { return indexOf(array, valueToFind) != INDEX_NOT_FOUND; } @@ -1194,11 +1308,11 @@ public static boolean contains(short[] array, short valueToFind) { // char indexOf /////////////////////////////////////////////////////////////////////////// - public static int indexOf(char[] array, char valueToFind) { + public static int indexOf(@Nullable char[] array, char valueToFind) { return indexOf(array, valueToFind, 0); } - public static int indexOf(char[] array, char valueToFind, int startIndex) { + public static int indexOf(@Nullable char[] array, char valueToFind, int startIndex) { if (array == null) { return INDEX_NOT_FOUND; } @@ -1213,11 +1327,11 @@ public static int indexOf(char[] array, char valueToFind, int startIndex) { return INDEX_NOT_FOUND; } - public static int lastIndexOf(char[] array, char valueToFind) { + public static int lastIndexOf(@Nullable char[] array, char valueToFind) { return lastIndexOf(array, valueToFind, Integer.MAX_VALUE); } - public static int lastIndexOf(char[] array, char valueToFind, int startIndex) { + public static int lastIndexOf(@Nullable char[] array, char valueToFind, int startIndex) { if (array == null) { return INDEX_NOT_FOUND; } @@ -1234,7 +1348,7 @@ public static int lastIndexOf(char[] array, char valueToFind, int startIndex) { return INDEX_NOT_FOUND; } - public static boolean contains(char[] array, char valueToFind) { + public static boolean contains(@Nullable char[] array, char valueToFind) { return indexOf(array, valueToFind) != INDEX_NOT_FOUND; } @@ -1242,11 +1356,11 @@ public static boolean contains(char[] array, char valueToFind) { // byte indexOf /////////////////////////////////////////////////////////////////////////// - public static int indexOf(byte[] array, byte valueToFind) { + public static int indexOf(@Nullable byte[] array, byte valueToFind) { return indexOf(array, valueToFind, 0); } - public static int indexOf(byte[] array, byte valueToFind, int startIndex) { + public static int indexOf(@Nullable byte[] array, byte valueToFind, int startIndex) { if (array == null) { return INDEX_NOT_FOUND; } @@ -1261,11 +1375,11 @@ public static int indexOf(byte[] array, byte valueToFind, int startIndex) { return INDEX_NOT_FOUND; } - public static int lastIndexOf(byte[] array, byte valueToFind) { + public static int lastIndexOf(@Nullable byte[] array, byte valueToFind) { return lastIndexOf(array, valueToFind, Integer.MAX_VALUE); } - public static int lastIndexOf(byte[] array, byte valueToFind, int startIndex) { + public static int lastIndexOf(@Nullable byte[] array, byte valueToFind, int startIndex) { if (array == null) { return INDEX_NOT_FOUND; } @@ -1282,7 +1396,7 @@ public static int lastIndexOf(byte[] array, byte valueToFind, int startIndex) { return INDEX_NOT_FOUND; } - public static boolean contains(byte[] array, byte valueToFind) { + public static boolean contains(@Nullable byte[] array, byte valueToFind) { return indexOf(array, valueToFind) != INDEX_NOT_FOUND; } @@ -1290,15 +1404,15 @@ public static boolean contains(byte[] array, byte valueToFind) { // double indexOf /////////////////////////////////////////////////////////////////////////// - public static int indexOf(double[] array, double valueToFind) { + public static int indexOf(@Nullable double[] array, double valueToFind) { return indexOf(array, valueToFind, 0); } - public static int indexOf(double[] array, double valueToFind, double tolerance) { + public static int indexOf(@Nullable double[] array, double valueToFind, double tolerance) { return indexOf(array, valueToFind, 0, tolerance); } - public static int indexOf(double[] array, double valueToFind, int startIndex) { + public static int indexOf(@Nullable double[] array, double valueToFind, int startIndex) { if (ArrayUtils.isEmpty(array)) { return INDEX_NOT_FOUND; } @@ -1313,7 +1427,7 @@ public static int indexOf(double[] array, double valueToFind, int startIndex) { return INDEX_NOT_FOUND; } - public static int indexOf(double[] array, double valueToFind, int startIndex, double tolerance) { + public static int indexOf(@Nullable double[] array, double valueToFind, int startIndex, double tolerance) { if (ArrayUtils.isEmpty(array)) { return INDEX_NOT_FOUND; } @@ -1330,15 +1444,15 @@ public static int indexOf(double[] array, double valueToFind, int startIndex, do return INDEX_NOT_FOUND; } - public static int lastIndexOf(double[] array, double valueToFind) { + public static int lastIndexOf(@Nullable double[] array, double valueToFind) { return lastIndexOf(array, valueToFind, Integer.MAX_VALUE); } - public static int lastIndexOf(double[] array, double valueToFind, double tolerance) { + public static int lastIndexOf(@Nullable double[] array, double valueToFind, double tolerance) { return lastIndexOf(array, valueToFind, Integer.MAX_VALUE, tolerance); } - public static int lastIndexOf(double[] array, double valueToFind, int startIndex) { + public static int lastIndexOf(@Nullable double[] array, double valueToFind, int startIndex) { if (ArrayUtils.isEmpty(array)) { return INDEX_NOT_FOUND; } @@ -1355,7 +1469,7 @@ public static int lastIndexOf(double[] array, double valueToFind, int startIndex return INDEX_NOT_FOUND; } - public static int lastIndexOf(double[] array, double valueToFind, int startIndex, double tolerance) { + public static int lastIndexOf(@Nullable double[] array, double valueToFind, int startIndex, double tolerance) { if (ArrayUtils.isEmpty(array)) { return INDEX_NOT_FOUND; } @@ -1374,11 +1488,11 @@ public static int lastIndexOf(double[] array, double valueToFind, int startIndex return INDEX_NOT_FOUND; } - public static boolean contains(double[] array, double valueToFind) { + public static boolean contains(@Nullable double[] array, double valueToFind) { return indexOf(array, valueToFind) != INDEX_NOT_FOUND; } - public static boolean contains(double[] array, double valueToFind, double tolerance) { + public static boolean contains(@Nullable double[] array, double valueToFind, double tolerance) { return indexOf(array, valueToFind, 0, tolerance) != INDEX_NOT_FOUND; } @@ -1386,11 +1500,11 @@ public static boolean contains(double[] array, double valueToFind, double tolera // float indexOf /////////////////////////////////////////////////////////////////////////// - public static int indexOf(float[] array, float valueToFind) { + public static int indexOf(@Nullable float[] array, float valueToFind) { return indexOf(array, valueToFind, 0); } - public static int indexOf(float[] array, float valueToFind, int startIndex) { + public static int indexOf(@Nullable float[] array, float valueToFind, int startIndex) { if (ArrayUtils.isEmpty(array)) { return INDEX_NOT_FOUND; } @@ -1405,11 +1519,11 @@ public static int indexOf(float[] array, float valueToFind, int startIndex) { return INDEX_NOT_FOUND; } - public static int lastIndexOf(float[] array, float valueToFind) { + public static int lastIndexOf(@Nullable float[] array, float valueToFind) { return lastIndexOf(array, valueToFind, Integer.MAX_VALUE); } - public static int lastIndexOf(float[] array, float valueToFind, int startIndex) { + public static int lastIndexOf(@Nullable float[] array, float valueToFind, int startIndex) { if (ArrayUtils.isEmpty(array)) { return INDEX_NOT_FOUND; } @@ -1426,7 +1540,7 @@ public static int lastIndexOf(float[] array, float valueToFind, int startIndex) return INDEX_NOT_FOUND; } - public static boolean contains(float[] array, float valueToFind) { + public static boolean contains(@Nullable float[] array, float valueToFind) { return indexOf(array, valueToFind) != INDEX_NOT_FOUND; } @@ -1434,11 +1548,11 @@ public static boolean contains(float[] array, float valueToFind) { // bool indexOf /////////////////////////////////////////////////////////////////////////// - public static int indexOf(boolean[] array, boolean valueToFind) { + public static int indexOf(@Nullable boolean[] array, boolean valueToFind) { return indexOf(array, valueToFind, 0); } - public static int indexOf(boolean[] array, boolean valueToFind, int startIndex) { + public static int indexOf(@Nullable boolean[] array, boolean valueToFind, int startIndex) { if (ArrayUtils.isEmpty(array)) { return INDEX_NOT_FOUND; } @@ -1453,11 +1567,11 @@ public static int indexOf(boolean[] array, boolean valueToFind, int startIndex) return INDEX_NOT_FOUND; } - public static int lastIndexOf(boolean[] array, boolean valueToFind) { + public static int lastIndexOf(@Nullable boolean[] array, boolean valueToFind) { return lastIndexOf(array, valueToFind, Integer.MAX_VALUE); } - public static int lastIndexOf(boolean[] array, boolean valueToFind, int startIndex) { + public static int lastIndexOf(@Nullable boolean[] array, boolean valueToFind, int startIndex) { if (ArrayUtils.isEmpty(array)) { return INDEX_NOT_FOUND; } @@ -1474,7 +1588,7 @@ public static int lastIndexOf(boolean[] array, boolean valueToFind, int startInd return INDEX_NOT_FOUND; } - public static boolean contains(boolean[] array, boolean valueToFind) { + public static boolean contains(@Nullable boolean[] array, boolean valueToFind) { return indexOf(array, valueToFind) != INDEX_NOT_FOUND; } @@ -1482,7 +1596,8 @@ public static boolean contains(boolean[] array, boolean valueToFind) { // char converters /////////////////////////////////////////////////////////////////////////// - public static char[] toPrimitive(Character[] array) { + @Nullable + public static char[] toPrimitive(@Nullable Character[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1495,7 +1610,8 @@ public static char[] toPrimitive(Character[] array) { return result; } - public static char[] toPrimitive(Character[] array, char valueForNull) { + @Nullable + public static char[] toPrimitive(@Nullable Character[] array, char valueForNull) { if (array == null) { return null; } else if (array.length == 0) { @@ -1509,7 +1625,8 @@ public static char[] toPrimitive(Character[] array, char valueForNull) { return result; } - public static Character[] toObject(char[] array) { + @Nullable + public static Character[] toObject(@Nullable char[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1526,7 +1643,8 @@ public static Character[] toObject(char[] array) { // long converters /////////////////////////////////////////////////////////////////////////// - public static long[] toPrimitive(Long[] array) { + @Nullable + public static long[] toPrimitive(@Nullable Long[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1539,7 +1657,8 @@ public static long[] toPrimitive(Long[] array) { return result; } - public static long[] toPrimitive(Long[] array, long valueForNull) { + @Nullable + public static long[] toPrimitive(@Nullable Long[] array, long valueForNull) { if (array == null) { return null; } else if (array.length == 0) { @@ -1553,7 +1672,8 @@ public static long[] toPrimitive(Long[] array, long valueForNull) { return result; } - public static Long[] toObject(long[] array) { + @Nullable + public static Long[] toObject(@Nullable long[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1570,7 +1690,8 @@ public static Long[] toObject(long[] array) { // int converters /////////////////////////////////////////////////////////////////////////// - public static int[] toPrimitive(Integer[] array) { + @Nullable + public static int[] toPrimitive(@Nullable Integer[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1583,7 +1704,8 @@ public static int[] toPrimitive(Integer[] array) { return result; } - public static int[] toPrimitive(Integer[] array, int valueForNull) { + @Nullable + public static int[] toPrimitive(@Nullable Integer[] array, int valueForNull) { if (array == null) { return null; } else if (array.length == 0) { @@ -1597,7 +1719,8 @@ public static int[] toPrimitive(Integer[] array, int valueForNull) { return result; } - public static Integer[] toObject(int[] array) { + @Nullable + public static Integer[] toObject(@Nullable int[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1614,7 +1737,8 @@ public static Integer[] toObject(int[] array) { // short converters /////////////////////////////////////////////////////////////////////////// - public static short[] toPrimitive(Short[] array) { + @Nullable + public static short[] toPrimitive(@Nullable Short[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1627,7 +1751,8 @@ public static short[] toPrimitive(Short[] array) { return result; } - public static short[] toPrimitive(Short[] array, short valueForNull) { + @Nullable + public static short[] toPrimitive(@Nullable Short[] array, short valueForNull) { if (array == null) { return null; } else if (array.length == 0) { @@ -1641,7 +1766,8 @@ public static short[] toPrimitive(Short[] array, short valueForNull) { return result; } - public static Short[] toObject(short[] array) { + @Nullable + public static Short[] toObject(@Nullable short[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1658,7 +1784,8 @@ public static Short[] toObject(short[] array) { // byte converters /////////////////////////////////////////////////////////////////////////// - public static byte[] toPrimitive(Byte[] array) { + @Nullable + public static byte[] toPrimitive(@Nullable Byte[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1671,7 +1798,8 @@ public static byte[] toPrimitive(Byte[] array) { return result; } - public static byte[] toPrimitive(Byte[] array, byte valueForNull) { + @Nullable + public static byte[] toPrimitive(@Nullable Byte[] array, byte valueForNull) { if (array == null) { return null; } else if (array.length == 0) { @@ -1685,7 +1813,8 @@ public static byte[] toPrimitive(Byte[] array, byte valueForNull) { return result; } - public static Byte[] toObject(byte[] array) { + @Nullable + public static Byte[] toObject(@Nullable byte[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1702,7 +1831,8 @@ public static Byte[] toObject(byte[] array) { // double converters /////////////////////////////////////////////////////////////////////////// - public static double[] toPrimitive(Double[] array) { + @Nullable + public static double[] toPrimitive(@Nullable Double[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1715,7 +1845,8 @@ public static double[] toPrimitive(Double[] array) { return result; } - public static double[] toPrimitive(Double[] array, double valueForNull) { + @Nullable + public static double[] toPrimitive(@Nullable Double[] array, double valueForNull) { if (array == null) { return null; } else if (array.length == 0) { @@ -1729,7 +1860,8 @@ public static double[] toPrimitive(Double[] array, double valueForNull) { return result; } - public static Double[] toObject(double[] array) { + @Nullable + public static Double[] toObject(@Nullable double[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1746,7 +1878,8 @@ public static Double[] toObject(double[] array) { // float converters /////////////////////////////////////////////////////////////////////////// - public static float[] toPrimitive(Float[] array) { + @Nullable + public static float[] toPrimitive(@Nullable Float[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1759,7 +1892,8 @@ public static float[] toPrimitive(Float[] array) { return result; } - public static float[] toPrimitive(Float[] array, float valueForNull) { + @Nullable + public static float[] toPrimitive(@Nullable Float[] array, float valueForNull) { if (array == null) { return null; } else if (array.length == 0) { @@ -1773,7 +1907,8 @@ public static float[] toPrimitive(Float[] array, float valueForNull) { return result; } - public static Float[] toObject(float[] array) { + @Nullable + public static Float[] toObject(@Nullable float[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1790,7 +1925,8 @@ public static Float[] toObject(float[] array) { // boolean converters /////////////////////////////////////////////////////////////////////////// - public static boolean[] toPrimitive(Boolean[] array) { + @Nullable + public static boolean[] toPrimitive(@Nullable Boolean[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1803,7 +1939,8 @@ public static boolean[] toPrimitive(Boolean[] array) { return result; } - public static boolean[] toPrimitive(Boolean[] array, boolean valueForNull) { + @Nullable + public static boolean[] toPrimitive(@Nullable Boolean[] array, boolean valueForNull) { if (array == null) { return null; } else if (array.length == 0) { @@ -1817,7 +1954,8 @@ public static boolean[] toPrimitive(Boolean[] array, boolean valueForNull) { return result; } - public static Boolean[] toObject(boolean[] array) { + @Nullable + public static Boolean[] toObject(@Nullable boolean[] array) { if (array == null) { return null; } else if (array.length == 0) { @@ -1830,67 +1968,71 @@ public static Boolean[] toObject(boolean[] array) { return result; } - public staticList asList(T... array) { + @NonNull + public static List asList(@Nullable T... array) { if (array == null || array.length == 0) { return Collections.emptyList(); } return Arrays.asList(array); } - public static List asUnmodifiableList(T... array) { + @NonNull + public static List asUnmodifiableList(@Nullable T... array) { return Collections.unmodifiableList(asList(array)); } - public static List asArrayList(T... array) { + @NonNull + public static List asArrayList(@Nullable T... array) { List list = new ArrayList<>(); if (array == null || array.length == 0) return list; list.addAll(Arrays.asList(array)); return list; } - public static List asLinkedList(T... array) { + @NonNull + public static List asLinkedList(@Nullable T... array) { List list = new LinkedList<>(); if (array == null || array.length == 0) return list; list.addAll(Arrays.asList(array)); return list; } - public static void sort(T[] array, Comparator super T> c) { + public static void sort(@Nullable T[] array, Comparator super T> c) { if (array == null || array.length < 2) return; Arrays.sort(array, c); } - public static void sort(byte[] array) { + public static void sort(@Nullable byte[] array) { if (array == null || array.length < 2) return; Arrays.sort(array); } - public static void sort(char[] array) { + public static void sort(@Nullable char[] array) { if (array == null || array.length < 2) return; Arrays.sort(array); } - public static void sort(double[] array) { + public static void sort(@Nullable double[] array) { if (array == null || array.length < 2) return; Arrays.sort(array); } - public static void sort(float[] array) { + public static void sort(@Nullable float[] array) { if (array == null || array.length < 2) return; Arrays.sort(array); } - public static void sort(int[] array) { + public static void sort(@Nullable int[] array) { if (array == null || array.length < 2) return; Arrays.sort(array); } - public static void sort(long[] array) { + public static void sort(@Nullable long[] array) { if (array == null || array.length < 2) return; Arrays.sort(array); } - public static void sort(short[] array) { + public static void sort(@Nullable short[] array) { if (array == null || array.length < 2) return; Arrays.sort(array); } @@ -1903,7 +2045,7 @@ public static void sort(short[] array) { * @param array The array. * @param closure the closure to perform, may be null */ - public static void forAllDo(Object array, Closure closure) { + public static void forAllDo(@Nullable Object array, @Nullable Closure closure) { if (array == null || closure == null) return; if (array instanceof Object[]) { Object[] objects = (Object[]) array; @@ -1970,7 +2112,8 @@ public static void forAllDo(Object array, Closure closure) { * @param array The array. * @return the string of array */ - public static String toString(Object array) { + @NonNull + public static String toString(@Nullable Object array) { if (array == null) return "null"; if (array instanceof Object[]) { return Arrays.deepToString((Object[]) array); diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java index 0092763b12..90acac5882 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java @@ -194,14 +194,14 @@ public static void subtractMarginTopEqualStatusBarHeight(@NonNull View view) { view.setTag(KEY_OFFSET, false); } - private static void addMarginTopEqualStatusBarHeight(final Window window) { + private static void addMarginTopEqualStatusBarHeight(@NonNull final Window window) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return; View withTag = window.getDecorView().findViewWithTag(TAG_OFFSET); if (withTag == null) return; addMarginTopEqualStatusBarHeight(withTag); } - private static void subtractMarginTopEqualStatusBarHeight(final Window window) { + private static void subtractMarginTopEqualStatusBarHeight(@NonNull final Window window) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return; View withTag = window.getDecorView().findViewWithTag(TAG_OFFSET); if (withTag == null) return; @@ -349,13 +349,13 @@ public static void setStatusBarColor4Drawer(@NonNull final DrawerLayout drawer, } } - private static View applyStatusBarColor(final Activity activity, + private static View applyStatusBarColor(@NonNull final Activity activity, final int color, boolean isDecor) { return applyStatusBarColor(activity.getWindow(), color, isDecor); } - private static View applyStatusBarColor(final Window window, + private static View applyStatusBarColor(@NonNull final Window window, final int color, boolean isDecor) { ViewGroup parent = isDecor ? @@ -374,25 +374,25 @@ private static View applyStatusBarColor(final Window window, return fakeStatusBarView; } - private static void hideStatusBarView(final Activity activity) { + private static void hideStatusBarView(@NonNull final Activity activity) { hideStatusBarView(activity.getWindow()); } - private static void hideStatusBarView(final Window window) { + private static void hideStatusBarView(@NonNull final Window window) { ViewGroup decorView = (ViewGroup) window.getDecorView(); View fakeStatusBarView = decorView.findViewWithTag(TAG_STATUS_BAR); if (fakeStatusBarView == null) return; fakeStatusBarView.setVisibility(View.GONE); } - private static void showStatusBarView(final Window window) { + private static void showStatusBarView(@NonNull final Window window) { ViewGroup decorView = (ViewGroup) window.getDecorView(); View fakeStatusBarView = decorView.findViewWithTag(TAG_STATUS_BAR); if (fakeStatusBarView == null) return; fakeStatusBarView.setVisibility(View.VISIBLE); } - private static View createStatusBarView(final Context context, + private static View createStatusBarView(@NonNull final Context context, final int color) { View statusBarView = new View(context); statusBarView.setLayoutParams(new ViewGroup.LayoutParams( @@ -402,11 +402,11 @@ private static View createStatusBarView(final Context context, return statusBarView; } - public static void transparentStatusBar(final Activity activity) { + public static void transparentStatusBar(@NonNull final Activity activity) { transparentStatusBar(activity.getWindow()); } - public static void transparentStatusBar(final Window window) { + public static void transparentStatusBar(@NonNull final Window window) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java index f9344b0a59..0a3dc27632 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java @@ -105,7 +105,7 @@ public static void setWindowBrightness(@NonNull final Window window, * @param window 窗口 * @return 屏幕亮度 0-255 */ - public static int getWindowBrightness(final Window window) { + public static int getWindowBrightness(@NonNull final Window window) { WindowManager.LayoutParams lp = window.getAttributes(); float brightness = lp.screenBrightness; if (brightness < 0) return getBrightness(); diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/BusUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/BusUtils.java index 0eb9ec86fa..c06f86fae8 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/BusUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/BusUtils.java @@ -1,5 +1,7 @@ package com.blankj.utilcode.util; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.util.Log; import java.lang.annotation.ElementType; @@ -61,27 +63,27 @@ private void registerBus(String tag, busInfoList.add(new BusInfo(tag, className, funName, paramType, paramName, sticky, threadMode, priority)); } - public static void register(final Object bus) { + public static void register(@Nullable final Object bus) { getInstance().registerInner(bus); } - public static void unregister(final Object bus) { + public static void unregister(@Nullable final Object bus) { getInstance().unregisterInner(bus); } - public static void post(final String tag) { + public static void post(@NonNull final String tag) { post(tag, NULL); } - public static void post(final String tag, final Object arg) { + public static void post(@NonNull final String tag, @NonNull final Object arg) { getInstance().postInner(tag, arg); } - public static void postSticky(final String tag) { + public static void postSticky(@NonNull final String tag) { postSticky(tag, NULL); } - public static void postSticky(final String tag, final Object arg) { + public static void postSticky(@NonNull final String tag, final Object arg) { getInstance().postStickyInner(tag, arg); } @@ -102,7 +104,7 @@ private static BusUtils getInstance() { return LazyHolder.INSTANCE; } - private void registerInner(final Object bus) { + private void registerInner(@Nullable final Object bus) { if (bus == null) return; Class> aClass = bus.getClass(); String className = aClass.getName(); diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java index bb48a4b5cf..7a1a1f199d 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java @@ -4,6 +4,7 @@ import android.graphics.drawable.Drawable; import android.os.Parcelable; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import org.json.JSONArray; import org.json.JSONObject; @@ -27,7 +28,7 @@ public final class CacheDiskStaticUtils { * * @param cacheDiskUtils The default instance of {@link CacheDiskUtils}. */ - public static void setDefaultCacheDiskUtils(final CacheDiskUtils cacheDiskUtils) { + public static void setDefaultCacheDiskUtils(@Nullable final CacheDiskUtils cacheDiskUtils) { sDefaultCacheDiskUtils = cacheDiskUtils; } @@ -37,7 +38,7 @@ public static void setDefaultCacheDiskUtils(final CacheDiskUtils cacheDiskUtils) * @param key The key of cache. * @param value The value of cache. */ - public static void put(@NonNull final String key, final byte[] value) { + public static void put(@NonNull final String key, @Nullable final byte[] value) { put(key, value, getDefaultCacheDiskUtils()); } @@ -48,7 +49,7 @@ public static void put(@NonNull final String key, final byte[] value) { * @param value The value of cache. * @param saveTime The save time of cache, in seconds. */ - public static void put(@NonNull final String key, final byte[] value, final int saveTime) { + public static void put(@NonNull final String key, @Nullable final byte[] value, final int saveTime) { put(key, value, saveTime, getDefaultCacheDiskUtils()); } @@ -69,7 +70,7 @@ public static byte[] getBytes(@NonNull final String key) { * @param defaultValue The default value if the cache doesn't exist. * @return the bytes if cache exists or defaultValue otherwise */ - public static byte[] getBytes(@NonNull final String key, final byte[] defaultValue) { + public static byte[] getBytes(@NonNull final String key, @Nullable final byte[] defaultValue) { return getBytes(key, defaultValue, getDefaultCacheDiskUtils()); } @@ -83,7 +84,7 @@ public static byte[] getBytes(@NonNull final String key, final byte[] defaultVal * @param key The key of cache. * @param value The value of cache. */ - public static void put(@NonNull final String key, final String value) { + public static void put(@NonNull final String key, @Nullable final String value) { put(key, value, getDefaultCacheDiskUtils()); } @@ -94,7 +95,7 @@ public static void put(@NonNull final String key, final String value) { * @param value The value of cache. * @param saveTime The save time of cache, in seconds. */ - public static void put(@NonNull final String key, final String value, final int saveTime) { + public static void put(@NonNull final String key, @Nullable final String value, final int saveTime) { put(key, value, saveTime, getDefaultCacheDiskUtils()); } @@ -115,7 +116,7 @@ public static String getString(@NonNull final String key) { * @param defaultValue The default value if the cache doesn't exist. * @return the string value if cache exists or defaultValue otherwise */ - public static String getString(@NonNull final String key, final String defaultValue) { + public static String getString(@NonNull final String key, @Nullable final String defaultValue) { return getString(key, defaultValue, getDefaultCacheDiskUtils()); } @@ -129,7 +130,7 @@ public static String getString(@NonNull final String key, final String defaultVa * @param key The key of cache. * @param value The value of cache. */ - public static void put(@NonNull final String key, final JSONObject value) { + public static void put(@NonNull final String key, @Nullable final JSONObject value) { put(key, value, getDefaultCacheDiskUtils()); } @@ -141,7 +142,7 @@ public static void put(@NonNull final String key, final JSONObject value) { * @param saveTime The save time of cache, in seconds. */ public static void put(@NonNull final String key, - final JSONObject value, + @Nullable final JSONObject value, final int saveTime) { put(key, value, saveTime, getDefaultCacheDiskUtils()); } @@ -163,7 +164,7 @@ public static JSONObject getJSONObject(@NonNull final String key) { * @param defaultValue The default value if the cache doesn't exist. * @return the JSONObject if cache exists or defaultValue otherwise */ - public static JSONObject getJSONObject(@NonNull final String key, final JSONObject defaultValue) { + public static JSONObject getJSONObject(@NonNull final String key, @Nullable final JSONObject defaultValue) { return getJSONObject(key, defaultValue, getDefaultCacheDiskUtils()); } @@ -178,7 +179,7 @@ public static JSONObject getJSONObject(@NonNull final String key, final JSONObje * @param key The key of cache. * @param value The value of cache. */ - public static void put(@NonNull final String key, final JSONArray value) { + public static void put(@NonNull final String key, @Nullable final JSONArray value) { put(key, value, getDefaultCacheDiskUtils()); } @@ -189,7 +190,7 @@ public static void put(@NonNull final String key, final JSONArray value) { * @param value The value of cache. * @param saveTime The save time of cache, in seconds. */ - public static void put(@NonNull final String key, final JSONArray value, final int saveTime) { + public static void put(@NonNull final String key, @Nullable final JSONArray value, final int saveTime) { put(key, value, saveTime, getDefaultCacheDiskUtils()); } @@ -210,7 +211,7 @@ public static JSONArray getJSONArray(@NonNull final String key) { * @param defaultValue The default value if the cache doesn't exist. * @return the JSONArray if cache exists or defaultValue otherwise */ - public static JSONArray getJSONArray(@NonNull final String key, final JSONArray defaultValue) { + public static JSONArray getJSONArray(@NonNull final String key, @Nullable final JSONArray defaultValue) { return getJSONArray(key, defaultValue, getDefaultCacheDiskUtils()); } @@ -225,7 +226,7 @@ public static JSONArray getJSONArray(@NonNull final String key, final JSONArray * @param key The key of cache. * @param value The value of cache. */ - public static void put(@NonNull final String key, final Bitmap value) { + public static void put(@NonNull final String key, @Nullable final Bitmap value) { put(key, value, getDefaultCacheDiskUtils()); } @@ -236,7 +237,7 @@ public static void put(@NonNull final String key, final Bitmap value) { * @param value The value of cache. * @param saveTime The save time of cache, in seconds. */ - public static void put(@NonNull final String key, final Bitmap value, final int saveTime) { + public static void put(@NonNull final String key, @Nullable final Bitmap value, final int saveTime) { put(key, value, saveTime, getDefaultCacheDiskUtils()); } @@ -257,7 +258,7 @@ public static Bitmap getBitmap(@NonNull final String key) { * @param defaultValue The default value if the cache doesn't exist. * @return the bitmap if cache exists or defaultValue otherwise */ - public static Bitmap getBitmap(@NonNull final String key, final Bitmap defaultValue) { + public static Bitmap getBitmap(@NonNull final String key, @Nullable final Bitmap defaultValue) { return getBitmap(key, defaultValue, getDefaultCacheDiskUtils()); } @@ -271,7 +272,7 @@ public static Bitmap getBitmap(@NonNull final String key, final Bitmap defaultVa * @param key The key of cache. * @param value The value of cache. */ - public static void put(@NonNull final String key, final Drawable value) { + public static void put(@NonNull final String key, @Nullable final Drawable value) { put(key, value, getDefaultCacheDiskUtils()); } @@ -282,7 +283,7 @@ public static void put(@NonNull final String key, final Drawable value) { * @param value The value of cache. * @param saveTime The save time of cache, in seconds. */ - public static void put(@NonNull final String key, final Drawable value, final int saveTime) { + public static void put(@NonNull final String key, @Nullable final Drawable value, final int saveTime) { put(key, value, saveTime, getDefaultCacheDiskUtils()); } @@ -303,7 +304,7 @@ public static Drawable getDrawable(@NonNull final String key) { * @param defaultValue The default value if the cache doesn't exist. * @return the drawable if cache exists or defaultValue otherwise */ - public static Drawable getDrawable(@NonNull final String key, final Drawable defaultValue) { + public static Drawable getDrawable(@NonNull final String key, final @Nullable Drawable defaultValue) { return getDrawable(key, defaultValue, getDefaultCacheDiskUtils()); } @@ -317,7 +318,7 @@ public static Drawable getDrawable(@NonNull final String key, final Drawable def * @param key The key of cache. * @param value The value of cache. */ - public static void put(@NonNull final String key, final Parcelable value) { + public static void put(@NonNull final String key, @Nullable final Parcelable value) { put(key, value, getDefaultCacheDiskUtils()); } @@ -328,7 +329,7 @@ public static void put(@NonNull final String key, final Parcelable value) { * @param value The value of cache. * @param saveTime The save time of cache, in seconds. */ - public static void put(@NonNull final String key, final Parcelable value, final int saveTime) { + public static void put(@NonNull final String key, @Nullable final Parcelable value, final int saveTime) { put(key, value, saveTime, getDefaultCacheDiskUtils()); } @@ -356,7 +357,7 @@ public static T getParcelable(@NonNull final String key, */ public static T getParcelable(@NonNull final String key, @NonNull final Parcelable.Creator creator, - final T defaultValue) { + @Nullable final T defaultValue) { return getParcelable(key, creator, defaultValue, getDefaultCacheDiskUtils()); } @@ -370,7 +371,7 @@ public static T getParcelable(@NonNull final String key, * @param key The key of cache. * @param value The value of cache. */ - public static void put(@NonNull final String key, final Serializable value) { + public static void put(@NonNull final String key, @Nullable final Serializable value) { put(key, value, getDefaultCacheDiskUtils()); } @@ -381,7 +382,7 @@ public static void put(@NonNull final String key, final Serializable value) { * @param value The value of cache. * @param saveTime The save time of cache, in seconds. */ - public static void put(@NonNull final String key, final Serializable value, final int saveTime) { + public static void put(@NonNull final String key, @Nullable final Serializable value, final int saveTime) { put(key, value, saveTime, getDefaultCacheDiskUtils()); } @@ -402,7 +403,7 @@ public static Object getSerializable(@NonNull final String key) { * @param defaultValue The default value if the cache doesn't exist. * @return the bitmap if cache exists or defaultValue otherwise */ - public static Object getSerializable(@NonNull final String key, final Object defaultValue) { + public static Object getSerializable(@NonNull final String key, @Nullable final Object defaultValue) { return getSerializable(key, defaultValue, getDefaultCacheDiskUtils()); } @@ -455,7 +456,7 @@ public static boolean clear() { * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final byte[] value, + @Nullable final byte[] value, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value); } @@ -469,7 +470,7 @@ public static void put(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final byte[] value, + @Nullable final byte[] value, final int saveTime, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value, saveTime); @@ -495,7 +496,7 @@ public static byte[] getBytes(@NonNull final String key, @NonNull final CacheDis * @return the bytes if cache exists or defaultValue otherwise */ public static byte[] getBytes(@NonNull final String key, - final byte[] defaultValue, + @Nullable final byte[] defaultValue, @NonNull final CacheDiskUtils cacheDiskUtils) { return cacheDiskUtils.getBytes(key, defaultValue); } @@ -512,7 +513,7 @@ public static byte[] getBytes(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final String value, + @Nullable final String value, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value); } @@ -526,7 +527,7 @@ public static void put(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final String value, + @Nullable final String value, final int saveTime, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value, saveTime); @@ -552,7 +553,7 @@ public static String getString(@NonNull final String key, @NonNull final CacheDi * @return the string value if cache exists or defaultValue otherwise */ public static String getString(@NonNull final String key, - final String defaultValue, + @Nullable final String defaultValue, @NonNull final CacheDiskUtils cacheDiskUtils) { return cacheDiskUtils.getString(key, defaultValue); } @@ -569,7 +570,7 @@ public static String getString(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final JSONObject value, + @Nullable final JSONObject value, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value); } @@ -583,7 +584,7 @@ public static void put(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final JSONObject value, + @Nullable final JSONObject value, final int saveTime, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value, saveTime); @@ -609,7 +610,7 @@ public static JSONObject getJSONObject(@NonNull final String key, @NonNull final * @return the JSONObject if cache exists or defaultValue otherwise */ public static JSONObject getJSONObject(@NonNull final String key, - final JSONObject defaultValue, + @Nullable final JSONObject defaultValue, @NonNull final CacheDiskUtils cacheDiskUtils) { return cacheDiskUtils.getJSONObject(key, defaultValue); } @@ -627,7 +628,7 @@ public static JSONObject getJSONObject(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final JSONArray value, + @Nullable final JSONArray value, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value); } @@ -641,7 +642,7 @@ public static void put(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final JSONArray value, + @Nullable final JSONArray value, final int saveTime, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value, saveTime); @@ -667,7 +668,7 @@ public static JSONArray getJSONArray(@NonNull final String key, @NonNull final C * @return the JSONArray if cache exists or defaultValue otherwise */ public static JSONArray getJSONArray(@NonNull final String key, - final JSONArray defaultValue, + @Nullable final JSONArray defaultValue, @NonNull final CacheDiskUtils cacheDiskUtils) { return cacheDiskUtils.getJSONArray(key, defaultValue); } @@ -685,7 +686,7 @@ public static JSONArray getJSONArray(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final Bitmap value, + @Nullable final Bitmap value, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value); } @@ -699,7 +700,7 @@ public static void put(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final Bitmap value, + @Nullable final Bitmap value, final int saveTime, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value, saveTime); @@ -725,7 +726,7 @@ public static Bitmap getBitmap(@NonNull final String key, @NonNull final CacheDi * @return the bitmap if cache exists or defaultValue otherwise */ public static Bitmap getBitmap(@NonNull final String key, - final Bitmap defaultValue, + @Nullable final Bitmap defaultValue, @NonNull final CacheDiskUtils cacheDiskUtils) { return cacheDiskUtils.getBitmap(key, defaultValue); } @@ -742,7 +743,7 @@ public static Bitmap getBitmap(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final Drawable value, + @Nullable final Drawable value, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value); } @@ -756,7 +757,7 @@ public static void put(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final Drawable value, + @Nullable final Drawable value, final int saveTime, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value, saveTime); @@ -782,7 +783,7 @@ public static Drawable getDrawable(@NonNull final String key, @NonNull final Cac * @return the drawable if cache exists or defaultValue otherwise */ public static Drawable getDrawable(@NonNull final String key, - final Drawable defaultValue, + @Nullable final Drawable defaultValue, @NonNull final CacheDiskUtils cacheDiskUtils) { return cacheDiskUtils.getDrawable(key, defaultValue); } @@ -799,7 +800,7 @@ public static Drawable getDrawable(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final Parcelable value, + @Nullable final Parcelable value, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value); } @@ -813,7 +814,7 @@ public static void put(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final Parcelable value, + @Nullable final Parcelable value, final int saveTime, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value, saveTime); @@ -846,7 +847,7 @@ public static T getParcelable(@NonNull final String key, */ public static T getParcelable(@NonNull final String key, @NonNull final Parcelable.Creator creator, - final T defaultValue, + @Nullable final T defaultValue, @NonNull final CacheDiskUtils cacheDiskUtils) { return cacheDiskUtils.getParcelable(key, creator, defaultValue); } @@ -863,7 +864,7 @@ public static T getParcelable(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final Serializable value, + @Nullable final Serializable value, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value); } @@ -877,7 +878,7 @@ public static void put(@NonNull final String key, * @param cacheDiskUtils The instance of {@link CacheDiskUtils}. */ public static void put(@NonNull final String key, - final Serializable value, + @Nullable final Serializable value, final int saveTime, @NonNull final CacheDiskUtils cacheDiskUtils) { cacheDiskUtils.put(key, value, saveTime); @@ -903,7 +904,7 @@ public static Object getSerializable(@NonNull final String key, @NonNull final C * @return the bitmap if cache exists or defaultValue otherwise */ public static Object getSerializable(@NonNull final String key, - final Object defaultValue, + @Nullable final Object defaultValue, @NonNull final CacheDiskUtils cacheDiskUtils) { return cacheDiskUtils.getSerializable(key, defaultValue); } @@ -949,6 +950,7 @@ public static boolean clear(@NonNull final CacheDiskUtils cacheDiskUtils) { return cacheDiskUtils.clear(); } + @NonNull private static CacheDiskUtils getDefaultCacheDiskUtils() { return sDefaultCacheDiskUtils != null ? sDefaultCacheDiskUtils : CacheDiskUtils.getInstance(); } diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java index c800423c78..1cc8324990 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java @@ -113,7 +113,12 @@ public byte[] getBytes(@NonNull final String key) { public byte[] getBytes(@NonNull final String key, final byte[] defaultValue) { byte[] obj = mCacheMemoryUtils.get(key); if (obj != null) return obj; - return mCacheDiskUtils.getBytes(key, defaultValue); + byte[] bytes = mCacheDiskUtils.getBytes(key); + if (bytes != null) { + mCacheMemoryUtils.put(key, bytes); + return bytes; + } + return defaultValue; } /////////////////////////////////////////////////////////////////////////// @@ -162,7 +167,12 @@ public String getString(@NonNull final String key) { public String getString(@NonNull final String key, final String defaultValue) { String obj = mCacheMemoryUtils.get(key); if (obj != null) return obj; - return mCacheDiskUtils.getString(key, defaultValue); + String string = mCacheDiskUtils.getString(key); + if (string != null) { + mCacheMemoryUtils.put(key, string); + return string; + } + return defaultValue; } /////////////////////////////////////////////////////////////////////////// @@ -213,7 +223,12 @@ public JSONObject getJSONObject(@NonNull final String key) { public JSONObject getJSONObject(@NonNull final String key, final JSONObject defaultValue) { JSONObject obj = mCacheMemoryUtils.get(key); if (obj != null) return obj; - return mCacheDiskUtils.getJSONObject(key, defaultValue); + JSONObject jsonObject = mCacheDiskUtils.getJSONObject(key); + if (jsonObject != null) { + mCacheMemoryUtils.put(key, jsonObject); + return jsonObject; + } + return defaultValue; } @@ -263,7 +278,12 @@ public JSONArray getJSONArray(@NonNull final String key) { public JSONArray getJSONArray(@NonNull final String key, final JSONArray defaultValue) { JSONArray obj = mCacheMemoryUtils.get(key); if (obj != null) return obj; - return mCacheDiskUtils.getJSONArray(key, defaultValue); + JSONArray jsonArray = mCacheDiskUtils.getJSONArray(key); + if (jsonArray != null) { + mCacheMemoryUtils.put(key, jsonArray); + return jsonArray; + } + return defaultValue; } /////////////////////////////////////////////////////////////////////////// @@ -312,7 +332,12 @@ public Bitmap getBitmap(@NonNull final String key) { public Bitmap getBitmap(@NonNull final String key, final Bitmap defaultValue) { Bitmap obj = mCacheMemoryUtils.get(key); if (obj != null) return obj; - return mCacheDiskUtils.getBitmap(key, defaultValue); + Bitmap bitmap = mCacheDiskUtils.getBitmap(key); + if (bitmap != null) { + mCacheMemoryUtils.put(key, bitmap); + return bitmap; + } + return defaultValue; } /////////////////////////////////////////////////////////////////////////// @@ -361,7 +386,12 @@ public Drawable getDrawable(@NonNull final String key) { public Drawable getDrawable(@NonNull final String key, final Drawable defaultValue) { Drawable obj = mCacheMemoryUtils.get(key); if (obj != null) return obj; - return mCacheDiskUtils.getDrawable(key, defaultValue); + Drawable drawable = mCacheDiskUtils.getDrawable(key); + if (drawable != null) { + mCacheMemoryUtils.put(key, drawable); + return drawable; + } + return defaultValue; } /////////////////////////////////////////////////////////////////////////// @@ -417,7 +447,12 @@ public T getParcelable(@NonNull final String key, final T defaultValue) { T value = mCacheMemoryUtils.get(key); if (value != null) return value; - return mCacheDiskUtils.getParcelable(key, creator, defaultValue); + T val = mCacheDiskUtils.getParcelable(key, creator); + if (val != null) { + mCacheMemoryUtils.put(key, val); + return val; + } + return defaultValue; } /////////////////////////////////////////////////////////////////////////// @@ -466,7 +501,12 @@ public Object getSerializable(@NonNull final String key) { public Object getSerializable(@NonNull final String key, final Object defaultValue) { Object obj = mCacheMemoryUtils.get(key); if (obj != null) return obj; - return mCacheDiskUtils.getSerializable(key, defaultValue); + Object serializable = mCacheDiskUtils.getSerializable(key); + if (serializable != null) { + mCacheMemoryUtils.put(key, serializable); + return serializable; + } + return defaultValue; } /** diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java index 3e56907eb2..8ddc4344a4 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java @@ -1525,6 +1525,7 @@ private static void operate(final int type, break; } ft.commitAllowingStateLoss(); + fm.executePendingTransactions(); } private static void addAnim(final FragmentTransaction ft, diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java index 242b9dcfd5..7df105a3bc 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java @@ -40,6 +40,8 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; +import android.support.v4.content.ContextCompat; +import android.text.TextUtils; import android.util.Log; import android.view.View; @@ -85,7 +87,7 @@ public static byte[] bitmap2Bytes(final Bitmap bitmap) { * @param quality The quality. * @return bytes */ - public static byte[] bitmap2Bytes(final Bitmap bitmap, final CompressFormat format, int quality) { + public static byte[] bitmap2Bytes(@Nullable final Bitmap bitmap, @NonNull final CompressFormat format, int quality) { if (bitmap == null) return null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(format, quality, baos); @@ -98,7 +100,7 @@ public static byte[] bitmap2Bytes(final Bitmap bitmap, final CompressFormat form * @param bytes The bytes. * @return bitmap */ - public static Bitmap bytes2Bitmap(final byte[] bytes) { + public static Bitmap bytes2Bitmap(@Nullable final byte[] bytes) { return (bytes == null || bytes.length == 0) ? null : BitmapFactory.decodeByteArray(bytes, 0, bytes.length); @@ -110,7 +112,8 @@ public static Bitmap bytes2Bitmap(final byte[] bytes) { * @param drawable The drawable. * @return bitmap */ - public static Bitmap drawable2Bitmap(final Drawable drawable) { + public static Bitmap drawable2Bitmap(@Nullable final Drawable drawable) { + if (drawable == null) return null; if (drawable instanceof BitmapDrawable) { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; if (bitmapDrawable.getBitmap() != null) { @@ -142,7 +145,7 @@ public static Bitmap drawable2Bitmap(final Drawable drawable) { * @param bitmap The bitmap. * @return drawable */ - public static Drawable bitmap2Drawable(final Bitmap bitmap) { + public static Drawable bitmap2Drawable(@Nullable final Bitmap bitmap) { return bitmap == null ? null : new BitmapDrawable(Utils.getApp().getResources(), bitmap); } @@ -152,7 +155,7 @@ public static Drawable bitmap2Drawable(final Bitmap bitmap) { * @param drawable The drawable. * @return bytes */ - public static byte[] drawable2Bytes(final Drawable drawable) { + public static byte[] drawable2Bytes(@Nullable final Drawable drawable) { return drawable == null ? null : bitmap2Bytes(drawable2Bitmap(drawable)); } @@ -340,7 +343,18 @@ public static Bitmap getBitmap(final byte[] data, * @return bitmap */ public static Bitmap getBitmap(@DrawableRes final int resId) { - return BitmapFactory.decodeResource(Utils.getApp().getResources(), resId); + Drawable drawable = ContextCompat.getDrawable(Utils.getApp(), resId); + if (drawable == null) { + return null; + } + Canvas canvas = new Canvas(); + Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), + drawable.getIntrinsicHeight(), + Bitmap.Config.ARGB_8888); + canvas.setBitmap(bitmap); + drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); + drawable.draw(canvas); + return bitmap; } /** @@ -1753,24 +1767,87 @@ public static boolean save(final Bitmap src, @Nullable public static File save2Album(final Bitmap src, final CompressFormat format) { - return save2Album(src, format, 100, false); + return save2Album(src, "", format, 100, false); + } + + /** + * @param src The source of bitmap. + * @param format The format of the image. + * @param recycle True to recycle the source of bitmap, false otherwise. + * @return the file if save success, otherwise return null. + */ + @Nullable + public static File save2Album(final Bitmap src, + final CompressFormat format, + final boolean recycle) { + return save2Album(src, "", format, 100, recycle); + } + + /** + * @param src The source of bitmap. + * @param format The format of the image. + * @param quality Hint to the compressor, 0-100. 0 meaning compress for + * small size, 100 meaning compress for max quality. Some + * formats, like PNG which is lossless, will ignore the + * quality setting + * @return the file if save success, otherwise return null. + */ + @Nullable + public static File save2Album(final Bitmap src, + final CompressFormat format, + final int quality) { + return save2Album(src, "", format, quality, false); + } + + /** + * @param src The source of bitmap. + * @param format The format of the image. + * @param quality Hint to the compressor, 0-100. 0 meaning compress for + * small size, 100 meaning compress for max quality. Some + * formats, like PNG which is lossless, will ignore the + * quality setting + * @param recycle True to recycle the source of bitmap, false otherwise. + * @return the file if save success, otherwise return null. + */ + @Nullable + public static File save2Album(final Bitmap src, + final CompressFormat format, + final int quality, + final boolean recycle) { + return save2Album(src, "", format, quality, recycle); + } + + /** + * @param src The source of bitmap. + * @param dirName The name of directory. + * @param format The format of the image. + * @return the file if save success, otherwise return null. + */ + @Nullable + public static File save2Album(final Bitmap src, + final String dirName, + final CompressFormat format) { + return save2Album(src, dirName, format, 100, false); } /** * @param src The source of bitmap. + * @param dirName The name of directory. * @param format The format of the image. * @param recycle True to recycle the source of bitmap, false otherwise. * @return the file if save success, otherwise return null. */ @Nullable public static File save2Album(final Bitmap src, + final String dirName, final CompressFormat format, final boolean recycle) { - return save2Album(src, format, 100, recycle); + return save2Album(src, dirName, format, 100, recycle); } /** * @param src The source of bitmap. + * @param dirName The name of directory. * @param format The format of the image. * @param quality Hint to the compressor, 0-100. 0 meaning compress for * small size, 100 meaning compress for max quality. Some @@ -1780,13 +1857,15 @@ public static File save2Album(final Bitmap src, */ @Nullable public static File save2Album(final Bitmap src, + final String dirName, final CompressFormat format, final int quality) { - return save2Album(src, format, quality, false); + return save2Album(src, dirName, format, quality, false); } /** * @param src The source of bitmap. + * @param dirName The name of directory. * @param format The format of the image. * @param quality Hint to the compressor, 0-100. 0 meaning compress for * small size, 100 meaning compress for max quality. Some @@ -1797,9 +1876,11 @@ public static File save2Album(final Bitmap src, */ @Nullable public static File save2Album(final Bitmap src, + final String dirName, final CompressFormat format, final int quality, final boolean recycle) { + String safeDirName = TextUtils.isEmpty(dirName) ? Utils.getApp().getPackageName() : dirName; String suffix = CompressFormat.JPEG.equals(format) ? "JPG" : format.name(); String fileName = System.currentTimeMillis() + "_" + quality + "." + suffix; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { @@ -1808,7 +1889,7 @@ public static File save2Album(final Bitmap src, return null; } File picDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); - File destFile = new File(picDir, Utils.getApp().getPackageName() + "/" + fileName); + File destFile = new File(picDir, safeDirName + "/" + fileName); if (!save(src, destFile, format, quality, recycle)) { return null; } @@ -1824,7 +1905,7 @@ public static File save2Album(final Bitmap src, } else { contentUri = MediaStore.Images.Media.INTERNAL_CONTENT_URI; } - contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DCIM + "/" + Utils.getApp().getPackageName()); + contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DCIM + "/" + safeDirName); contentValues.put(MediaStore.MediaColumns.IS_PENDING, 1); Uri uri = Utils.getApp().getContentResolver().insert(contentUri, contentValues); if (uri == null) { diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java index 2364db719c..4a821458fa 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java @@ -8,6 +8,7 @@ import android.os.Bundle; import android.provider.MediaStore; import android.provider.Settings; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RequiresPermission; import android.support.v4.content.FileProvider; @@ -402,8 +403,8 @@ public static Intent getShutdownIntent() { * @param phoneNumber The phone number. * @return the intent of dial */ - public static Intent getDialIntent(final String phoneNumber) { - Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phoneNumber)); + public static Intent getDialIntent(@NonNull final String phoneNumber) { + Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + Uri.encode(phoneNumber))); return getIntent(intent, true); } @@ -415,8 +416,8 @@ public static Intent getDialIntent(final String phoneNumber) { * @return the intent of call */ @RequiresPermission(CALL_PHONE) - public static Intent getCallIntent(final String phoneNumber) { - Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + phoneNumber)); + public static Intent getCallIntent(@NonNull final String phoneNumber) { + Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + Uri.encode(phoneNumber))); return getIntent(intent, true); } @@ -427,8 +428,8 @@ public static Intent getCallIntent(final String phoneNumber) { * @param content The content of SMS. * @return the intent of send SMS */ - public static Intent getSendSmsIntent(final String phoneNumber, final String content) { - Uri uri = Uri.parse("smsto:" + phoneNumber); + public static Intent getSendSmsIntent(@NonNull final String phoneNumber, final String content) { + Uri uri = Uri.parse("smsto:" + Uri.encode(phoneNumber)); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); intent.putExtra("sms_body", content); return getIntent(intent, true); diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/PhoneUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/PhoneUtils.java index 1e5e2982a3..972d804e16 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/PhoneUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/PhoneUtils.java @@ -3,6 +3,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.os.Build; +import android.support.annotation.NonNull; import android.support.annotation.RequiresPermission; import android.telephony.TelephonyManager; import android.text.TextUtils; @@ -288,7 +289,7 @@ public static String getSimOperatorByMnc() { * * @param phoneNumber The phone number. */ - public static void dial(final String phoneNumber) { + public static void dial(@NonNull final String phoneNumber) { Utils.getApp().startActivity(UtilsBridge.getDialIntent(phoneNumber)); } @@ -299,7 +300,7 @@ public static void dial(final String phoneNumber) { * @param phoneNumber The phone number. */ @RequiresPermission(CALL_PHONE) - public static void call(final String phoneNumber) { + public static void call(@NonNull final String phoneNumber) { Utils.getApp().startActivity(UtilsBridge.getCallIntent(phoneNumber)); } @@ -309,7 +310,7 @@ public static void call(final String phoneNumber) { * @param phoneNumber The phone number. * @param content The content. */ - public static void sendSms(final String phoneNumber, final String content) { + public static void sendSms(@NonNull final String phoneNumber, final String content) { Utils.getApp().startActivity(UtilsBridge.getSendSmsIntent(phoneNumber, content)); } diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/RomUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/RomUtils.java index 90f2255cf1..49e1cf6fcf 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/RomUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/RomUtils.java @@ -38,7 +38,7 @@ public final class RomUtils { private static final String[] ROM_SAMSUNG = {"samsung"}; private static final String[] ROM_MEIZU = {"meizu"}; private static final String[] ROM_LENOVO = {"lenovo"}; - private static final String[] ROM_SMARTISAN = {"smartisan"}; + private static final String[] ROM_SMARTISAN = {"smartisan", "deltainno"}; private static final String[] ROM_HTC = {"htc"}; private static final String[] ROM_SONY = {"sony"}; private static final String[] ROM_GIONEE = {"gionee", "amigo"}; diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java index fbc3ff02ff..ca14204dfc 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java @@ -47,7 +47,7 @@ public final class SnackbarUtils { private static final int COLOR_ERROR = 0xFFFF0000; private static final int COLOR_MESSAGE = 0xFFFFFFFF; - private static WeakReference sReference; + private static WeakReference sWeakSnackbar; private View view; private CharSequence message; @@ -223,11 +223,11 @@ public Snackbar show(boolean isShowTop) { spannableString.setSpan( colorSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); - sReference = new WeakReference<>(Snackbar.make(view, spannableString, duration)); + sWeakSnackbar = new WeakReference<>(Snackbar.make(view, spannableString, duration)); } else { - sReference = new WeakReference<>(Snackbar.make(view, message, duration)); + sWeakSnackbar = new WeakReference<>(Snackbar.make(view, message, duration)); } - final Snackbar snackbar = sReference.get(); + final Snackbar snackbar = sWeakSnackbar.get(); final Snackbar.SnackbarLayout snackbarView = (Snackbar.SnackbarLayout) snackbar.getView(); if (isShowTop) { for (int i = 0; i < snackbarView.getChildCount(); i++) { @@ -316,9 +316,9 @@ public void showError(boolean isShowTop) { * Dismiss the snackbar. */ public static void dismiss() { - if (sReference != null && sReference.get() != null) { - sReference.get().dismiss(); - sReference = null; + if (sWeakSnackbar != null && sWeakSnackbar.get() != null) { + sWeakSnackbar.get().dismiss(); + sWeakSnackbar = null; } } @@ -328,7 +328,7 @@ public static void dismiss() { * @return the view of snackbar */ public static View getView() { - Snackbar snackbar = sReference.get(); + Snackbar snackbar = sWeakSnackbar.get(); if (snackbar == null) return null; return snackbar.getView(); } diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/SpanUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/SpanUtils.java index 86141a8d56..f8eb9465bd 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/SpanUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/SpanUtils.java @@ -514,9 +514,7 @@ public SpanUtils setVerticalAlign(@Align final int align) { * @return the single {@link SpanUtils} instance */ public SpanUtils setClickSpan(@NonNull final ClickableSpan clickSpan) { - if (mTextView != null && mTextView.getMovementMethod() == null) { - mTextView.setMovementMethod(LinkMovementMethod.getInstance()); - } + setMovementMethodIfNeed(); this.clickSpan = clickSpan; return this; } @@ -533,9 +531,7 @@ public SpanUtils setClickSpan(@NonNull final ClickableSpan clickSpan) { public SpanUtils setClickSpan(@ColorInt final int color, final boolean underlineText, final View.OnClickListener listener) { - if (mTextView != null && mTextView.getMovementMethod() == null) { - mTextView.setMovementMethod(LinkMovementMethod.getInstance()); - } + setMovementMethodIfNeed(); this.clickSpan = new ClickableSpan() { @Override @@ -562,11 +558,15 @@ public void onClick(@NonNull View widget) { * @return the single {@link SpanUtils} instance */ public SpanUtils setUrl(@NonNull final String url) { + setMovementMethodIfNeed(); + this.url = url; + return this; + } + + private void setMovementMethodIfNeed() { if (mTextView != null && mTextView.getMovementMethod() == null) { mTextView.setMovementMethod(LinkMovementMethod.getInstance()); } - this.url = url; - return this; } /** diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/StringUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/StringUtils.java index 28efede8d4..f218ae5567 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/StringUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/StringUtils.java @@ -2,6 +2,7 @@ import android.content.res.Resources; import android.support.annotation.ArrayRes; +import android.support.annotation.Nullable; import android.support.annotation.StringRes; import java.util.IllegalFormatException; @@ -245,7 +246,7 @@ public static String[] getStringArray(@ArrayRes int id) { * @param args The args. * @return a formatted string. */ - public static String format(String str, Object... args) { + public static String format(@Nullable String str, Object... args) { String text = str; if (text != null) { if (args != null && args.length > 0) { diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ThreadUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ThreadUtils.java index b99dc4d21f..96830dd89f 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ThreadUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ThreadUtils.java @@ -1216,6 +1216,7 @@ public void run() { if (!isDone() && mTimeoutListener != null) { timeout(); mTimeoutListener.onTimeout(); + onDone(); } } }, mTimeoutMillis); @@ -1287,7 +1288,6 @@ private void timeout() { if (runner != null) { runner.interrupt(); } - onDone(); } @@ -1362,6 +1362,18 @@ public T getValue() { } return mValue; } + + public T getValue(long timeout, TimeUnit unit, T defaultValue) { + if (!mFlag.get()) { + try { + mLatch.await(timeout, unit); + } catch (InterruptedException e) { + e.printStackTrace(); + return defaultValue; + } + } + return mValue; + } } private static Executor getGlobalDeliver() { diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java index 69bce2594b..d08f2923bc 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java @@ -38,6 +38,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.lang.ref.WeakReference; import java.lang.reflect.Field; /** @@ -63,7 +64,7 @@ public final class ToastUtils { private static final String NOTHING = "toast nothing"; private static final ToastUtils DEFAULT_MAKER = make(); - private static IToast iToast; + private static WeakReference sWeakToast; private String mMode; private int mGravity = -1; @@ -82,6 +83,7 @@ public final class ToastUtils { * * @return the single {@link ToastUtils} instance */ + @NonNull public static ToastUtils make() { return new ToastUtils(); } @@ -90,6 +92,7 @@ public static ToastUtils make() { * @param mode The mode. * @return the single {@link ToastUtils} instance */ + @NonNull public final ToastUtils setMode(@MODE String mode) { mMode = mode; return this; @@ -103,6 +106,7 @@ public final ToastUtils setMode(@MODE String mode) { * @param yOffset Y-axis offset, in pixel. * @return the single {@link ToastUtils} instance */ + @NonNull public final ToastUtils setGravity(final int gravity, final int xOffset, final int yOffset) { mGravity = gravity; mXOffset = xOffset; @@ -116,6 +120,7 @@ public final ToastUtils setGravity(final int gravity, final int xOffset, final i * @param backgroundColor The color of background. * @return the single {@link ToastUtils} instance */ + @NonNull public final ToastUtils setBgColor(@ColorInt final int backgroundColor) { mBgColor = backgroundColor; return this; @@ -127,6 +132,7 @@ public final ToastUtils setBgColor(@ColorInt final int backgroundColor) { * @param bgResource The resource of background. * @return the single {@link ToastUtils} instance */ + @NonNull public final ToastUtils setBgResource(@DrawableRes final int bgResource) { mBgResource = bgResource; return this; @@ -138,6 +144,7 @@ public final ToastUtils setBgResource(@DrawableRes final int bgResource) { * @param msgColor The text color of toast. * @return the single {@link ToastUtils} instance */ + @NonNull public final ToastUtils setTextColor(@ColorInt final int msgColor) { mTextColor = msgColor; return this; @@ -149,6 +156,7 @@ public final ToastUtils setTextColor(@ColorInt final int msgColor) { * @param textSize The text size of toast. * @return the single {@link ToastUtils} instance */ + @NonNull public final ToastUtils setTextSize(final int textSize) { mTextSize = textSize; return this; @@ -159,6 +167,7 @@ public final ToastUtils setTextSize(final int textSize) { * * @return the single {@link ToastUtils} instance */ + @NonNull public final ToastUtils setDurationIsLong(boolean isLong) { this.isLong = isLong; return this; @@ -170,6 +179,7 @@ public final ToastUtils setDurationIsLong(boolean isLong) { * @param resId The left icon resource identifier. * @return the single {@link ToastUtils} instance */ + @NonNull public final ToastUtils setLeftIcon(@DrawableRes int resId) { return setLeftIcon(ContextCompat.getDrawable(Utils.getApp(), resId)); } @@ -180,7 +190,8 @@ public final ToastUtils setLeftIcon(@DrawableRes int resId) { * @param drawable The left icon drawable. * @return the single {@link ToastUtils} instance */ - public final ToastUtils setLeftIcon(Drawable drawable) { + @NonNull + public final ToastUtils setLeftIcon(@Nullable Drawable drawable) { mIcons[0] = drawable; return this; } @@ -191,6 +202,7 @@ public final ToastUtils setLeftIcon(Drawable drawable) { * @param resId The top icon resource identifier. * @return the single {@link ToastUtils} instance */ + @NonNull public final ToastUtils setTopIcon(@DrawableRes int resId) { return setTopIcon(ContextCompat.getDrawable(Utils.getApp(), resId)); } @@ -201,7 +213,8 @@ public final ToastUtils setTopIcon(@DrawableRes int resId) { * @param drawable The top icon drawable. * @return the single {@link ToastUtils} instance */ - public final ToastUtils setTopIcon(Drawable drawable) { + @NonNull + public final ToastUtils setTopIcon(@Nullable Drawable drawable) { mIcons[1] = drawable; return this; } @@ -212,6 +225,7 @@ public final ToastUtils setTopIcon(Drawable drawable) { * @param resId The right icon resource identifier. * @return the single {@link ToastUtils} instance */ + @NonNull public final ToastUtils setRightIcon(@DrawableRes int resId) { return setRightIcon(ContextCompat.getDrawable(Utils.getApp(), resId)); } @@ -222,7 +236,8 @@ public final ToastUtils setRightIcon(@DrawableRes int resId) { * @param drawable The right icon drawable. * @return the single {@link ToastUtils} instance */ - public final ToastUtils setRightIcon(Drawable drawable) { + @NonNull + public final ToastUtils setRightIcon(@Nullable Drawable drawable) { mIcons[2] = drawable; return this; } @@ -233,6 +248,7 @@ public final ToastUtils setRightIcon(Drawable drawable) { * @param resId The bottom icon resource identifier. * @return the single {@link ToastUtils} instance */ + @NonNull public final ToastUtils setBottomIcon(int resId) { return setBottomIcon(ContextCompat.getDrawable(Utils.getApp(), resId)); } @@ -243,7 +259,8 @@ public final ToastUtils setBottomIcon(int resId) { * @param drawable The bottom icon drawable. * @return the single {@link ToastUtils} instance */ - public final ToastUtils setBottomIcon(Drawable drawable) { + @NonNull + public final ToastUtils setBottomIcon(@Nullable Drawable drawable) { mIcons[3] = drawable; return this; } @@ -253,6 +270,7 @@ public final ToastUtils setBottomIcon(Drawable drawable) { * * @return the single {@link ToastUtils} instance */ + @NonNull public final ToastUtils setNotUseSystemToast() { isNotUseSystemToast = true; return this; @@ -263,6 +281,7 @@ public final ToastUtils setNotUseSystemToast() { * * @return the default {@link ToastUtils} instance */ + @NonNull public static ToastUtils getDefaultMaker() { return DEFAULT_MAKER; } @@ -272,7 +291,7 @@ public static ToastUtils getDefaultMaker() { * * @param text The text. */ - public final void show(final CharSequence text) { + public final void show(@Nullable final CharSequence text) { show(text, getDuration(), this); } @@ -301,14 +320,14 @@ public final void show(@StringRes final int resId, final Object... args) { * @param format The format. * @param args The args. */ - public final void show(final String format, final Object... args) { + public final void show(@Nullable final String format, final Object... args) { show(UtilsBridge.format(format, args), getDuration(), this); } /** * Show custom toast. */ - public final void show(final View view) { + public final void show(@NonNull final View view) { show(view, getDuration(), this); } @@ -359,7 +378,7 @@ private View tryApplyUtilsToastView(final CharSequence text) { * * @param text The text. */ - public static void showShort(final CharSequence text) { + public static void showShort(@Nullable final CharSequence text) { show(text, Toast.LENGTH_SHORT, DEFAULT_MAKER); } @@ -388,7 +407,7 @@ public static void showShort(@StringRes final int resId, final Object... args) { * @param format The format. * @param args The args. */ - public static void showShort(final String format, final Object... args) { + public static void showShort(@Nullable final String format, final Object... args) { show(UtilsBridge.format(format, args), Toast.LENGTH_SHORT, DEFAULT_MAKER); } @@ -397,7 +416,7 @@ public static void showShort(final String format, final Object... args) { * * @param text The text. */ - public static void showLong(final CharSequence text) { + public static void showLong(@Nullable final CharSequence text) { show(text, Toast.LENGTH_LONG, DEFAULT_MAKER); } @@ -426,7 +445,7 @@ public static void showLong(@StringRes final int resId, final Object... args) { * @param format The format. * @param args The args. */ - public static void showLong(final String format, final Object... args) { + public static void showLong(@Nullable final String format, final Object... args) { show(UtilsBridge.format(format, args), Toast.LENGTH_LONG, DEFAULT_MAKER); } @@ -434,26 +453,38 @@ public static void showLong(final String format, final Object... args) { * Cancel the toast. */ public static void cancel() { - if (iToast != null) { - iToast.cancel(); - iToast = null; - } + UtilsBridge.runOnUiThread(new Runnable() { + @Override + public void run() { + if (sWeakToast != null) { + final IToast iToast = ToastUtils.sWeakToast.get(); + if (iToast != null) { + iToast.cancel(); + } + sWeakToast = null; + } + } + }); } - private static void show(final CharSequence text, final int duration, final ToastUtils utils) { + private static void show(@Nullable final CharSequence text, final int duration, final ToastUtils utils) { show(null, getToastFriendlyText(text), duration, utils); } - private static void show(final View view, final int duration, final ToastUtils utils) { + private static void show(@NonNull final View view, final int duration, final ToastUtils utils) { show(view, null, duration, utils); } - private static void show(@Nullable final View view, final CharSequence text, final int duration, final ToastUtils utils) { + private static void show(@Nullable final View view, + @Nullable final CharSequence text, + final int duration, + @NonNull final ToastUtils utils) { UtilsBridge.runOnUiThread(new Runnable() { @Override public void run() { cancel(); - iToast = newToast(utils); + IToast iToast = newToast(utils); + ToastUtils.sWeakToast = new WeakReference<>(iToast); if (view != null) { iToast.setToastView(view); } else { @@ -491,9 +522,9 @@ private static IToast newToast(ToastUtils toastUtils) { return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_TOAST); } else if (UtilsBridge.isGrantedDrawOverlays()) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY); + return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY); } else { - new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_PHONE); + return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_PHONE); } } return new ActivityToast(toastUtils); @@ -553,11 +584,17 @@ static final class WindowManagerToast extends AbsToast { private WindowManager.LayoutParams mParams; - private Utils.ActivityLifecycleCallbacks mActivityLifecycleCallbacks; - WindowManagerToast(ToastUtils toastUtils, int type) { super(toastUtils); mParams = new WindowManager.LayoutParams(); + mWM = (WindowManager) Utils.getApp().getSystemService(Context.WINDOW_SERVICE); + mParams.type = type; + } + + WindowManagerToast(ToastUtils toastUtils, WindowManager wm, int type) { + super(toastUtils); + mParams = new WindowManager.LayoutParams(); + mWM = wm; mParams.type = type; } @@ -587,7 +624,6 @@ public void show(final int duration) { mParams.horizontalMargin = mToast.getHorizontalMargin(); mParams.verticalMargin = mToast.getVerticalMargin(); - mWM = (WindowManager) Utils.getApp().getSystemService(Context.WINDOW_SERVICE); try { if (mWM != null) { mWM.addView(mToastView, mParams); @@ -619,6 +655,7 @@ static final class ActivityToast extends AbsToast { private static int sShowingIndex = 0; private Utils.ActivityLifecycleCallbacks mActivityLifecycleCallbacks; + private IToast iToast; ActivityToast(ToastUtils toastUtils) { super(toastUtils); @@ -629,7 +666,7 @@ public void show(int duration) { if (mToast == null) return; if (!UtilsBridge.isAppForeground()) { // try to use system toast - showSystemToast(duration); + iToast = showSystemToast(duration); return; } boolean hasAliveActivity = false; @@ -637,8 +674,12 @@ public void show(int duration) { if (!UtilsBridge.isActivityAlive(activity)) { continue; } - hasAliveActivity = true; - showWithActivity(activity, sShowingIndex, true); + if (!hasAliveActivity) { + hasAliveActivity = true; + iToast = showWithActivityWindow(activity, duration); + } else { + showWithActivityView(activity, sShowingIndex, true); + } } if (hasAliveActivity) { registerLifecycleCallback(); @@ -652,7 +693,7 @@ public void run() { ++sShowingIndex; } else { // try to use system toast - showSystemToast(duration); + iToast = showSystemToast(duration); } } @@ -676,16 +717,29 @@ public void cancel() { } } } + if (iToast != null) { + iToast.cancel(); + iToast = null; + } super.cancel(); } - private void showSystemToast(int duration) { + private IToast showSystemToast(int duration) { SystemToast systemToast = new SystemToast(mToastUtils); systemToast.mToast = mToast; systemToast.show(duration); + return systemToast; } - private void showWithActivity(final Activity activity, final int index, boolean useAnim) { + private IToast showWithActivityWindow(Activity activity, int duration) { + WindowManagerToast wmToast = new WindowManagerToast(mToastUtils, activity.getWindowManager(), WindowManager.LayoutParams.LAST_APPLICATION_WINDOW); + wmToast.mToastView = getToastViewSnapshot(-1); + wmToast.mToast = mToast; + wmToast.show(duration); + return wmToast; + } + + private void showWithActivityView(final Activity activity, final int index, boolean useAnim) { final Window window = activity.getWindow(); if (window != null) { final ViewGroup decorView = (ViewGroup) window.getDecorView(); @@ -694,6 +748,7 @@ private void showWithActivity(final Activity activity, final int index, boolean ); lp.gravity = mToast.getGravity(); lp.bottomMargin = mToast.getYOffset() + UtilsBridge.getNavBarHeight(); + lp.topMargin = mToast.getYOffset() + UtilsBridge.getStatusBarHeight(); lp.leftMargin = mToast.getXOffset(); View toastViewSnapshot = getToastViewSnapshot(index); if (useAnim) { @@ -704,21 +759,13 @@ private void showWithActivity(final Activity activity, final int index, boolean } } - private View getToastViewSnapshot(final int index) { - Bitmap bitmap = UtilsBridge.view2Bitmap(mToastView); - ImageView toastIv = new ImageView(Utils.getApp()); - toastIv.setTag(TAG_TOAST + index); - toastIv.setImageBitmap(bitmap); - return toastIv; - } - private void registerLifecycleCallback() { final int index = sShowingIndex; mActivityLifecycleCallbacks = new Utils.ActivityLifecycleCallbacks() { @Override public void onActivityCreated(@NonNull Activity activity) { if (isShowing()) { - showWithActivity(activity, index, false); + showWithActivityView(activity, index, false); } } }; @@ -761,6 +808,7 @@ public void setToastView(CharSequence text) { View utilsToastView = mToastUtils.tryApplyUtilsToastView(text); if (utilsToastView != null) { setToastView(utilsToastView); + processRtlIfNeed(); return; } @@ -778,9 +826,16 @@ public void setToastView(CharSequence text) { messageTv.setTextSize(mToastUtils.mTextSize); } setBg(messageTv); + processRtlIfNeed(); } - protected void setBg(final TextView msgTv) { + private void processRtlIfNeed() { + if (UtilsBridge.isLayoutRtl()) { + setToastView(getToastViewSnapshot(-1)); + } + } + + private void setBg(final TextView msgTv) { if (mToastUtils.mBgResource != -1) { mToastView.setBackgroundResource(mToastUtils.mBgResource); msgTv.setBackgroundColor(Color.TRANSPARENT); @@ -809,6 +864,14 @@ public void cancel() { mToast = null; mToastView = null; } + + View getToastViewSnapshot(final int index) { + Bitmap bitmap = UtilsBridge.view2Bitmap(mToastView); + ImageView toastIv = new ImageView(Utils.getApp()); + toastIv.setTag(TAG_TOAST + index); + toastIv.setImageBitmap(bitmap); + return toastIv; + } } interface IToast { diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsActivityLifecycleImpl.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsActivityLifecycleImpl.java index 272eddcb45..28414efd78 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsActivityLifecycleImpl.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsActivityLifecycleImpl.java @@ -201,6 +201,9 @@ public void onActivityPreCreated(@NonNull Activity activity, @Nullable Bundle sa @Override public void onActivityCreated(@NonNull Activity activity, Bundle savedInstanceState) { + if (mActivityList.size() == 0) { + postStatus(activity, true); + } LanguageUtils.applyLanguage(activity); setAnimatorsEnabled(); setTopActivity(activity); diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsBridge.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsBridge.java index 5361fdc1de..e920b53635 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsBridge.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsBridge.java @@ -12,6 +12,7 @@ import android.os.Parcelable; import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import android.support.annotation.RequiresPermission; import android.support.annotation.StringRes; @@ -535,7 +536,7 @@ static String getString(@StringRes int id, Object... formatArgs) { return StringUtils.getString(id, formatArgs); } - static String format(String str, Object... args) { + static String format(@Nullable String str, Object... args) { return StringUtils.format(str, args); } @@ -606,6 +607,10 @@ static View layoutId2View(@LayoutRes final int layoutId) { return ViewUtils.layoutId2View(layoutId); } + static boolean isLayoutRtl() { + return ViewUtils.isLayoutRtl(); + } + /////////////////////////////////////////////////////////////////////////// // Common diff --git a/lib/utilcode/src/main/res/xml/util_code_provider_paths.xml b/lib/utilcode/src/main/res/xml/util_code_provider_paths.xml index ce405066c0..ed731a2299 100644 --- a/lib/utilcode/src/main/res/xml/util_code_provider_paths.xml +++ b/lib/utilcode/src/main/res/xml/util_code_provider_paths.xml @@ -1,9 +1,5 @@ - - diff --git a/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/BaseContentView.java b/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/BaseContentView.java index 246c011492..0af63e0fa8 100644 --- a/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/BaseContentView.java +++ b/lib/utildebug/src/main/java/com/blankj/utildebug/base/view/BaseContentView.java @@ -10,6 +10,8 @@ import com.blankj.utildebug.base.view.listener.OnBackListener; import com.blankj.utildebug.base.view.listener.OnRefreshListener; +import java.util.Collections; + /** * * author: blankj From 66a4c0488ca6da273098058d70dabb0fe9b9bd8d Mon Sep 17 00:00:00 2001 From: BlankjDate: Mon, 22 Feb 2021 00:07:51 +0800 Subject: [PATCH 19/52] see 02/22 log --- .../blankj/subutil/util/CoordinateUtils.java | 28 +++++++++++ .../com/blankj/utilcode/util/IntentUtils.java | 4 +- .../com/blankj/utilcode/util/ScreenUtils.java | 46 ++++++++----------- 3 files changed, 50 insertions(+), 28 deletions(-) diff --git a/lib/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java index ee6d78a118..c205a52a75 100644 --- a/lib/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java +++ b/lib/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java @@ -121,6 +121,34 @@ public static double[] wgs84ToBd09(double lng, double lat) { return gcj02ToBd09(gcj[0], gcj[1]); } + /** + * Mercator 坐标转 WGS84 坐标 + * + * @param lng Mercator 坐标经度 + * @param lat Mercator 坐标纬度 + * @return WGS84 坐标:[经度,纬度] + */ + public static double[] mercatorToWGS84(double lng, double lat) { + double x = lng / 20037508.34d * 180.; + double y = lat / 20037508.34d * 180.; + y = 180 / PI * (2 * Math.atan(Math.exp(y * PI / 180.0)) - PI / 2); + return new double[]{x, y}; + } + + /** + * WGS84 坐标转 Mercator 坐标 + * + * @param lng WGS84 坐标经度 + * @param lat WGS84 坐标纬度 + * @return Mercator 坐标:[经度,纬度] + */ + public static double[] wgs84ToMercator(double lng, double lat) { + double x = lng * 20037508.34D / 180.0; + double y = Math.log(Math.tan((90.0 + lat) * PI / 360.0)) / (PI / 180.); + y = y * 20037508.34D / 180.0; + return new double[]{x, y}; + } + private static double transformLat(double lng, double lat) { double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng)); ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0; diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java index 4a821458fa..fccddd8d35 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java @@ -389,9 +389,9 @@ public static Intent getComponentIntent(final String pkgName, public static Intent getShutdownIntent() { Intent intent; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - intent = new Intent(Intent.ACTION_SHUTDOWN); - } else { intent = new Intent("com.android.internal.intent.action.REQUEST_SHUTDOWN"); + } else { + intent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN"); } intent.putExtra("android.intent.extra.KEY_CONFIRM", false); return intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java index cb742b7a7d..623e15518b 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java @@ -112,39 +112,34 @@ public static float getScreenDensity() { public static int getScreenDensityDpi() { return Resources.getSystem().getDisplayMetrics().densityDpi; } - - - - + /** - * Return X (width) of the screen expressed as dots-per-inch. + * Return the exact physical pixels per inch of the screen in the Y dimension. * - * @return the width of screen density expressed as dots-per-inch + * @return the exact physical pixels per inch of the screen in the Y dimension */ - public static int getScreenXDpi() { + public static float getScreenXDpi() { return Resources.getSystem().getDisplayMetrics().xdpi; } - + /** - * Return Y (height) of the screen expressed as dots-per-inch. + * Return the exact physical pixels per inch of the screen in the Y dimension. * - * @return the height of screen density expressed as dots-per-inch + * @return the exact physical pixels per inch of the screen in the Y dimension */ - public static int getScreenYDpi() { + public static float getScreenYDpi() { return Resources.getSystem().getDisplayMetrics().ydpi; } - - - + /** * Return the distance between the given View's X (start point of View's width) and the screen width. * * @return the distance between the given View's X (start point of View's width) and the screen width. */ - public float calculateDistanceByX(View view) { - int[] point = new int[0]; + public int calculateDistanceByX(View view) { + int[] point = new int[2]; view.getLocationOnScreen(point); - return (getScreenWidth() - point[0]).toFloat(); + return getScreenWidth() - point[0]; } /** @@ -152,10 +147,10 @@ public float calculateDistanceByX(View view) { * * @return the distance between the given View's Y (start point of View's height) and the screen height. */ - public float calculateDistanceByY(View view) { - int[] point = new int[0]; + public int calculateDistanceByY(View view) { + int[] point = new int[2]; view.getLocationOnScreen(point); - return (getScreenHeight() - point[1]).toFloat(); + return getScreenHeight() - point[1]; } /** @@ -163,23 +158,22 @@ public float calculateDistanceByY(View view) { * * @return X coordinate of the given View on the screen. */ - public int getViewX(View view){ - int[] point = new int[0]; + public int getViewX(View view) { + int[] point = new int[2]; view.getLocationOnScreen(point); return point[0]; } - + /** * Return the Y coordinate of the given View on the screen. * * @return Y coordinate of the given View on the screen. */ - public int getViewY(View view){ - int[] point = new int[0]; + public int getViewY(View view) { + int[] point = new int[2]; view.getLocationOnScreen(point); return point[1]; } - /** * Set full screen. From f14b404543d17cdba6680a78a15afdf7570a9248 Mon Sep 17 00:00:00 2001 From: jobs_xie Date: Thu, 22 Apr 2021 10:46:19 +0800 Subject: [PATCH 20/52] Fix: IllegalStateException: message is already in use --- .../src/main/java/com/blankj/utilcode/util/MessengerUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java index a764eb50b6..d1d4669dbe 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java @@ -320,7 +320,7 @@ private void sendMsg2Client(final Message msg) { for (Messenger client : mClientMap.values()) { try { if (client != null) { - client.send(msg); + client.send(Message.obtain(msg)); } } catch (RemoteException e) { e.printStackTrace(); From e04bfdf9eff1cc82788a0255d38bdcb9f08180cc Mon Sep 17 00:00:00 2001 From: jobs_xie Date: Thu, 22 Apr 2021 10:58:44 +0800 Subject: [PATCH 21/52] Fix: IllegalStateException: message is already in use --- .../main/java/com/blankj/utilcode/util/MessengerUtils.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java index d1d4669dbe..61aa8e2543 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java @@ -317,15 +317,17 @@ public int onStartCommand(Intent intent, int flags, int startId) { } private void sendMsg2Client(final Message msg) { + final Message obtain = Message.obtain(msg); //Copy the original for (Messenger client : mClientMap.values()) { try { if (client != null) { - client.send(Message.obtain(msg)); + client.send(obtain); } } catch (RemoteException e) { e.printStackTrace(); } } + obtain.recycle(); //Recycled copy } private void consumeServerProcessCallback(final Message msg) { From ab073b7a4d856771822c08fbdf2a13f300420ce1 Mon Sep 17 00:00:00 2001 From: xiexin52k <517436384@qq.com> Date: Thu, 22 Apr 2021 14:28:21 +0800 Subject: [PATCH 22/52] Update MessengerUtils.java --- .../src/main/java/com/blankj/utilcode/util/MessengerUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java index 61aa8e2543..71af539ab7 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java @@ -321,7 +321,7 @@ private void sendMsg2Client(final Message msg) { for (Messenger client : mClientMap.values()) { try { if (client != null) { - client.send(obtain); + client.send(Message.obtain(obtain)); } } catch (RemoteException e) { e.printStackTrace(); From 20290bb808058d92cf52a2632fc463faccc10ff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=AD=87=E5=B0=94?= Date: Wed, 5 May 2021 02:51:15 +1000 Subject: [PATCH 23/52] Added 2 very useful methods 1. isFirstTimeInstall(): If you want to know whether this is the first time installation of this app in this device. 2. isAppUpgraded(): If you want to know whether the current version was installed over a previous version (update/upgrade) or if it is freshly installed (clean install). Code: /** * Return true if this is the first ever time that the application is installed on the device. * * @return true if this is the first ever time that the application is installed on the device. */ public static boolean isFirstTimeInstall(){ try { Long firstInstallTime = Utils.getApp().getPackageManager().getPackageInfo(this.getAppPackageName(), 0).firstInstallTime; Long lastUpdateTime = Utils.getApp().getPackageManager().getPackageInfo(this.getAppPackageName(), 0).lastUpdateTime; return firstInstallTime == lastUpdateTime; } catch (Exception e) { return false; } } /** * Return true if app was previously installed and this one is an update/upgrade to that one, returns false if this is a fresh installation and not an update/upgrade. * * @return true if app was previously installed and this one is an update/upgrade to that one, returns false if this is a fresh installation and not an update/upgrade. */ public static boolean isAppUpgraded(){ try { Long firstInstallTime = Utils.getApp().getPackageManager().getPackageInfo(this.getAppPackageName(), 0).firstInstallTime; Long lastUpdateTime = Utils.getApp().getPackageManager().getPackageInfo(this.getAppPackageName(), 0).lastUpdateTime; return firstInstallTime != lastUpdateTime; } catch (Exception e) { return false; } } --- .../com/blankj/utilcode/util/AppUtils.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java index a8b65dfecf..1cc9112b16 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java @@ -384,6 +384,38 @@ public static int getAppIconId(final String packageName) { } } + + /** + * Return true if this is the first ever time that the application is installed on the device. + * + * @return true if this is the first ever time that the application is installed on the device. + */ + public static boolean isFirstTimeInstall(){ + try { + Long firstInstallTime = Utils.getApp().getPackageManager().getPackageInfo(this.getAppPackageName(), 0).firstInstallTime; + Long lastUpdateTime = Utils.getApp().getPackageManager().getPackageInfo(this.getAppPackageName(), 0).lastUpdateTime; + return firstInstallTime == lastUpdateTime; + } catch (Exception e) { + return false; + } + } + + /** + * Return true if app was previously installed and this one is an update/upgrade to that one, returns false if this is a fresh installation and not an update/upgrade. + * + * @return true if app was previously installed and this one is an update/upgrade to that one, returns false if this is a fresh installation and not an update/upgrade. + */ + public static boolean isAppUpgraded(){ + try { + Long firstInstallTime = Utils.getApp().getPackageManager().getPackageInfo(this.getAppPackageName(), 0).firstInstallTime; + Long lastUpdateTime = Utils.getApp().getPackageManager().getPackageInfo(this.getAppPackageName(), 0).lastUpdateTime; + return firstInstallTime != lastUpdateTime; + } catch (Exception e) { + return false; + } + } + + /** * Return the application's package name. * From cbea6b40658e04ee923c2e4c1d5fad0e18bae5ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=AD=87=E5=B0=94?= Date: Tue, 4 May 2021 18:56:24 +0200 Subject: [PATCH 24/52] Added yet another 2 very useful methods 1. isBehindProxy(): Returns true if device is connecting to the internet via a proxy, works for both Wi-Fi and Mobile Data. 2. isUsingVPN(): Returns true if device is connecting to the internet via a VPN. --- .../blankj/utilcode/util/NetworkUtils.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java index 8f874dbf38..37104b1b43 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java @@ -261,6 +261,34 @@ public static boolean getMobileDataEnabled() { } return false; } + + /** + * Returns true if device is connecting to the internet via a proxy, works for both Wi-Fi and Mobile Data. + * + * @return true if using proxy to connect to the internet. + */ + public static boolean isBehindProxy(){ + return !(System.getProperty("http.proxyHost") == null || System.getProperty("http.proxyPort") == null); + } + + /** + * Returns true if device is connecting to the internet via a VPN. + * + * @return true if using VPN to conncet to the internet. + */ + public static boolean isUsingVPN(){ + ConnectivityManager cm = (ConnectivityManager) com.blankj.utilcode.util.Utils.getApp().getSystemService(Context.CONNECTIVITY_SERVICE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + return cm.getNetworkInfo(ConnectivityManager.TYPE_VPN).isConnectedOrConnecting() + } else { + return cm.getNetworkInfo(NetworkCapabilities.TRANSPORT_VPN).isConnectedOrConnecting() + } + } + + + + + /** * Return whether using mobile data. From ebc64cd35122d1cba80822dd5942900d7fa507ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=AD=87=E5=B0=94?= Date: Mon, 10 May 2021 10:11:14 +0700 Subject: [PATCH 25/52] Added 4 useful methods /** * Returns the domain part of a given Email address * * @param email The Email address. E.g Returns "protonmail.com" from the given Email "johnsmith@protonmail.com". * @return the domain part of a given Email address. */ public static String extractEmailProvider(String email) { return email.substring(email.lastIndexOf("@") + 1); } /** * Returns the username part of a given Email address. E.g. Returns "johnsmith" from the given Email "johnsmith@protonmail.com". * * @param email The Email address. * @return the username part of a given Email address. */ public static String extractEmailUsername(String email) { return email.substring(0, email.lastIndexOf("@")); } /** * Return whether a given Email address is on a specified Email provider. E.g. "johnsmith@protonmail.com" and "gmail.com" will return false. * * @param email The Email address. * @param emailProvider The Email provider to testify against. * @return {@code true}: yes
{@code false}: no */ public static boolean isFromEmailProvider(String email, String emailProvider) { return extractEmailProvider(email).equalsIgnoreCase(emailProvider); } /** * Return whether a given Email address is on any of the specified Email providers list (array). E.g. Useful if you pass it a list of real Email provider services and check if the Email is a disposable Email or a real one. * * @param email The Email address. * @param emailProviders The list of Email providers to testify against. * @return {@code true}: yes
{@code false}: no */ public static boolean isFromAnyOfEmailProviders(String email, String[] emailProviders) { return com.blankj.utilcode.util.ArrayUtils.contains(emailProviders, extractEmailProvider(email)); } --- .../com/blankj/utilcode/util/RegexUtils.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/RegexUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/RegexUtils.java index ae90e4ea5e..624a93511c 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/RegexUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/RegexUtils.java @@ -40,6 +40,54 @@ public static boolean isMobileSimple(final CharSequence input) { return isMatch(RegexConstants.REGEX_MOBILE_SIMPLE, input); } + + /** + * Returns the domain part of a given Email address + * + * @param email The Email address. E.g Returns "protonmail.com" from the given Email "johnsmith@protonmail.com". + * @return the domain part of a given Email address. + */ + public static String extractEmailProvider(String email) { + return email.substring(email.lastIndexOf("@") + 1); + } + + /** + * Returns the username part of a given Email address. E.g. Returns "johnsmith" from the given Email "johnsmith@protonmail.com". + * + * @param email The Email address. + * @return the username part of a given Email address. + */ + public static String extractEmailUsername(String email) { + return email.substring(0, email.lastIndexOf("@")); + } + + + /** + * Return whether a given Email address is on a specified Email provider. E.g. "johnsmith@protonmail.com" and "gmail.com" will return false. + * + * @param email The Email address. + * @param emailProvider The Email provider to testify against. + * @return {@code true}: yes
{@code false}: no + */ + public static boolean isFromEmailProvider(String email, String emailProvider) { + return extractEmailProvider(email).equalsIgnoreCase(emailProvider); + } + + /** + * Return whether a given Email address is on any of the specified Email providers list (array). E.g. Useful if you pass it a list of real Email provider services and check if the Email is a disposable Email or a real one. + * + * @param email The Email address. + * @param emailProviders The list of Email providers to testify against. + * @return {@code true}: yes
{@code false}: no + */ + public static boolean isFromAnyOfEmailProviders(String email, String[] emailProviders) { + return com.blankj.utilcode.util.ArrayUtils.contains(emailProviders, extractEmailProvider(email)); + } + + + + + /** * Return whether input matches regex of exact mobile. * From 402cc73a240a9527cea3180c6cf647223b3e6e91 Mon Sep 17 00:00:00 2001 From: caimengjieDate: Thu, 13 May 2021 01:09:26 +0800 Subject: [PATCH 26/52] add(publish): support publish mavenCentral --- CHANGELOG.md | 1 + build.gradle | 13 +- buildApp.gradle | 44 ++-- buildCommon.gradle | 16 -- buildSrc/src/main/groovy/Config.groovy | 6 +- config/flavor.gradle | 22 ++ config/publish.gradle | 237 ++++++++++++++++++ feature/utilcode/export/build.gradle | 14 +- gradle/publish.gradle | 237 ------------------ gradle/wrapper/gradle-wrapper.properties | 2 +- lib/subutil/build.gradle | 2 +- lib/utilcode/build.gradle | 15 +- lib/utilcode/src/main/AndroidManifest.xml | 2 +- .../com/blankj/utilcode/util/IntentUtils.java | 2 +- .../com/blankj/utilcode/util/ToastUtils.java | 2 +- .../com/blankj/utilcode/util/UriUtils.java | 2 +- lib/utildebug/build.gradle | 4 - plugin/api-gradle-plugin/build.gradle | 6 +- plugin/bus-gradle-plugin/build.gradle | 6 +- plugin/lib/base-transform/build.gradle | 6 +- script/clean.sh | 4 - script/gitHelp.sh | 45 ++++ script/runDevDebug.sh | 9 + script/runProductionRelease.sh | 9 + 24 files changed, 380 insertions(+), 326 deletions(-) create mode 100644 config/flavor.gradle create mode 100644 config/publish.gradle delete mode 100644 gradle/publish.gradle delete mode 100755 script/clean.sh create mode 100755 script/gitHelp.sh create mode 100755 script/runDevDebug.sh create mode 100755 script/runProductionRelease.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index db3e52985a..401a5071f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ +* `21/05/13` [add] Support publish mavenCentral. * `21/02/22` [add] Fix ToastUtils rtl bug. Publish v1.30.6. * `20/11/16` [add] Add ImageUtils#save2Album support param of dirName. * `20/11/13` [add] Fix MessengerUtils ANR. Add NetworkUtils#getWifiScanResult, [add|remove]OnWifiChangedConsumer. Publish v1.30.5. diff --git a/build.gradle b/build.gradle index dd27b98617..133f032278 100644 --- a/build.gradle +++ b/build.gradle @@ -2,11 +2,9 @@ buildscript { ConfigUtils.init(gradle) repositories { - // use for debug plugin local - if (Config.depConfig.plugin_bus.useLocal || Config.depConfig.plugin_api.useLocal) { - maven() { url uri("${project.rootDir.path}/mavenLocal") } - } + mavenLocal() google() + mavenCentral() jcenter() } @@ -19,9 +17,10 @@ buildscript { allprojects { repositories { - maven() { url uri("${project.rootDir.path}/mavenLocal") } + mavenLocal() maven { url "https://jitpack.io/" } google() + mavenCentral() jcenter() } @@ -29,8 +28,8 @@ allprojects { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' resolutionStrategy.eachDependency { - if (it.requested.group == 'com.android.support' - && !it.requested.name.contains('multidex')) { + if (it.requested.group == 'com.android.support' && !it.requested.name.contains( + 'multidex')) { it.useVersion Config.supportVersion } } diff --git a/buildApp.gradle b/buildApp.gradle index 7aa523c466..d7ed2c75a3 100644 --- a/buildApp.gradle +++ b/buildApp.gradle @@ -1,6 +1,7 @@ apply { plugin "com.android.application" - from "${rootDir.path}/buildCommon.gradle" + from "${rootDir.path}/buildCommon.gradle" + from "${rootDir.path}/config/flavor.gradle" if (Config.depConfig.plugin_api.isApply) { plugin Config.depConfig.plugin_api.pluginId } @@ -32,19 +33,11 @@ android { } buildTypes { - debug { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - applicationIdSuffix ".debug" - resValue "string", "app_name", Config.appName + suffix + ".debug" - } + debug {} release { - aaptOptions.cruncherEnabled = false - aaptOptions.useNewCruncher = false minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - resValue "string", "app_name", Config.appName + suffix } } @@ -58,8 +51,19 @@ android { maxProcessCount 8 dexInProcess = true } -} + productFlavors { + dev { + applicationIdSuffix ".dev" + versionNameSuffix "-dev" + resValue "string", "app_name", Config.appName + suffix + "-dev" + } + + production { + resValue "string", "app_name", Config.appName + suffix + } + } +} dependencies { // LeakCanary @@ -80,7 +84,9 @@ dependencies { def getSuffix() { if (project.name == "feature_launcher_app") return "" - return "." + project.name.substring("feature_".length(), project.name.length() - "_app".length()) + return "." + project. + name. + substring("feature_".length(), project.name.length() - "_app".length()) } def configSigning() { @@ -110,12 +116,14 @@ def configApkName() { if (variant.buildType.name != "debug") { def artifact = variant.getPackageApplicationProvider().get() artifact.outputDirectory = new File("${rootDir.path}/apk") - artifact.outputScope.apkDatas.forEach { apkData -> - apkData.outputFileName = "util" + suffix + - (variant.flavorName == "" ? "" : ("_" + variant.flavorName)) + - "_" + variant.versionName.replace(".", "_") + - "_" + variant.buildType.name + - ".apk" + variant.outputs.each { + it.outputFileName = "util" + suffix + + (variant.flavorName == "" ? "" : ("_" + variant.flavorName)) + + "_" + + variant.versionName.replace(".", "_") + + "_" + + variant.buildType.name + + ".apk" } } } diff --git a/buildCommon.gradle b/buildCommon.gradle index f83f74f52d..8cbcc26255 100644 --- a/buildCommon.gradle +++ b/buildCommon.gradle @@ -22,20 +22,4 @@ android { lintOptions { abortOnError false } - -// viewBinding { -// enabled = true -// } - -// flavorDimensions "region" -// -// productFlavors { -// china { -// dimension "region" -// } -// -// oversea { -// dimension "region" -// } -// } } \ No newline at end of file diff --git a/buildSrc/src/main/groovy/Config.groovy b/buildSrc/src/main/groovy/Config.groovy index 9b6e55d3bb..4fb2b7ef2f 100644 --- a/buildSrc/src/main/groovy/Config.groovy +++ b/buildSrc/src/main/groovy/Config.groovy @@ -15,10 +15,10 @@ class Config { static minSdkVersion = 14 static targetSdkVersion = 29 static versionCode = 1_030_006 - static versionName = '1.30.6'// E.g. 1.9.72 => 1,009,072 + static versionName = '1.30.7-alpha1'// E.g. 1.9.72 => 1,009,072 // lib version - static gradlePluginVersion = '3.5.2' + static gradlePluginVersion = '4.1.0' static kotlinVersion = '1.3.72' static androidxVersion = '1.0.0' @@ -47,8 +47,6 @@ class Config { /*Never delete this line*/ plugin_gradle : new DepConfig(pluginPath: "com.android.tools.build:gradle:$gradlePluginVersion"), plugin_kotlin : new DepConfig(pluginPath: "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"), - 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"),// 注解转非空判断 // 上传新版本插件更新 pluginPath 中的版本号,并设置 isApply = false diff --git a/config/flavor.gradle b/config/flavor.gradle new file mode 100644 index 0000000000..25c1801983 --- /dev/null +++ b/config/flavor.gradle @@ -0,0 +1,22 @@ +android { + flavorDimensions "env" + productFlavors { + dev { + dimension "env" + } + + production { + dimension "env" + } + } + + variantFilter { variant -> + def flavorNames = variant.flavors*.name + def buildTypeName = variant.buildType.name + + // production 包不允许 debug 构建 + if (flavorNames.contains("production") && buildTypeName.contains("debug")) { + variant.setIgnore(true) + } + } +} \ No newline at end of file diff --git a/config/publish.gradle b/config/publish.gradle new file mode 100644 index 0000000000..af97da785b --- /dev/null +++ b/config/publish.gradle @@ -0,0 +1,237 @@ +/* + 1. add + signing.keyId=xx + signing.password=xx + signing.secretKeyRingFile=/Users/xx/secring.gpg + ossrhUsername=xx + ossrhPassword=xx + in root local.properties + + 2. copy the file to the directory of gradle, and apply the file in the module + ext { + groupId = Config.depConfig.lib_utilcode.groupId + artifactId = Config.depConfig.lib_utilcode.artifactId + version = Config.depConfig.lib_utilcode.version + website = "https://github.com/Blankj/AndroidUtilCode" +} + apply from: "${rootDir.path}/config/publish.gradle" + + 3. execute following command to publish + ./gradlew :xxmodule:publish2Local -> upload to mavenCentral + ./gradlew :xxmodule:publish2Remote -> upload to mavenLocal +*/ + +apply plugin: 'maven-publish' +apply plugin: 'signing' + +ext.multiPublishMode = true + +File localPropertiesFile = project.rootProject.file("local.properties"); +if (localPropertiesFile.exists()) { + Properties properties = new Properties() + properties.load(new FileInputStream(localPropertiesFile)) + properties.each { name, value -> ext[name] = value } +} else { + if (!ext["signing.keyId"] && !ext["signing.password"] && + !ext["signing.secretKeyRingFile"] && + !ext["ossrhUsername"] && + !ext["ossrhPassword"]) { + throw new NullPointerException("U should set MavenCentral params in local.properties") + } +} + +afterEvaluate { + def ext = project.ext + publishing { + publications { + release(MavenPublication) { + groupId ext.groupId + artifactId ext.artifactId + version ext.version + + if (isAndroidEnv(project)) { + if (project.ext.multiPublishMode) { + artifact("$buildDir/outputs/aar/${project.getName()}-release.aar") + artifact sourcesJar + } else { + from project.components.release + } + } else { + from project.components.java + } + + pom { + name = ext.artifactId + description = ext.artifactId + url = ext.website + + licenses { + license { + name = 'The Apache Software License, Version 2.0' + url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' + } + } + developers { + developer { + id = ext.ossrhUsername + name = ext.ossrhUsername + } + } + scm { + url = ext.website + connection = ext.website + developerConnection = ext.website + ".git" + } + + if (project.ext.multiPublishMode) { + withXml { + def dependenciesNode = asNode().getAt('dependencies')[0] ?: + asNode().appendNode('dependencies') + + configurations. + api. + getDependencies(). + each { dep -> addDependency(project, dependenciesNode, dep, "compile") } + configurations. + implementation. + getDependencies(). + each { dep -> addDependency(project, dependenciesNode, dep, "runtime") } + } + } + } + } + } + + repositories { + maven { + // s01 is newest + def releasesUrl = "https://s01.oss.sonatype.org/content/repositories/releases/" + def snapshotUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/" + url = version.toUpperCase().endsWith('SNAPSHOT') ? snapshotUrl : releasesUrl + + credentials { + username ossrhUsername + password ossrhPassword + } + } + } + } + + signing { + sign publishing.publications + } +} + +private void addDependency(Project project, def dependenciesNode, Dependency dep, String scope) { + if (dep.group == null || dep.version == null || dep.name == null || dep.name == "unspecified") { + return + } + + final dependencyNode = dependenciesNode.appendNode('dependency') + dependencyNode.appendNode('scope', scope) + + if (dep.version == 'unspecified') { + // 检测 module 中的 dependencies 是否有源码依赖 + // 如果是源码依赖,而且没有在 config 中配置 remotePath, + // 那么发布到仓库,其他地方依赖该库时会找不到源码的那个库 + println "publish -> module(unspecified) <${dep.group}:${dep.name}:${dep.version}>" + if (project.ext.groupId || project.ext.version) { + throw new GradleException( + "The module of <" + dep.name + "> should set groupId & version.") + } + // 源码依赖,但配置了 remotePath,让 pom 中写入 remotePath + println( + "publish -> module(wrapped) <${project.ext.groupId}:${name}:${project.ext.version}>") + + dependencyNode.appendNode('groupId', project.ext.pomGroupID) + dependencyNode.appendNode('artifactId', dep.name) + dependencyNode.appendNode('version', project.ext.pomVersion) + } else { + dependencyNode.appendNode('groupId', dep.group) + dependencyNode.appendNode('artifactId', dep.name) + dependencyNode.appendNode('version', dep.version) + println("publish -> library <${dep.group}:${dep.name}:${dep.version}>") + } + + if (!dep.transitive) { + // In case of non transitive dependency, + // all its dependencies should be force excluded from them POM file + final exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion') + exclusionNode.appendNode('groupId', '*') + exclusionNode.appendNode('artifactId', '*') + } else if (!dep.properties.excludeRules.empty) { + // For transitive with exclusions, all exclude rules should be added to the POM file + final exclusions = dependencyNode.appendNode('exclusions') + dep.properties.excludeRules.each { ExcludeRule rule -> + final exclusionNode = exclusions.appendNode('exclusion') + exclusionNode.appendNode('groupId', rule.group ?: '*') + exclusionNode.appendNode('artifactId', rule.module ?: '*') + } + } +} + +if (isAndroidEnv(project)) { + // This generates sources.jar + task sourcesJar(type: Jar) { + classifier = 'sources' + from android.sourceSets.main.java.source + } + + task javadoc(type: Javadoc) { + source = android.sourceSets.main.java.source + classpath += configurations.compile + classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + } + + task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir + } +} else { + task sourcesJar(type: Jar, dependsOn: classes) { + classifier = 'sources' + from sourceSets.main.allSource + } + + task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir + } +} + +if (project.hasProperty("kotlin")) { + // Disable creating javadocs + project.tasks.withType(Javadoc) { + enabled = false + } +} + +javadoc { + options { + encoding "UTF-8" + charSet 'UTF-8' + author true + version project.ext.version + links "http://docs.oracle.com/javase/7/docs/api" + title "${project.ext.artifactId} ${project.ext.version}" + } +} + +artifacts { + archives javadocJar + archives sourcesJar +} + +static def isAndroidEnv(Project project) { + return project.getPlugins().hasPlugin('com.android.application') || project. + getPlugins(). + hasPlugin('com.android.library') +} + +task publish2Local(type: GradleBuild) { + tasks = ['clean', 'assemble', 'publishReleasePublicationToMavenLocal'] +} + +task publish2Remote(type: GradleBuild) { + tasks = ['clean', 'assemble', 'publishReleasePublicationToMavenRepository'] +} \ No newline at end of file diff --git a/feature/utilcode/export/build.gradle b/feature/utilcode/export/build.gradle index cecc254461..815f9babe6 100644 --- a/feature/utilcode/export/build.gradle +++ b/feature/utilcode/export/build.gradle @@ -1,10 +1,8 @@ -apply from: "${rootDir.path}/gradle/publish.gradle" -publish { - def depConfig = Config.depConfig.feature_utilcode_export - name = "UtilCodeExport" - groupId = depConfig.groupId - artifactId = depConfig.artifactId - version = depConfig.version - website = "https://github.com/Blankj/UtilCodeExport" +ext { + groupId = Config.depConfig.feature_utilcode_export.groupId + artifactId = Config.depConfig.feature_utilcode_export.artifactId + version = Config.depConfig.feature_utilcode_export.version + website = "https://github.com/Blankj/AndroidUtilCode" } +apply from: "${rootDir.path}/config/publish.gradle" //./gradlew :feature_utilcode_export:mavenLocal // 上传到本地 mavenLocal \ No newline at end of file diff --git a/gradle/publish.gradle b/gradle/publish.gradle deleted file mode 100644 index 76bb5fea66..0000000000 --- a/gradle/publish.gradle +++ /dev/null @@ -1,237 +0,0 @@ -/* - 1. must add the following classpath in root build.gradle - classpath "com.github.dcendents:android-maven-gradle-plugin:2.1" - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4" - - 2. add bintrayUser, bintrayKey in root local.properties - - 3. copy the file to the directory of gradle, and apply the file in the module - apply from: "${rootDir.path}/gradle/publish.gradle" - publish { - name = "UtilCode" - groupId = "com.blankj" - artifactId = "utilcode" - version = "xx.xx" - website = "https://github.com/Blankj/AndroidUtilCode" - } - - 4. execute following command to publish - ./gradlew bintrayUpload -> upload to bintray - ./gradlew mavenLocal -> upload to local maven -*/ - -apply plugin: "com.github.dcendents.android-maven" -apply plugin: "com.jfrog.bintray" - -extensions.create('publish', PublishExtension) - -afterEvaluate { - def ext = project['publish'] as PublishExtension - loadBintray(ext) - configMaven(project, ext) - configBintray(project, ext) - configJavadoc(project, ext) -} - -private void loadBintray(PublishExtension ext) { - Properties properties = new Properties() - File localPropertiesFile = project.rootProject.file("local.properties"); - if (localPropertiesFile.exists()) { - properties.load(localPropertiesFile.newDataInputStream()) - ext.bintrayUser = properties.getProperty("bintrayUser") - ext.bintrayKey = properties.getProperty("bintrayKey") - } -} - -def configMaven(Project project, PublishExtension ext) { - project.group = ext.groupId - project.version = ext.version - - project.install { - repositories.mavenInstaller { - configPom(pom, ext) - } - } - - project.tasks.create("mavenLocal", Upload) { - group("publishing") - configuration = project.configurations.archives - - repositories.mavenDeployer { - repository(url: uri("${project.rootDir.path}/mavenLocal")) - configPom(pom, ext) - } - - doFirst { - ext.check(false) - } - } - - project.tasks.findByName("bintrayUpload").doFirst { - ext.check(true) - } -} - -def configPom(pom, PublishExtension ext) { - pom.project { - name ext.name - groupId ext.groupId - artifactId ext.artifactId - version ext.version - packaging isAndroid() ? "aar" : "jar" - description ext.name - url ext.website - - scm { - url ext.website - connection ext.website - developerConnection ext.website + ".git" - } - - licenses { - license { - name 'The Apache Software License, Version 2.0' - url 'http://www.apache.org/licenses/LICENSE-2.0.txt' - } - } - - developers { - developer { - id ext.bintrayUser - name ext.bintrayUser - } - } - } - - pom.whenConfigured { - // 检测 module 中的 dependencies 是否有源码依赖 - // 如果是源码依赖,而且没有在 config 中配置 remotePath,那么发布到仓库,其他地方依赖该库时会找不到源码的那个库 - it.dependencies.findAll { dep -> dep.version == "unspecified" }.collect { dep -> - DepConfig config = Config.depConfig.get(dep.artifactId) - if (config == null || config.version == null) { - // 源码依赖而且没有在 config 中配置 remotePath,直接报错 - System.err.println("The module of <" + dep.artifactId + "> should publish to maven first.") - throw new RuntimeException() - } - dep.groupId = config.groupId - dep.version = config.version - // 源码依赖,但配置了 remotePath,让 pom 中写入 remotePath - GLog.l("Please check <${dep.groupId}:${dep.artifactId}:${dep.version}> is published.") - } - } -} - -def configBintray(Project project, PublishExtension ext) { - project.bintray { - user = ext.bintrayUser - key = ext.bintrayKey - configurations = ['archives'] - override = false - publish = true - pkg { - repo = "maven" - name = ext.name - websiteUrl = ext.website - vcsUrl = ext.website + '.git' - licenses = ["Apache-2.0"] - } - } -} - -private void configJavadoc(Project project, PublishExtension ext) { - if (isAndroid()) { - // This generates sources.jar - task sourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java.source - } - - task javadoc(type: Javadoc) { - source = android.sourceSets.main.java.source - classpath += configurations.compile - classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) - } - - task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir - } - } else { - task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' - from sourceSets.main.allSource - } - - task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir - } - } - - if (project.hasProperty("kotlin")) { - // Disable creating javadocs - project.tasks.withType(Javadoc) { - enabled = false - } - } - - javadoc { - options { - encoding "UTF-8" - charSet 'UTF-8' - author true - version ext.version - links "http://docs.oracle.com/javase/7/docs/api" - title "${ext.name} ${ext.version}" - } - } - - artifacts { - archives javadocJar - archives sourcesJar - } -} - -def isAndroid() { - return project.getPlugins().hasPlugin('com.android.application') || - project.getPlugins().hasPlugin('com.android.library') -} - -class PublishExtension { - String name - String groupId - String artifactId - String version - String website - - String bintrayUser - String bintrayKey - - void check(boolean isBintray) { - checkField(name, "name") - checkField(groupId, "groupId") - checkField(artifactId, "artifactId") - checkField(version, "version") - checkField(website, "website") - - if (isBintray) { - if (isBintrayEmpty()) { - throw new NullPointerException("U should set bintrayUser and bintrayKey in local.properties") - } - } - } - - boolean isBintrayEmpty() { - return isEmpty(bintrayUser) || isEmpty(bintrayKey) - } - - static void checkField(String field, String fieldName) { - if (isEmpty(field)) { - throw new NullPointerException("$fieldName is empty!!") - } - } - - static boolean isEmpty(String str) { - return str == null || str.length() == 0 - } -} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e4718dff4d..1e0ae1a108 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/lib/subutil/build.gradle b/lib/subutil/build.gradle index a561916f3e..1d2b458537 100644 --- a/lib/subutil/build.gradle +++ b/lib/subutil/build.gradle @@ -1,5 +1,5 @@ apply { - plugin Config.depConfig.plugin_traute.pluginId +// plugin Config.depConfig.plugin_traute.pluginId plugin "readme-sub" } diff --git a/lib/utilcode/build.gradle b/lib/utilcode/build.gradle index 891f7dbf40..612969a45c 100644 --- a/lib/utilcode/build.gradle +++ b/lib/utilcode/build.gradle @@ -1,5 +1,5 @@ apply { - plugin Config.depConfig.plugin_traute.pluginId + // plugin Config.depConfig.plugin_traute.pluginId plugin "readme-core" } @@ -29,7 +29,7 @@ android { dependencies { implementation Config.depConfig.gson.dep - compileOnly Config.depConfig.androidx_appcompat.dep + implementation Config.depConfig.androidx_appcompat.dep compileOnly Config.depConfig.androidx_material.dep testImplementation Config.depConfig.test_junit.dep @@ -39,15 +39,10 @@ dependencies { testImplementation Config.depConfig.eventbus_lib.dep } -afterEvaluate { - verifyReleaseResources.enabled(false) -} - -apply from: "${rootDir.path}/gradle/publish.gradle" -publish { - name = "UtilCodeX" +ext { groupId = Config.depConfig.lib_utilcode.groupId artifactId = Config.depConfig.lib_utilcode.artifactId version = Config.depConfig.lib_utilcode.version website = "https://github.com/Blankj/AndroidUtilCode" -} \ No newline at end of file +} +apply from: "${rootDir.path}/config/publish.gradle" \ No newline at end of file diff --git a/lib/utilcode/src/main/AndroidManifest.xml b/lib/utilcode/src/main/AndroidManifest.xml index 4cf4fe1090..fc5b75e0e3 100644 --- a/lib/utilcode/src/main/AndroidManifest.xml +++ b/lib/utilcode/src/main/AndroidManifest.xml @@ -18,7 +18,7 @@ = Build.VERSION_CODES.N) { - String authority = Utils.getApp().getPackageName() + ".utilcode.provider"; + String authority = Utils.getApp().getPackageName() + ".utilcode.fileprovider"; return FileProvider.getUriForFile(Utils.getApp(), authority, file); } else { return Uri.fromFile(file); diff --git a/lib/utildebug/build.gradle b/lib/utildebug/build.gradle index 4dd4682f3c..22f1f7294b 100644 --- a/lib/utildebug/build.gradle +++ b/lib/utildebug/build.gradle @@ -1,7 +1,3 @@ -afterEvaluate { - verifyReleaseResources.enabled(false) -} - dependencies { compileOnly Config.depConfig.androidx_appcompat.dep compileOnly Config.depConfig.androidx_material.dep diff --git a/plugin/api-gradle-plugin/build.gradle b/plugin/api-gradle-plugin/build.gradle index 8b859f35a6..2f6b956ee0 100755 --- a/plugin/api-gradle-plugin/build.gradle +++ b/plugin/api-gradle-plugin/build.gradle @@ -31,14 +31,12 @@ sourceSets { } } -apply from: "${rootDir.path}/gradle/publish.gradle" -publish { - name = "ApiPlugin" +ext { groupId = Config.depConfig.plugin_api.groupId artifactId = Config.depConfig.plugin_api.artifactId version = Config.depConfig.plugin_api.version website = "https://github.com/Blankj/AndroidUtilCode" } - +apply from: "${rootDir.path}/config/publish.gradle" //./gradlew clean :plugin_api-gradle-plugin:mavenLocal // 上传到本地 mavenLocal //./gradlew clean :plugin_api-gradle-plugin:bintrayUpload // 上传到 jcenter diff --git a/plugin/bus-gradle-plugin/build.gradle b/plugin/bus-gradle-plugin/build.gradle index ec264eaf4e..7cd24042a7 100755 --- a/plugin/bus-gradle-plugin/build.gradle +++ b/plugin/bus-gradle-plugin/build.gradle @@ -31,14 +31,12 @@ sourceSets { } } -apply from: "${rootDir.path}/gradle/publish.gradle" -publish { - name = "BusPlugin" +ext { groupId = Config.depConfig.plugin_bus.groupId artifactId = Config.depConfig.plugin_bus.artifactId version = Config.depConfig.plugin_bus.version website = "https://github.com/Blankj/AndroidUtilCode" } - +apply from: "${rootDir.path}/config/publish.gradle" //./gradlew clean :plugin_bus-gradle-plugin:mavenLocal // 上传到本地 mavenLocal //./gradlew clean :plugin_bus-gradle-plugin:bintrayUpload // 上传到 jcenter \ No newline at end of file diff --git a/plugin/lib/base-transform/build.gradle b/plugin/lib/base-transform/build.gradle index 72d0abe453..3518481ebd 100755 --- a/plugin/lib/base-transform/build.gradle +++ b/plugin/lib/base-transform/build.gradle @@ -18,14 +18,12 @@ sourceSets { } } -apply from: "${rootDir.path}/gradle/publish.gradle" -publish { - name = "BaseTransform" +ext { groupId = Config.depConfig.plugin_lib_base_transform.groupId artifactId = Config.depConfig.plugin_lib_base_transform.artifactId version = Config.depConfig.plugin_lib_base_transform.version website = "https://github.com/Blankj/AndroidUtilCode" } - +apply from: "${rootDir.path}/config/publish.gradle" //./gradlew clean plugin:lib:plugin_lib_base-transform:mavenLocal // 上传到本地 mavenLocal //./gradlew clean plugin:lib:plugin_lib_base-transform:bintrayUpload // 上传到 gradle 插件库中 diff --git a/script/clean.sh b/script/clean.sh deleted file mode 100755 index 2ff72056bb..0000000000 --- a/script/clean.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash -rm -rf .idea -find . -name "*.iml" -type f -exec rm -rf {} \; -find . -name "build" -type d -exec rm -rf {} \; \ No newline at end of file diff --git a/script/gitHelp.sh b/script/gitHelp.sh new file mode 100755 index 0000000000..af98ce2ac6 --- /dev/null +++ b/script/gitHelp.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +while true; do + echo " ############## input command code #################" + echo " # [1] Git Push #" + echo " # [2] Git Push And Merge to Master #" + echo " # [other] exit #" + echo " ###################################################" + + read which + + case $which in + 1) + curBranch=$(git symbolic-ref --short -q HEAD) + gitPush $curBranch + ;; + 2) + curBranch=$(git symbolic-ref --short -q HEAD) + gitPush $curBranch + echo "git checkout master" + echo $(git checkout master) + echo "git merge $branchName" + echo $(git merge $branchName) + echo "git push origin master" + echo $(git push origin master) + echo "git checkout $branchName" + echo $(git checkout $branchName) + ;; + *) + echo "88" + break + ;; + esac +done + +function gitPush() { + curBranch=$1 + echo "curBranch = $curBranch" + echo "git add -A" + echo $(git add -A) + date=$(date "+%m/%d") + echo "git commit -m \"see $date log\"" + echo $(git commit -m "see $date log") + echo "git push origin $curBranch" + echo $(git push origin $curBranch) +} diff --git a/script/runDevDebug.sh b/script/runDevDebug.sh new file mode 100755 index 0000000000..e42394e0c8 --- /dev/null +++ b/script/runDevDebug.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -e + +# build dev debug apk +./gradlew --daemon installDevDebug + +# start main activity +adb shell am start -n "com.blankj.androidutilcode.dev/com.blankj.main.pkg.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER \ No newline at end of file diff --git a/script/runProductionRelease.sh b/script/runProductionRelease.sh new file mode 100755 index 0000000000..a3d44d5ede --- /dev/null +++ b/script/runProductionRelease.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -e + +# build dev debug apk +./gradlew --daemon installProductionRelease + +# start main activity +adb shell am start -n "com.blankj.androidutilcode/com.blankj.main.pkg.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER \ No newline at end of file From 8faee0b382724d3579921672f8a5dbb9c9360f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=AD=87=E5=B0=94?= Date: Wed, 22 Sep 2021 13:39:01 -0600 Subject: [PATCH 27/52] isUsingNetworkProvidedTime() Useful in situations where you want to verify that the device has a correct time set, to avoid fraud, or if you want to prevent the user from messing with the time and abusing your "one-time" and "expiring" features. --- .../java/com/blankj/utilcode/util/TimeUtils.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java index 2ab5370c82..88887b621f 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java @@ -36,6 +36,19 @@ protected Map initialValue() { private static SimpleDateFormat getDefaultFormat() { return getSafeDateFormat("yyyy-MM-dd HH:mm:ss"); } + /** + * Checks whether the device is using Network Provided Time or not. + * Useful in situations where you want to verify that the device has a correct time set, to avoid fraud, or if you want to prevent the user from messing with the time and abusing your "one-time" and "expiring" features. + * @return {@code true}: yes
{@code false}: no + */ + public static boolean isUsingNetworkProvidedTime() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + return Settings.Global.getInt(Utils.getApp().getContentResolver(), Settings.Global.AUTO_TIME, 0) == 1; + } else { + return android.provider.Settings.System.getInt(Utils.getApp().getContentResolver(), android.provider.Settings.System.AUTO_TIME, 0) == 1; + } + } + @SuppressLint("SimpleDateFormat") public static SimpleDateFormat getSafeDateFormat(String pattern) { From fb1f0d0a616bbbb326e9c7665887365c5dd064f9 Mon Sep 17 00:00:00 2001 From: jikun2008Date: Wed, 10 Nov 2021 16:52:17 +0800 Subject: [PATCH 28/52] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit //这里会发生内存泄漏 如果不设置为null contentView.setTag(TAG_ON_GLOBAL_LAYOUT_LISTENER, null); --- .../src/main/java/com/blankj/utilcode/util/KeyboardUtils.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java index 7f95fdee75..fd70fef220 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java @@ -238,6 +238,8 @@ public static void unregisterSoftInputChangedListener(@NonNull final Window wind if (tag instanceof OnGlobalLayoutListener) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { contentView.getViewTreeObserver().removeOnGlobalLayoutListener((OnGlobalLayoutListener) tag); + //这里会发生内存泄漏 如果不设置为null + contentView.setTag(TAG_ON_GLOBAL_LAYOUT_LISTENER, null); } } } From 9df5d7e15b06109153d0499c3f1ed1a3080c94ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=AD=87=E5=B0=94?= Date: Tue, 23 Nov 2021 22:19:24 +0100 Subject: [PATCH 29/52] 2 new methods: isJSONObject() and isJSONArray() Check if a given input is a JSONObject or a JSONArray. --- .../com/blankj/utilcode/util/JsonUtils.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/JsonUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/JsonUtils.java index ea40ac3162..43046adf5a 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/JsonUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/JsonUtils.java @@ -26,6 +26,27 @@ private JsonUtils() { throw new UnsupportedOperationException("u can't instantiate me..."); } + + /** + * Checks if a given input is a JSONObject. + * + * @param input Anything. + * @return true if it is a JSONObject. + */ + public static boolean isJSONObject(final T input) { + return input instanceof JSONObject; + } + + /** + * Checks if a given input is a JSONArray + * + * @param input Anything. + * @return true if it is a JSONArray. + */ + public static boolean isJSONArray(final T input) { + return input instanceof JSONArray; + } + public static boolean getBoolean(final JSONObject jsonObject, final String key) { return getBoolean(jsonObject, key, false); From e40b6d40b55cfb3608cd954d6bdd1feac67b94ca Mon Sep 17 00:00:00 2001 From: caimengjie Date: Mon, 6 Dec 2021 00:00:20 +0800 Subject: [PATCH 30/52] opt: Config --- build.gradle | 4 +- buildApp.gradle | 43 ++-- buildCommon.gradle | 5 + buildLib.gradle | 2 +- buildSrc/settings.gradle | 8 + buildSrc/src/main/groovy/Config.groovy | 114 ++++----- buildSrc/src/main/groovy/ConfigUtils.groovy | 45 ++-- buildSrc/src/main/groovy/DepConfig.groovy | 93 ------- buildSrc/src/main/groovy/GitUtils.groovy | 111 --------- buildSrc/src/main/groovy/LibConfig.groovy | 29 +++ buildSrc/src/main/groovy/ModuleConfig.groovy | 35 +++ buildSrc/src/main/groovy/PluginConfig.groovy | 35 +++ buildSrc/src/main/groovy/ShellUtils.java | 228 ------------------ .../src/main/groovy/TaskDurationUtils.groovy | 5 + config.json | 28 --- config/publish.gradle | 52 ++-- feature/launcher/app/build.gradle | 2 +- feature/utilcode/export/build.gradle | 8 +- gradle/wrapper/gradle-wrapper.jar | Bin 53636 -> 55616 bytes gradlew | 88 ++++--- gradlew.bat | 190 ++++++++------- lib/base/build.gradle | 23 +- .../java/com/blankj/base/rv/BaseItem.java | 6 +- lib/common/build.gradle | 2 +- lib/subutil/build.gradle | 19 +- lib/utilcode/README-CN.md | 1 + lib/utilcode/build.gradle | 23 +- .../blankj/utilcode/util/ActivityUtils.java | 3 +- .../com/blankj/utilcode/util/AppUtils.java | 16 ++ .../com/blankj/utilcode/util/CrashUtils.java | 30 ++- .../blankj/utilcode/util/KeyboardUtils.java | 127 ++++++---- .../blankj/utilcode/util/MetaDataUtils.java | 2 +- .../com/blankj/utilcode/util/SpanUtils.java | 26 +- .../util/UtilsActivityLifecycleImpl.java | 19 +- lib/utildebug/build.gradle | 16 +- .../com/blankj/utildebug/menu/DebugMenu.java | 1 + module_config.gradle | 72 ++++++ module_config.json | 30 +++ module_config.yaml | 91 +++++++ plugin/api-gradle-plugin/build.gradle | 20 +- plugin/buildSrc-plugin/.gitignore | 1 + plugin/buildSrc-plugin/build.gradle | 37 +++ .../com/blankj/buildSrc/BuildSrcPlugin.groovy | 13 + .../java/com/blankj/buildSrc/ModuleCfg.groovy | 80 ++++++ plugin/bus-gradle-plugin/build.gradle | 18 +- plugin/lib/base-transform/build.gradle | 14 +- settings.gradle | 112 +++------ 47 files changed, 968 insertions(+), 959 deletions(-) create mode 100644 buildSrc/settings.gradle delete mode 100644 buildSrc/src/main/groovy/DepConfig.groovy delete mode 100644 buildSrc/src/main/groovy/GitUtils.groovy create mode 100644 buildSrc/src/main/groovy/LibConfig.groovy create mode 100644 buildSrc/src/main/groovy/ModuleConfig.groovy create mode 100644 buildSrc/src/main/groovy/PluginConfig.groovy delete mode 100644 buildSrc/src/main/groovy/ShellUtils.java delete mode 100644 config.json create mode 100644 module_config.gradle create mode 100644 module_config.json create mode 100644 module_config.yaml create mode 100755 plugin/buildSrc-plugin/.gitignore create mode 100755 plugin/buildSrc-plugin/build.gradle create mode 100644 plugin/buildSrc-plugin/src/main/java/com/blankj/buildSrc/BuildSrcPlugin.groovy create mode 100644 plugin/buildSrc-plugin/src/main/java/com/blankj/buildSrc/ModuleCfg.groovy diff --git a/build.gradle b/build.gradle index 133f032278..e0f0f36c87 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { dependencies { for (def entrySet : ConfigUtils.getApplyPlugins().entrySet()) { - classpath entrySet.value.dep + classpath entrySet.value.path } } } @@ -29,7 +29,7 @@ allprojects { resolutionStrategy.eachDependency { if (it.requested.group == 'com.android.support' && !it.requested.name.contains( - 'multidex')) { + 'multidex')) { it.useVersion Config.supportVersion } } diff --git a/buildApp.gradle b/buildApp.gradle index d7ed2c75a3..93f0b9b1d4 100644 --- a/buildApp.gradle +++ b/buildApp.gradle @@ -1,29 +1,30 @@ +apply plugin: "com.android.application" + apply { - plugin "com.android.application" from "${rootDir.path}/buildCommon.gradle" from "${rootDir.path}/config/flavor.gradle" - if (Config.depConfig.plugin_api.isApply) { - plugin Config.depConfig.plugin_api.pluginId + if (Config.plugins.plugin_api.isApply) { + plugin Config.plugins.plugin_api.id } - if (Config.depConfig.plugin_bus.isApply) { - plugin Config.depConfig.plugin_bus.pluginId + if (Config.plugins.plugin_bus.isApply) { + plugin Config.plugins.plugin_bus.id } } configSigning() configApkName() -if (Config.depConfig.plugin_bus.isApply) { - bus { - onlyScanLibRegex = '^([:]|(com\\.blankj)).+$' - } -} - -if (Config.depConfig.plugin_api.isApply) { - api { - onlyScanLibRegex = '^([:]|(com\\.blankj)).+$' - } -} +//if (PluginConfig.plugin_bus.isApply) { +// bus { +// onlyScanLibRegex = '^([:]|(com\\.blankj)).+$' +// } +//} +// +//if (PluginConfig.plugin_api.isApply) { +// api { +// onlyScanLibRegex = '^([:]|(com\\.blankj)).+$' +// } +//} android { defaultConfig { @@ -67,18 +68,18 @@ android { dependencies { // LeakCanary - debugImplementation Config.depConfig.leakcanary.dep + debugImplementation Config.libs.leakcanary.path - debugImplementation Config.depConfig.lib_utildebug.dep - releaseImplementation Config.depConfig.lib_utildebug_no_op.dep + debugImplementation Config.modules.lib_utildebug.dep + releaseImplementation Config.modules.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.modules.feature_mock.isApply) { + api ModuleConfig.modules.feature_mock.dep } } diff --git a/buildCommon.gradle b/buildCommon.gradle index 8cbcc26255..2cba3ffea2 100644 --- a/buildCommon.gradle +++ b/buildCommon.gradle @@ -19,6 +19,11 @@ android { } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + lintOptions { abortOnError false } diff --git a/buildLib.gradle b/buildLib.gradle index ac9c42ac1c..aed207cbee 100644 --- a/buildLib.gradle +++ b/buildLib.gradle @@ -8,6 +8,6 @@ dependencies { api entrySet.value.dep } } else if (project.name.endsWith("_export")) { - api Config.depConfig.lib_common.dep + api Config.modules.lib_common.dep } } \ No newline at end of file diff --git a/buildSrc/settings.gradle b/buildSrc/settings.gradle new file mode 100644 index 0000000000..8a313c3b99 --- /dev/null +++ b/buildSrc/settings.gradle @@ -0,0 +1,8 @@ +//dependencyResolutionManagement { +// repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) +// repositories { +// google() +// mavenCentral() +// jcenter() // Warning: this repository is going to shut down soon +// } +//} \ No newline at end of file diff --git a/buildSrc/src/main/groovy/Config.groovy b/buildSrc/src/main/groovy/Config.groovy index 4fb2b7ef2f..4a0b27a980 100644 --- a/buildSrc/src/main/groovy/Config.groovy +++ b/buildSrc/src/main/groovy/Config.groovy @@ -1,11 +1,3 @@ -/** - * - * author: blankj - * blog : http://blankj.com - * time : 2019/07/13 - * desc : - *- */ class Config { static applicationId = 'com.blankj.androidutilcode' @@ -14,74 +6,84 @@ class Config { static compileSdkVersion = 29 static minSdkVersion = 14 static targetSdkVersion = 29 - static versionCode = 1_030_006 - static versionName = '1.30.7-alpha1'// E.g. 1.9.72 => 1,009,072 + static versionCode = 1_030_007 + static versionName = '1.31.0'// E.g. 1.9.72 => 1,009,072 // lib version static gradlePluginVersion = '4.1.0' static kotlinVersion = '1.3.72' static androidxVersion = '1.0.0' - static depConfig = [ - /*Never delete this line*/ - /*Generated by "config.json"*/ - plugin_api_gradle_plugin : new DepConfig(true , true , ":plugin:api-gradle-plugin"), - plugin_bus_gradle_plugin : new DepConfig(true , true , ":plugin:bus-gradle-plugin"), - plugin_lib_base_transform : new DepConfig(true , false, ":plugin:lib:base-transform", "com.blankj:base-transform:1.0"), - 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", "com.blankj:utilcode-export:1.1"), - 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:utilcodex:$versionName"), - lib_utildebug : new DepConfig(true , true , ":lib:utildebug"), - lib_utildebug_no_op : new DepConfig(true , true , ":lib:utildebug-no-op"), - /*Never delete this line*/ - plugin_gradle : new DepConfig(pluginPath: "com.android.tools.build:gradle:$gradlePluginVersion"), - plugin_kotlin : new DepConfig(pluginPath: "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"), - plugin_traute : new DepConfig(pluginPath: "tech.harmonysoft:traute-gradle:1.1.10", pluginId: "tech.harmonysoft.oss.traute"),// 注解转非空判断 + static modules = [ + /*Don't delete this line*/ + /*Generated by "module_config.json"*/ + plugin_api_gradle_plugin : new ModuleConfig(isApply: true , useLocal: true , localPath: "./plugin/api-gradle-plugin"), + plugin_bus_gradle_plugin : new ModuleConfig(isApply: true , useLocal: true , localPath: "./plugin/bus-gradle-plugin"), + plugin_lib_base_transform : new ModuleConfig(isApply: true , useLocal: true , localPath: "./plugin/lib/base-transform", remotePath: "com.blankj:base-transform:1.0"), + plugin_buildSrc_plugin : new ModuleConfig(isApply: true , useLocal: true , localPath: "./plugin/buildSrc-plugin"), + feature_mock : new ModuleConfig(isApply: false, useLocal: true , localPath: "./feature/mock"), + feature_launcher_app : new ModuleConfig(isApply: true , useLocal: true , localPath: "./feature/launcher/app"), + feature_main_app : new ModuleConfig(isApply: false, useLocal: true , localPath: "./feature/main/app"), + feature_main_pkg : new ModuleConfig(isApply: true , useLocal: true , localPath: "./feature/main/pkg"), + feature_subutil_app : new ModuleConfig(isApply: false, useLocal: true , localPath: "./feature/subutil/app"), + feature_subutil_pkg : new ModuleConfig(isApply: true , useLocal: true , localPath: "./feature/subutil/pkg"), + feature_subutil_export : new ModuleConfig(isApply: true , useLocal: true , localPath: "./feature/subutil/export"), + feature_utilcode_app : new ModuleConfig(isApply: false, useLocal: true , localPath: "./feature/utilcode/app"), + feature_utilcode_pkg : new ModuleConfig(isApply: true , useLocal: true , localPath: "./feature/utilcode/pkg"), + feature_utilcode_export : new ModuleConfig(isApply: true , useLocal: true , localPath: "./feature/utilcode/export", remotePath: "com.blankj:utilcode-export:1.1"), + lib_base : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/base"), + lib_common : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/common"), + lib_subutil : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/subutil"), + lib_utilcode : new ModuleConfig(isApply: true , useLocal: false, localPath: "./lib/utilcode", remotePath: "com.blankj:utilcode:$Config.versionName"), + lib_utildebug : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/utildebug"), + lib_utildebug_no_op : new ModuleConfig(isApply: true , useLocal: true , localPath: "./lib/utildebug-no-op"), + /*Don't delete this line*/ + ] + + static plugins = [ + plugin_gradle : new PluginConfig(path: "com.android.tools.build:gradle:$gradlePluginVersion"), + plugin_kotlin : new PluginConfig(path: "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"), + // 上传到 maven + plugin_maven : new PluginConfig(path: "com.github.dcendents:android-maven-gradle-plugin:2.1", id: "com.github.dcendents.android-maven"), - // 上传新版本插件更新 pluginPath 中的版本号,并设置 isApply = false + // 上传新版本插件更新 path 中的版本号,并设置 isApply = false // 通过 mavenLocal 上传本地版本,设置 isApply = true 即可应用插件来调试,最后通过 bintrayUpload 来发布插件 - plugin_api : new DepConfig(isApply: true, useLocal: false, pluginPath: "com.blankj:api-gradle-plugin:1.5", pluginId: "com.blankj.api"), + plugin_api : new PluginConfig(isApply: true, useLocal: false, path: "com.blankj:api-gradle-plugin:1.5", id: "com.blankj.api"), //./gradlew clean :plugin_api-gradle-plugin:mavenLocal // 上传到本地 mavenLocal //./gradlew clean :plugin_api-gradle-plugin:bintrayUpload // 上传到 jcenter - plugin_bus : new DepConfig(isApply: true, useLocal: false, pluginPath: "com.blankj:bus-gradle-plugin:2.6", pluginId: "com.blankj.bus"), + plugin_bus : new PluginConfig(isApply: true, useLocal: false, path: "com.blankj:bus-gradle-plugin:2.6", id: "com.blankj.bus"), //./gradlew clean :plugin_bus-gradle-plugin:mavenLocal // 上传到本地 mavenLocal //./gradlew clean :plugin_bus-gradle-plugin:bintrayUpload // 上传到 jcenter + plugin_buildSrc: new PluginConfig(isApply: true, useLocal: false, path: "com.blankj:buildSrc-plugin:1.0", id: "com.blankj.buildSrc"), + //./gradlew clean :plugin_bus-gradle-plugin:mavenLocal // 上传到本地 mavenLocal + //./gradlew clean :plugin_bus-gradle-plugin:bintrayUpload // 上传到 jcenter + ] - androidx_appcompat : new DepConfig("androidx.appcompat:appcompat:$androidxVersion"), - androidx_material : new DepConfig("com.google.android.material:material:$androidxVersion"), - androidx_multidex : new DepConfig("androidx.multidex:multidex:2.0.0"), - androidx_constraint : new DepConfig("androidx.constraintlayout:constraintlayout:1.1.3"), + static libs = [ + androidx_appcompat : new LibConfig(path: "androidx.appcompat:appcompat:$androidxVersion"), + androidx_material : new LibConfig(path: "com.google.android.material:material:$androidxVersion"), + androidx_multidex : new LibConfig(path: "androidx.multidex:multidex:2.0.0"), + androidx_constraint: new LibConfig(path: "androidx.constraintlayout:constraintlayout:1.1.3"), - kotlin : new DepConfig("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"), + kotlin : new LibConfig(path: "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"), - leakcanary : new DepConfig("com.squareup.leakcanary:leakcanary-android:2.1"), + leakcanary : new LibConfig(path: "com.squareup.leakcanary:leakcanary-android:2.1"), - free_proguard : new DepConfig("com.blankj:free-proguard:1.0.2"), - swipe_panel : new DepConfig("com.blankj:swipe-panel:1.2"), + free_proguard : new LibConfig(path: "com.blankj:free-proguard:1.0.2"), + swipe_panel : new LibConfig(path: "com.blankj:swipe-panel:1.2"), - gson : new DepConfig("com.google.code.gson:gson:2.8.5"), - 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"), + gson : new LibConfig(path: "com.google.code.gson:gson:2.8.5"), + glide : new LibConfig(path: "com.github.bumptech.glide:glide:4.7.1"), + retrofit : new LibConfig(path: "com.squareup.retrofit2:retrofit:2.4.0"), + commons_io : new LibConfig(path: "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"), + eventbus_lib : new LibConfig(path: "org.greenrobot:eventbus:3.1.1"), + eventbus_processor : new LibConfig(path: "org.greenrobot:eventbus-annotation-processor:3.0.1"), - photo_view : new DepConfig("com.github.chrisbanes:PhotoView:2.0.0"), + photo_view : new LibConfig(path: "com.github.chrisbanes:PhotoView:2.0.0"), - test_junit : new DepConfig("junit:junit:4.12"), - test_robolectric : new DepConfig("org.robolectric:robolectric:4.3.1"), + test_junit : new LibConfig(path: "junit:junit:4.12"), + test_robolectric : new LibConfig(path: "org.robolectric:robolectric:4.3.1"), ] } //./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 d60518fac5..6a09d2f2d9 100644 --- a/buildSrc/src/main/groovy/ConfigUtils.groovy +++ b/buildSrc/src/main/groovy/ConfigUtils.groovy @@ -17,7 +17,6 @@ class ConfigUtils { generateDep(gradle) addCommonGradle(gradle) TaskDurationUtils.init(gradle) - GitUtils.init(gradle) } /** @@ -25,16 +24,12 @@ class ConfigUtils { */ private static void generateDep(Gradle gradle) { def configs = [:] - for (Map.Entryentry : Config.depConfig.entrySet()) { + for (Map.Entry entry : Config.modules.entrySet()) { def (name, config) = [entry.key, entry.value] - if (entry.value.pluginPath) { - config.dep = config.pluginPath + if (config.useLocal) { + config.dep = gradle.rootProject.findProject(name) } else { - if (config.useLocal) { - config.dep = gradle.rootProject.findProject(config.projectPath) - } else { - config.dep = config.remotePath - } + config.dep = config.remotePath } configs.put(name, config) } @@ -46,20 +41,18 @@ class ConfigUtils { @Override void beforeEvaluate(Project project) { // 在 project 的 build.gradle 前 do sth. - if (project.subprojects.isEmpty()) { - if (project.path.startsWith(":plugin")) { - return + if (project.name.contains("plugin")) { + return + } + if (project.name.endsWith("_app")) { + GLog.l(project.toString() + " applies buildApp.gradle") + project.apply { + from "${project.rootDir.path}/buildApp.gradle" } - if (project.name.endsWith("_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" } } } @@ -73,8 +66,8 @@ class ConfigUtils { static getApplyPlugins() { def plugins = [:] - for (Map.Entry entry : Config.depConfig.entrySet()) { - if (entry.value.isApply && entry.value.pluginPath) { + for (Map.Entry entry : Config.plugins.entrySet()) { + if (entry.value.isApply) { plugins.put(entry.key, entry.value) } } @@ -84,7 +77,7 @@ class ConfigUtils { static getApplyPkgs() { def pkgs = [:] - for (Map.Entry entry : Config.depConfig.entrySet()) { + for (Map.Entry entry : Config.modules.entrySet()) { if (entry.value.isApply && entry.key.endsWith("_pkg")) { pkgs.put(entry.key, entry.value) } @@ -95,7 +88,7 @@ class ConfigUtils { static getApplyExports() { def exports = [:] - for (Map.Entry entry : Config.depConfig.entrySet()) { + for (Map.Entry entry : Config.modules.entrySet()) { if (entry.value.isApply && entry.key.endsWith("_export")) { exports.put(entry.key, entry.value) } diff --git a/buildSrc/src/main/groovy/DepConfig.groovy b/buildSrc/src/main/groovy/DepConfig.groovy deleted file mode 100644 index 042b67036d..0000000000 --- a/buildSrc/src/main/groovy/DepConfig.groovy +++ /dev/null @@ -1,93 +0,0 @@ -/** - * - * author: blankj - * blog : http://blankj.com - * time : 2019/07/13 - * desc : - *- */ -class DepConfig { - boolean isApply // 是否应用 - boolean useLocal // 是否使用本地的 - String localPath // 本地路径 - String remotePath// 远程路径 - String pluginPath// 插件路径 - String pluginId // 插件 ID - def dep // 根据条件生成项目最终的依赖项 - - DepConfig() { - isApply = true - } - - DepConfig(String path) { - this(true, path) - } - - DepConfig(boolean isApply, String path) { - if (path.startsWith(":")) { - this.useLocal = true - this.localPath = path - this.isApply = isApply - } else { - this.useLocal = false - this.remotePath = path - this.isApply = isApply - } - } - - DepConfig(boolean useLocal, String localPath, String remotePath) { - this(true, useLocal, localPath, remotePath) - } - - DepConfig(boolean isApply, boolean useLocal, String localPath) { - this(isApply, useLocal, localPath, null) - } - - DepConfig(boolean isApply, boolean useLocal, String localPath, String remotePath) { - this.isApply = isApply - this.useLocal = useLocal - this.localPath = localPath - this.remotePath = remotePath - } - - void setPluginPath(String pluginPath) { - this.pluginPath = pluginPath - this.remotePath = pluginPath - } - - String getPath() { - if (pluginPath != null) return pluginPath - return useLocal ? localPath : remotePath - } - - String getGroupId() { - String[] splits = remotePath.split(":") - return splits.length == 3 ? splits[0] : null - } - - String getArtifactId() { - String[] splits = remotePath.split(":") - return splits.length == 3 ? splits[1] : null - } - - String getVersion() { - String[] splits = remotePath.split(":") - return splits.length == 3 ? splits[2] : null - } - - String getProjectPath() { - return ":" + localPath.substring(1).replace(":", "_") - } - - @Override - String toString() { - return "{ isApply = ${getFlag(isApply)}" + - ", useLocal = ${getFlag(useLocal)}" + - (dep == null ? ", path = " + path : (", dep = " + dep)) + - " }" - } - - static String getFlag(boolean b) { - return b ? "✅" : "❌" - } -} \ No newline at end of file diff --git a/buildSrc/src/main/groovy/GitUtils.groovy b/buildSrc/src/main/groovy/GitUtils.groovy deleted file mode 100644 index f525377a79..0000000000 --- a/buildSrc/src/main/groovy/GitUtils.groovy +++ /dev/null @@ -1,111 +0,0 @@ -import org.gradle.api.Action -import org.gradle.api.Project -import org.gradle.api.invocation.Gradle - -import java.text.SimpleDateFormat - -/** - *- * author: blankj - * blog : http://blankj.com - * time : 2019/08/16 - * desc : - *- */ -class GitUtils { - - private static Project rootProject; - - static void init(Gradle gradle) { - rootProject = gradle.rootProject - addGitHelpTask() - } - - static def addGitHelpTask() { - rootProject.task("gitHelp").doLast { - def commands = [ - " ############## input command code #################", - " # [1] Git Push #", - " # [2] Git Push And Merge to Master #", - " # [3] Git New Branch #", - " # [0] exit #", - " ###################################################", - ] - String commandTips = String.join(System.getProperty("line.separator"), commands) - while (true) { - GLog.l(commandTips) - Scanner scanner = new Scanner(System.in) - def input = scanner.next() - GLog.l(input) - switch (input) { - case "1": - gitPush() - break - case "2": - gitPushAndMerge2Master() - break - case "3": - gitNewBranch() - break - case "0": - return - } - } - } - } - - static void gitPush() { - String branchName = getGitBranch() - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd") - String date = simpleDateFormat.format(new Date()) - exeCmd( - "git add -A", - "git commit -m \"see $date log\"", - "git push origin $branchName" - ) - } - - static void gitPushAndMerge2Master() { - String branchName = getGitBranch() - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd") - String date = simpleDateFormat.format(new Date()) - exeCmd( - "git add -A", - "git commit -m \"see $date log\"", - "git push origin $branchName", - "git checkout master", - "git merge $branchName", - "git push origin master", - "git checkout $branchName" - ) - } - - static void gitNewBranch() { - exeCmd( - "git checkout master", - "git checkout -b ${Config.versionName}", - "git push origin ${Config.versionName}:${Config.versionName}", - ) - } - - private static def getGitBranch() { - return exeCmd("git symbolic-ref --short -q HEAD") - } - - private static def exeCmd(String... cmds) { - String output = "" - for (def cmd in cmds) { - output = _exeCmd(cmd) - } - return output - } - - private static def _exeCmd(String cmd) { - def output = new StringBuilder() - GLog.l("Execute command: ${cmd}") - def cmdResult = ShellUtils.execCmd(cmd) - GLog.l("$cmdResult") - return cmdResult.successMsg - } -} -// ./gradlew gitHelp diff --git a/buildSrc/src/main/groovy/LibConfig.groovy b/buildSrc/src/main/groovy/LibConfig.groovy new file mode 100644 index 0000000000..6369553ba0 --- /dev/null +++ b/buildSrc/src/main/groovy/LibConfig.groovy @@ -0,0 +1,29 @@ +class LibConfig { + + String path + + String getGroupId() { + String[] splits = path.split(":") + return splits.length == 3 ? splits[0] : null + } + + String getArtifactId() { + String[] splits = path.split(":") + return splits.length == 3 ? splits[1] : null + } + + String getVersion() { + String[] splits = path.split(":") + return splits.length == 3 ? splits[2] : null + } + + @Override + String toString() { + return "LibConfig { path = $path }" + } + + static String getFlag(boolean b) { + return b ? "✅" : "❌" + } +} + diff --git a/buildSrc/src/main/groovy/ModuleConfig.groovy b/buildSrc/src/main/groovy/ModuleConfig.groovy new file mode 100644 index 0000000000..291abd8ffe --- /dev/null +++ b/buildSrc/src/main/groovy/ModuleConfig.groovy @@ -0,0 +1,35 @@ +class ModuleConfig { + + boolean isApply // 是否应用 + boolean useLocal // 是否使用本地的 + String localPath // 本地路径 + String remotePath // 远程路径 + def dep // 根据条件生成项目最终的依赖项 + + String getGroupId() { + String[] splits = remotePath.split(":") + return splits.length == 3 ? splits[0] : null + } + + String getArtifactId() { + String[] splits = remotePath.split(":") + return splits.length == 3 ? splits[1] : null + } + + String getVersion() { + String[] splits = remotePath.split(":") + return splits.length == 3 ? splits[2] : null + } + + @Override + String toString() { + return "ModuleConfig { isApply = ${getFlag(isApply)}" + + ", dep = " + dep + + " }" + } + + static String getFlag(boolean b) { + return b ? "✅" : "❌" + } +} + diff --git a/buildSrc/src/main/groovy/PluginConfig.groovy b/buildSrc/src/main/groovy/PluginConfig.groovy new file mode 100644 index 0000000000..3811c6a0ca --- /dev/null +++ b/buildSrc/src/main/groovy/PluginConfig.groovy @@ -0,0 +1,35 @@ +final class PluginConfig { + + boolean isApply = true // 是否应用 + boolean useLocal // 是否使用本地的 + String path // 插件路径 + String id // 插件 ID + + String getGroupId() { + String[] splits = path.split(":") + return splits.length == 3 ? splits[0] : null + } + + String getArtifactId() { + String[] splits = path.split(":") + return splits.length == 3 ? splits[1] : null + } + + String getVersion() { + String[] splits = path.split(":") + return splits.length == 3 ? splits[2] : null + } + + @Override + String toString() { + return "PluginConfig { isApply = ${getFlag(isApply)}" + + ", useLocal = ${getFlag(useLocal)}" + + ", path = " + path + + ", id = " + id + + " }" + } + + static String getFlag(boolean b) { + return b ? "✅" : "❌" + } +} \ No newline at end of file diff --git a/buildSrc/src/main/groovy/ShellUtils.java b/buildSrc/src/main/groovy/ShellUtils.java deleted file mode 100644 index ef4917c68e..0000000000 --- a/buildSrc/src/main/groovy/ShellUtils.java +++ /dev/null @@ -1,228 +0,0 @@ -import java.io.BufferedReader; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.List; - -/** - *- * author: Blankj - * blog : http://blankj.com - * time : 2016/08/07 - * desc : utils about shell - *- */ -public final class ShellUtils { - - private static final String LINE_SEP = System.getProperty("line.separator"); - - private ShellUtils() { - throw new UnsupportedOperationException("u can't instantiate me..."); - } - - /** - * Execute the command. - * - * @param command The command. - * @return the single {@link CommandResult} instance - */ - public static CommandResult execCmd(final String command) { - return execCmd(new String[]{command}, false, true); - } - - /** - * Execute the command. - * - * @param command The command. - * @param isRooted True to use root, false otherwise. - * @return the single {@link CommandResult} instance - */ - public static CommandResult execCmd(final String command, final boolean isRooted) { - return execCmd(new String[]{command}, isRooted, true); - } - - /** - * Execute the command. - * - * @param commands The commands. - * @return the single {@link CommandResult} instance - */ - public static CommandResult execCmd(final Listcommands) { - return execCmd(commands == null ? null : commands.toArray(new String[]{}), false, true); - } - - /** - * Execute the command. - * - * @param commands The commands. - * @param isRooted True to use root, false otherwise. - * @return the single {@link CommandResult} instance - */ - public static CommandResult execCmd(final List commands, final boolean isRooted) { - return execCmd(commands == null ? null : commands.toArray(new String[]{}), isRooted, true); - } - - /** - * Execute the command. - * - * @param commands The commands. - * @return the single {@link CommandResult} instance - */ - public static CommandResult execCmd(final String[] commands) { - return execCmd(commands, false, true); - } - - /** - * Execute the command. - * - * @param commands The commands. - * @param isRooted True to use root, false otherwise. - * @return the single {@link CommandResult} instance - */ - public static CommandResult execCmd(final String[] commands, final boolean isRooted) { - return execCmd(commands, isRooted, true); - } - - /** - * Execute the command. - * - * @param command The command. - * @param isRooted True to use root, false otherwise. - * @param isNeedResultMsg True to return the message of result, false otherwise. - * @return the single {@link CommandResult} instance - */ - public static CommandResult execCmd(final String command, - final boolean isRooted, - final boolean isNeedResultMsg) { - return execCmd(new String[]{command}, isRooted, isNeedResultMsg); - } - - /** - * Execute the command. - * - * @param commands The commands. - * @param isRooted True to use root, false otherwise. - * @param isNeedResultMsg True to return the message of result, false otherwise. - * @return the single {@link CommandResult} instance - */ - public static CommandResult execCmd(final List commands, - final boolean isRooted, - final boolean isNeedResultMsg) { - return execCmd(commands == null ? null : commands.toArray(new String[]{}), - isRooted, - isNeedResultMsg); - } - - /** - * Execute the command. - * - * @param commands The commands. - * @param isRooted True to use root, false otherwise. - * @param isNeedResultMsg True to return the message of result, false otherwise. - * @return the single {@link CommandResult} instance - */ - public static CommandResult execCmd(final String[] commands, - final boolean isRooted, - final boolean isNeedResultMsg) { - int result = -1; - if (commands == null || commands.length == 0) { - return new CommandResult(result, "", ""); - } - Process process = null; - BufferedReader successResult = null; - BufferedReader errorResult = null; - StringBuilder successMsg = null; - StringBuilder errorMsg = null; - DataOutputStream os = null; - try { - process = Runtime.getRuntime().exec(isRooted ? "su" : "sh"); - os = new DataOutputStream(process.getOutputStream()); - for (String command : commands) { - if (command == null) continue; - os.write(command.getBytes()); - os.writeBytes(LINE_SEP); - os.flush(); - } - os.writeBytes("exit" + LINE_SEP); - os.flush(); - result = process.waitFor(); - if (isNeedResultMsg) { - successMsg = new StringBuilder(); - errorMsg = new StringBuilder(); - successResult = new BufferedReader( - new InputStreamReader(process.getInputStream(), "UTF-8") - ); - errorResult = new BufferedReader( - new InputStreamReader(process.getErrorStream(), "UTF-8") - ); - String line; - if ((line = successResult.readLine()) != null) { - successMsg.append(line); - while ((line = successResult.readLine()) != null) { - successMsg.append(LINE_SEP).append(line); - } - } - if ((line = errorResult.readLine()) != null) { - errorMsg.append(line); - while ((line = errorResult.readLine()) != null) { - errorMsg.append(LINE_SEP).append(line); - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (os != null) { - os.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (successResult != null) { - successResult.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - try { - if (errorResult != null) { - errorResult.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - if (process != null) { - process.destroy(); - } - } - return new CommandResult( - result, - successMsg == null ? "" : successMsg.toString(), - errorMsg == null ? "" : errorMsg.toString() - ); - } - - /** - * The result of command. - */ - public static class CommandResult { - public int result; - public String successMsg; - public String errorMsg; - - public CommandResult(final int result, final String successMsg, final String errorMsg) { - this.result = result; - this.successMsg = successMsg; - this.errorMsg = errorMsg; - } - - @Override - public String toString() { - return "result: " + result + "\n" + - "successMsg: " + successMsg + "\n" + - "errorMsg: " + errorMsg; - } - } -} diff --git a/buildSrc/src/main/groovy/TaskDurationUtils.groovy b/buildSrc/src/main/groovy/TaskDurationUtils.groovy index 9ff2722345..6aacfcf30f 100644 --- a/buildSrc/src/main/groovy/TaskDurationUtils.groovy +++ b/buildSrc/src/main/groovy/TaskDurationUtils.groovy @@ -38,6 +38,11 @@ class TaskDurationUtils { } }) grd.addBuildListener(new BuildListener() { + @Override + void beforeSettings(Settings settings) { + super.beforeSettings(settings) + } + @Override void buildStarted(Gradle gradle) {} diff --git a/config.json b/config.json deleted file mode 100644 index c4c025e27b..0000000000 --- a/config.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "appConfigDesc": "appConfig 配置的是可以跑 app 的模块,git 提交务必只包含 launcher", - "appConfig": ["launcher"], - "pkgConfigDesc": "pkgConfig 配置的是要依赖的功能包,为空则依赖全部,git 提交务必为空", - "pkgConfig": [], - "proConfigDesc": "proConfig 配置的是使用本地还是仓库,优先级低于 appConfig 和 pkgConfig", - "proConfig": [ - {"isApply": true, "useLocal": true, "localPath": ":plugin:api-gradle-plugin"}, - {"isApply": true, "useLocal": true, "localPath": ":plugin:bus-gradle-plugin"}, - {"isApply": true, "useLocal": false, "localPath": ":plugin:lib:base-transform", "remotePath": "com.blankj:base-transform:1.0"}, - {"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", "remotePath": "com.blankj:utilcode-export:1.1"}, - {"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:utilcodex:$versionName"}, - {"isApply": true, "useLocal": true, "localPath": ":lib:utildebug"}, - {"isApply": true, "useLocal": true, "localPath": ":lib:utildebug-no-op"} - ] -} diff --git a/config/publish.gradle b/config/publish.gradle index af97da785b..fa8a449f3c 100644 --- a/config/publish.gradle +++ b/config/publish.gradle @@ -9,16 +9,16 @@ 2. copy the file to the directory of gradle, and apply the file in the module ext { - groupId = Config.depConfig.lib_utilcode.groupId - artifactId = Config.depConfig.lib_utilcode.artifactId - version = Config.depConfig.lib_utilcode.version + groupId = Config.modules.lib_utilcode.groupId + artifactId = Config.modules.lib_utilcode.artifactId + version = Config.modules.lib_utilcode.version website = "https://github.com/Blankj/AndroidUtilCode" } apply from: "${rootDir.path}/config/publish.gradle" 3. execute following command to publish - ./gradlew :xxmodule:publish2Local -> upload to mavenCentral - ./gradlew :xxmodule:publish2Remote -> upload to mavenLocal + ./gradlew :xxmodule:publish2Local -> upload to mavenLocal + ./gradlew :xxmodule:publish2Remote -> upload to mavenCentral */ apply plugin: 'maven-publish' @@ -32,10 +32,8 @@ if (localPropertiesFile.exists()) { properties.load(new FileInputStream(localPropertiesFile)) properties.each { name, value -> ext[name] = value } } else { - if (!ext["signing.keyId"] && !ext["signing.password"] && - !ext["signing.secretKeyRingFile"] && - !ext["ossrhUsername"] && - !ext["ossrhPassword"]) { + if (!ext["signing.keyId"] && !ext["signing.password"] && !ext["signing.secretKeyRingFile"] + && !ext["ossrhUsername"] && !ext["ossrhPassword"]) { throw new NullPointerException("U should set MavenCentral params in local.properties") } } @@ -86,16 +84,14 @@ afterEvaluate { if (project.ext.multiPublishMode) { withXml { def dependenciesNode = asNode().getAt('dependencies')[0] ?: - asNode().appendNode('dependencies') - - configurations. - api. - getDependencies(). - each { dep -> addDependency(project, dependenciesNode, dep, "compile") } - configurations. - implementation. - getDependencies(). - each { dep -> addDependency(project, dependenciesNode, dep, "runtime") } + asNode().appendNode('dependencies') + + configurations.api.getDependencies().each { + dep -> addDependency(project, dependenciesNode, dep, "compile") + } + configurations.implementation.getDependencies().each { + dep -> addDependency(project, dependenciesNode, dep, "runtime") + } } } } @@ -136,12 +132,10 @@ private void addDependency(Project project, def dependenciesNode, Dependency dep // 那么发布到仓库,其他地方依赖该库时会找不到源码的那个库 println "publish -> module(unspecified) <${dep.group}:${dep.name}:${dep.version}>" if (project.ext.groupId || project.ext.version) { - throw new GradleException( - "The module of <" + dep.name + "> should set groupId & version.") + throw new GradleException("The module of <" + dep.name + "> should set groupId & version.") } // 源码依赖,但配置了 remotePath,让 pom 中写入 remotePath - println( - "publish -> module(wrapped) <${project.ext.groupId}:${name}:${project.ext.version}>") + println("publish -> module(wrapped) <${project.ext.groupId}:${name}:${project.ext.version}>") dependencyNode.appendNode('groupId', project.ext.pomGroupID) dependencyNode.appendNode('artifactId', dep.name) @@ -223,15 +217,9 @@ artifacts { } static def isAndroidEnv(Project project) { - return project.getPlugins().hasPlugin('com.android.application') || project. - getPlugins(). - hasPlugin('com.android.library') + return project.getPlugins().hasPlugin('com.android.application') || project.getPlugins().hasPlugin('com.android.library') } -task publish2Local(type: GradleBuild) { - tasks = ['clean', 'assemble', 'publishReleasePublicationToMavenLocal'] -} +task publish2Local(type: GradleBuild, dependsOn: ['clean', 'assemble', 'publishReleasePublicationToMavenLocal']) {} -task publish2Remote(type: GradleBuild) { - tasks = ['clean', 'assemble', 'publishReleasePublicationToMavenRepository'] -} \ No newline at end of file +task publish2Remote(type: GradleBuild, dependsOn: ['clean', 'assemble', 'publishReleasePublicationToMavenRepository']) {} \ No newline at end of file diff --git a/feature/launcher/app/build.gradle b/feature/launcher/app/build.gradle index 408db62a67..8f2b6d205d 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.libs.eventbus_processor.path } \ No newline at end of file diff --git a/feature/utilcode/export/build.gradle b/feature/utilcode/export/build.gradle index 815f9babe6..30e59272ee 100644 --- a/feature/utilcode/export/build.gradle +++ b/feature/utilcode/export/build.gradle @@ -1,8 +1,8 @@ ext { - groupId = Config.depConfig.feature_utilcode_export.groupId - artifactId = Config.depConfig.feature_utilcode_export.artifactId - version = Config.depConfig.feature_utilcode_export.version + groupId = Config.modules.feature_utilcode_export.groupId + artifactId = Config.modules.feature_utilcode_export.artifactId + version = Config.modules.feature_utilcode_export.version website = "https://github.com/Blankj/AndroidUtilCode" } -apply from: "${rootDir.path}/config/publish.gradle" +//apply from: "${rootDir.path}/config/publish.gradle" //./gradlew :feature_utilcode_export:mavenLocal // 上传到本地 mavenLocal \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 13372aef5e24af05341d49695ee84e5f9b594659..5c2d1cf016b3885f6930543d57b744ea8c220a1a 100644 GIT binary patch literal 55616 zcmafaW0WS*vSoFbZJS-TZP!<}ZQEV8ZQHihW!tvx>6!c9%-lQoy;& DmfdT@8fB*sl68LLCKtKQ283+jS?^Q-bNq|NIAW8=eB==8_)^)r*{C^$z z{u;{v?I MYnO`JhmPq7|LA_@Iz75S 9h~8`iX>QrjrmMeu{>hn4U;+$dor zz+`T8Q0f}p^Ao)LsYq74!W*)&dTnv}E8;7H*Zetclpo2zf_f>9>HT8;`O^F8;M%l@ z57Z8dk34kG-~Wg7n48qF2xwPp;SOUpd1}9Moir5$VSyf4gF)Mp-?`wO3;2 x9gYj59oFwG>?Leva43@e(z{mjm0b*@OAYLC`O9q|s+FQLOE z!+*Y;%_0(6Sr<(cxE0c=lS&-FGBFGWd_R<5$vwHRJG=tB&Mi 8@hq_U7@IMyVyKkOo6wgR(<% zQw1O!nnQl3T9QJ)Vh =(`cZM{nsEKChjbJhx@UQH+G>6p z;beBQ1L!3Zl>^&*?cSZjy$B3 (1=Zyn~>@`!j%5v7IBRt6X`O)yDpVLS^9EqmHxBcisVG$TRwiip#ViN|4( zYn!Av841_Z@Ys=T7w#>RT&iXvNgDq3*d?$N(SznG^wR`x{%w<6^q j&|g})La;iD?`M=p>99p><39r9+e z`dNhQ&tol5)P#;x8{tT47i*blMHaDKqJs8!Pi*F{#)9%USFxTVMfMOy{mp2ZrLR40 z2a9?TJgFyqgx~|j0eA6SegKVk@|Pd|_6P$HvwTrLTK)Re`~%kg8o9`EAE 1oAiY5Jgo=H }0*D?tSCn^=SIN~fvv453Ia(<1|s07aTVVtsRxY6+tT3589iQdi^ zC92D$ewm9O6FA*u*{Fe_=b`%q`pmFvAz@hfF@OC_${IPmD#QMpPNo0mE9U=Ch;k0L zZteokPG-h7PUeRCPPYG%H!WswC?cp7M|w42pbtwj!m_&4%hB6MdLQe&}@5-h~! zkOt;w0BbDc0H!RBw;1UeVckHpJ@^|j% FBZlC} zsm?nFOT$`F_i#1_gh4|n$rDe>0md6HvA=B%hlX*3Z%y@a&W>Rq`Fe(8smIgxTGb#8 zZ`->%h!?QCk>v*~{!qp=w?a*};Y**1uH `)OX`Gi+L%-d6{rV?@}MU#qfCU(!hLz;kWH=0A%W7E^pA zD;A%Jg5SsRe!O*0TyYkAHe&O9z*Ij-YA$%-rR?sc`xz_v{>x%xY39!8g#!Z0#03H( z{O=drKfb0cbx1F*5%q81xvTDy#rfUGw(fesh1!xiS2XT;7_wBi(Rh4i(!rR^9=C+- z+**b9;icxfq@<7}Y!PW-0rTW+A^$o*#ZKenSkxLB$Qi$%gJSL>x!jc86`GmGGhai9 zOHq~hxh}KqQHJeN$2U{M>qd*t8_e&lyCs69{bm1?KGTYoj=c0`rTg>pS6G&J4&)xp zLEGIHSTEjC0-s-@+e6o&w=h1sEWWvJUvezID1&exb$)ahF9`(6`?3KLyVL$|c)CjS zx(bsy87~n8TQNOKle(BM^>1I!2-CZ^{x6zdA}qeDBIdrfd-(n@Vjl^9zO1(%2pP9@ zKBc~ozr$+4ZfjmzEIzoth(k?pbI87= d5OfjVZ`Bn)J|urr8yJq`ol^>_VAl^P)>2r)s+*3z5d<3rP+-fniCkjmk=2hTYRa@t zCQcSxF&w%mHmA?!vaXnj7ZA$)te}ds+n8$2lH{NeD4mwk$>xZCBFhRy$8PE>q$wS`}8pI%45Y;Mg;HH+}Dp=PL)m77nKF68Fgg Q-l3iXlVZuM2BDr R8AQbK;bn1%jzahl0; zqz0(mNe;f~h8(fPzPKKf2qRsG8`+Ca)>|<&lw>KEqM&Lpnvig>69%YQpK6fx=8YFj zHKrfzy>(7h2OhUVasdwKY`praH?>qU0326-kiSyOU_Qh>ytIs^htlBA62xU6xg?*l z)&REdn*f9U3?u4$j-@ndD#D3l!viAUtw}i5*Vgd0Y6`^hHF5R=No7j8G-*$NWl%?t z`7Nilf_Yre@Oe}QT3z+jOUVgYtT_Ym3PS5(D>kDLLas8~F+5kW%~ZYppSrf1C$gL* zCVy}fWpZ3s%2rPL-E63^tA|8OdqKsZ4TH5fny47ENs1#^C`_NLg~H^uf3&bAj#fGV zDeOt%_Vhj$}yBrC3J1Xqj>Y%&k{B?lhxKrtYy;^E9DkyNHk5#6`4cuP&V7S8ce9 zTUF5PQIRO7TT4P2a*4;M&hk;Q7&{(83hJe5BSm=9qt~;U)NTf=4uKUcnxC`;iPJeI zW#~w?HIOM+0j3ptB0{UU{^6_#B*Q2gs;1x^YFey(%DJHNWz@e_NEL?$fv?CDxG`jk zH|52WFdVsZR;n!Up;K;4E$|w4h>ZIN+@Z}EwFXI{w_`?5x+SJFY_e4J@|f8U08%dd z#Qsa9JLdO$jv)?4F@&z_^{Q($tG`?|9bzt8ZfH9P`epY`soPYqi1`oC3x&|@m{hc6 zs0R!t$g>sR@#SPfNV6Pf`a^E?q3QIaY30IO%yKjx#Njj@gro1YH2Q(0+7D7mM~c>C zk&_?9Ye>B%*MA+77$Pa!?G~5tm`=p{NaZsUsOgm6Yzclr_P^2)r(7r%n(0?4B#$e7 z!fP;+l)$)0kPbMk#WOjm07+e?{E)(v)2|Ijo{o1+Z8#8ET#=kcT*OwM#K68fSNo%< zvZFdHrOrr;>`zq!_welWh!X}=oN5+V01WJn7=;z5uo6l_$7wSNkXuh=8Y>`TjDbO< z!yF}c42&QWYXl}X aRr0u L?BNPXlGw=QpDUMo`v8pXzzG(=!G;t+mfCsg8 zJb9v&a)E!zg8|%9#U?SJqW!|oBHMsOu}U2Uwq8}RnWeUBJ>FtHKAhP~;&T4mn(9pB zu9jPnnnH0`8ywm-4OWV91y1GY$!qiQCOB04DzfDDFlNy}S{$Vg9o^AY!XHMueN<{y zYPo$cJZ6f7``tmlR5h8WUGm;G*i}ff!h`}L#ypFyV7iuca!J+C-4m@7*Pmj9>m+jh zlpWbud)8j9zvQ`8-oQF#u=4!uK4kMFh>qS_pZciyq3NC(dQ{577lr-!+HD*QO_zB9 z_Rv<#qB{AAEF8Gbr7xQly%nMA%oR`a-i7nJw95F3 iH&IX5hhy3CCV5y>mK4)&5a C*12 zI`{(g%MHq<(ocY5+@OK-Qn-$%!Nl%AGCgHl>e8ogTgepIKOf3)WoaOkuRJQt%MN8W z=N-kW+FLw=1^}yN@*-_c>;0N{-B!aXy#O}`%_~Nk?{e|O=JmU8@+9 2Q-Y6h)>@omP=9i~ zi`krLQK^!=@2BH?-R83DyFkejZ khHJqV%^} zUa&K22zwz7b*@CQV6BQ9X*RB177VCVa{Z!Lf?*c~PwS~V3 K{id1TB^WZh=aMqiws5)qWy lK#^SG9!tqg3-)p_o(ABJsC!0;0v36;0tC= z!zMQ_@se(*`KkTxJ~$nIx$7ez&_2EI+ {4=uI~dwKD$deb5?mwLJ~ema_0Z z6A8Q$1~=tY&l5_EBZ?nAvn$3hIExWo_ZH2R)t YPjxTH5mAw#3n-*sOMV jpUrdnj1DBm4G!J+Ke}a|oQN9f?!p-TcYej+(6FNh_A? zJ3C%AOjc<8%9SPJ)U(md`W5_pzYpLEMwK<_jgeg -VXSX1Nk1oX-{yHz z-;CW!^2ds%PH{L{#12WonyeK5A=`O@s0Uc%s!@22etgSZW!K<%0(FHC+5(BxsXW@e zAvMWiO~XSkmcz%-@s{|F76uFaBJ8L5H>nq6QM-8FsX08ug_=E)r#DC>d_!6Nr+rXe zzUt30Du_d0oSfX~u>qOVR*BmrPBwL@WhF^5+dHjWRB;kB$`m8|46efLBXLkiF|*W= zg|Hd(W}ZnlJLotYZCYKoL7Y sQdLXZ!F`rLqLf8n$OZOyAzK`uKcbC-n0qoH!5-rh&k-`VADETKHxrhK<5C zhF0BB4azs%j~_q_HA#fYPO0r;YTlaa-eb)Le+!IeP>4S{b8&STp|Y0if*`-A&DQ$^ z-%=i73HvEMf_V6zSEF?G>G-Eqn+|k`0=q?(^|ZcqWsuLlMF2!E*8dDAx%)}y=lyMa z$Nn0_f8YN8g<4D >8IL3)GPf#dJYU@|NZqIX$;Lco?Qj=?W6J;D@pa`T=Yh z-ybpFyFr*3^gRt!9NnbSJWs2R-S?Y4+s~J8vfrPd_&_*)HBQ{&rW(2X>P-_CZU8Y9 z-32><7|wL*K+3{ZXE5}nn~t@NNT#Bc0F6kKI4pVwLrpU@C#T-&f{Vm}0h1N3#89@d zgcx3QyS;Pb?V*XAq;3(W&rjLBazm69XX;%^n6r}0!CR2zTU1!x#TypCr`yrII%wk8 z+g)fyQ!&xIX(*>?T}HYL^>wGC2E}euj{DD_RYKK@w=yF+44367X17)GP8DCmBK!xS zE{WRfQ(WB-v>DAr!{F2-cQKHIjIUnLk^D}7XcTI#HyjSiEX)BO^GBI9NjxojYfQza zWsX@GkLc7EqtP8(UM^cq5zP~{?j~*2T^Bb={@PV)DTkrP<9&hxDwN2@hEq~8(ZiF! z3FuQH_iHyQ_s-#EmAC5~K$j_$cw{+!T>dm#8`t%CYA+->rWp09jvXY`AJQ-l%C{SJ z1c~@<5*7$`1%b}n7ivSo(1(j8k+*Gek(m^rQ!+LPvb=xA@co<|( XDK+(tb46xJ4) zcw7w<0p3=Idb_FjQ@ttoyDmF?cT4JRGrX5xl&|ViA@Lg!vRR}p#$A?0=Qe+1)Mizl zn;!zhm`B&9t0GA67GF09t_ceE(bGdJ0mbXYrUoV2iuc3c69e;!%)xNOGG*?x*@5k( zh)snvm0s&gRq^{yyeE)>hk~w8)nTN`8HJRtY0~1f`f9ue%RV4~V(K*B;jFfJY4dBb z*BGFK`9M-tpWzayiD>p_`U(29f$R|V-qEB;+_4T939BPb=XRw~8n2cGiRi`o$2qm~ zN&5N7JU{L*QGM@lO8VI)fUA0D7bPrhV(GjJ$+@=dcE5vAVyCy6r&R#4D=GyoEVOnu z8``8q`PN-pEy>xiA_@+EN?EJpY<#}BhrsUJC0afQFx7 -pBeLXR9Mr+#w@!wSNR7vxHy@r`!9MFecB4O zh9jye3iSzL0@t3)OZ=OxFjjyK#KSF|zz@K}-+HaY6gW+O{T6%Zky@gD$6SW)Jq;V0 zt&LAG*YFO^+=ULohZZW*=3>7YgND-!$2}2)Mt~c>JO3j6QiPC-*ayH2xBF)2m7+}# z`@m#q{J9r~Dr^eBgrF(l^#sOjlVNFgDs5NR*Xp;V*wr~HqBx7?qBUZ8w)%vIbhhe) zt4(#1S~c$Cq7b_A%wpuah1Qn(X9#obljoY)VUoK%OiQZ#Fa|@ZvGD0_oxR=vz{>U* znC(W7HaUDTc5F!T77GswL-jj7e0#83DH2+lS-T@_^SaWfROz9btt*5zDGck${}*njAwf}3hLqKGLTeV&5(8FC+IP>s;p{L@a~RyCu)MIa zs~vA?_JQ1^2Xc&^cjDq02tT_Z0gkElR0Aa$v@VHi+5*)1(@&}gEXxP5Xon?lxE@is z9sxd|h#w2&P5uHJxWgmtVZJv5w>cl2ALzri;r57qg){6`urTu(2}EI?D?##g=!Sbh z*L*>c9xN1a3CH$u7C~u_!g81`W|xp=54oZl9CM)&V9~ATCC-Q!yfKD@vp#2EKh0(S zgt~aJ^oq-TM0IBol!w1S2j7tJ8H7;SR7yn4-H}iz&U^*zW95HrHiT!H&E|rSlnCYr z7Y1|V7xebn=TFbkH;>WIH6H>8;0?HS#b6lCke9rSsH%3AM1#2U-^*NVhXEIDSFtE^ z=jOo1>j!c__Bub(R*dHyGa)@3h?!ls1&M)d2{?W5#1|M@6|ENYYa`X=2EA_oJUw=I zjQ)K6;C!@>^i7vdf`pBOjH>Ts$97}B=lkb07<&;&?f#cy3I0p5{1=?O*#8m$C_5TE zh}&8lOWWF7I@|pRC$G2;Sm#IJfhKW@^jk=jf
M1MdJP(v2fIrYTc{;e5;5gsp`}X 8-!{9{S1{h+)<@?+D13s^B zq9(1Pu(Dfl#&z|~qJGuGSWDT&u{sq|huEsbJhiqMUae}K*g+R(vG7P$p6g}w*eYWn zQ7luPl1@{vX?PMK%-IBt+N7TMn~GB z!Ldy^(2Mp{fw_0 ;< $dgHAv1gZgyJAx%}dA?jR=NPW1K`FkoY zNDgag#YWI6-a2#&_E9NMIE~gQ+*)i<>0c)dSRUMHpg!+AL;a;^u|M1jp#0b<+#14z z+# LuQ1jCyV_GNj#lHWG3e9P@H34~n0VgP#(SBX=v|RSuOiY>L87 z#KA{JDDj2EOBX^{`a;xQxHtY1?q5^B5?up1akjEPhi1-KUsK|J9XEBAbt%^F`t0I- zjRYYKI4OB7Zq3FqJFBZwbI=RuT~J|4tA8x)(v2yB^^+TYYJS>Et`_&yge##PuQ%0I z^|X!Vtof}`UuIxPjoH8kofw4u1pT5h`Ip}d8;l>WcG^qTe>@x63s#zoJiGmDM@_h= zo;8IZR`@AJRLnBNtatipUvL^(1P_a;q8P%&voqy#R!0(bNBTlV&*W9QU?kRV1B*~I zWvI?SNo2cB<7bgVY{F_CF$7z!0 2Qxfw-Ew#p!8PC#! z1sRfOl`d-Y@&=)l(Sl4CS=>fVvor5lYm61C!!iF3NMocKQHUYr0%QM}a4v2>rzPfM zUO}YRDb7-NEqW+p_;e0{Zi%0C$&B3CKx6|4BW`@`AwsxE?Vu}@Jm<3%T5O&05z+Yq zkK!QF(vlN}Rm}m_J+*W4`8i~R&`P0&5!;^@S#>7qkfb9wxFv@(wN@$k%2*sEwen$a zQnWymf+#Uyv)0lQVd?L1gpS}jMQZ(NHHCK Ryu zjK|Zai0|N_)5iv)67(zDBCK4Ktm#ygP|0(m5tU`*AzR&{TSeSY8W=v5^ =Ic`ahxM-LBWO+uoL~wxZmgcSJMUF9q%<%>jsvh9Dnp^_e>J_V=ySx4p?SF0Y zg4ZpZt@!h>WR76~P3_YchYOak7oOz R|`t+h!BbN}?zd zq+vMTt0!duALNWDwWVIA$O=%{lWJEj;5(QD()huhFL5=6x_=1h|5ESMW&S|*oxgF# z-0GRIb ziolwI13hJ-Rl(4Rj@*^=&Zz3vD$RX8bFWvBM{niz(%?z0gWNh_vUvpBDoa>-N=P4c zbw-XEJ@txIbc<`wC883;&yE4ayVh>+N($SJ01m}fumz!#!aOg*;y4Hl{V{b;&ux3& zBEmSq 2jQ7#IbVm3TPBw?2vVN z0wzj|Y6EBS(V%Pb+@OPkMvEKHW~%DZk#u|A18pZMmCrjWh%7J4Ph>vG61 zRBgJ6w^8dNRg2*=K$Wvh$t>$Q^SMaIX*UpBG)0bqcvY%*by=$EfZAy{ZOA#^tB(D( zh}T(SZgdTj?bG9u+G{Avs5Yr1x=f3k7%K|eJp^>BHK#~dsG<&+=`mM@>kQ-cAJ2k) zT+Ht5liXdc^(aMi9su~{pJUhe)!^U&qn%mV6PS%lye+ Iw5F@Xv8E zdR4#?iz+R4--iiHDQmQWfNre=iofAbF~1oGTa1Ce?hId~W^kPuN(5vhNx++ZLkn?l zUA7L~{0x|qA%%%P=8+-Ck{&2$UHn#OQncFS@uUVuE39c9o~#hl)v#!$X(X*4ban2c z{buYr9!`H2;6n73n^W3Vg(!gdBV7 $e #v3 qubWALaUEAf@`ava{UTx%2~VVQbEE(*Q8_ zv#me9i+0=QnY)$IT+@3vP1l9Wrne+MlZNGO6|zUVG+v&lm7Xw3P*+gS6e#6mVx~(w zyuaXogGTw4!!&P3oZ1|4oc_sGEa&m3Jsqy^lzUdJ^y8RlvUjDmbC^NZ0AmO-c*&m( zSI %4P9f|s!B#073b>Eet`T@J;3qY!NrABuUaED6M^=s-Q^2oZS`jVzuA z>g&g$!Tc>`u-Q9PmKu0SLu-X(tZeZ<%7F+$j3qOOftaoXO5=4!+P!%Cx0rNU+@E~{ zxCclYb~G(Ci%o{}4PC(Bu>TyX9slm5A^2Y i$$kCq-M#Jl)a2W9L-bq5%@Pw^ zh*iuuAz`x6N_rJ1LZ7J^MU9~}RYh+EVIVP+-62u+7IC%1p@;xmmQ`dGCx$QpnIUtK z0`++;Ddz7{_R^~KDh%_yo8WM$IQhcNOALCIGC$3_PtUs?Y44@Osw;OZ()Lk=(H&Vc zXjkHt+^1@M|J%Q&?4>;%T-i%#h|Tb1u;pO5rKst8(Cv2!3U{TRXdm& >fWTJG)n*q&wQPjRz g%pS1RO9}U0*C6fhUi&f#qoV`1{U<&mWKS<$oVFW>{&*$6)r6Rx)F4W zdUL8Mm_qNk6ycF VkI5F?V+cYFUch$92|8O^-Z1JC94GU+Nuk zA#n3Z1q 4<6zRiv%W5`NGk*Ym{#0E~IA6*)H-=RmfWIY%mEC0? zSih7uchi`9-WkF2@z1ev6J_N~u;d$QfSNLMgPVpHZoh9oH-8D*;EhoCr~*kJ<|-VD z_jklPveOxWZq40E!SV@0XXy+~Vfn!7nZ1GXsn~U$>#u0d*f?RL9!NMlz^qxYmz|xt zz6A&MUAV#eD%^GcP#@5}QH5e7AV`}(N2#(3xpc!7dDmgu7C3TpgX5Z|$%Vu8=&SQI zdxUk*XS-#C^-cM*O>k}WD5K81e2ayyRA)R&5>KT1QL!T!%@}fw{>BsF+-pzu>;7{g z^CCSWfH;YtJGT@+An0Ded#zM9>UEFOdR_Xq zS~!5R*{p1Whq62ynHo|n$4p7&d|bal{iGsxAY?opi3R${)Zt*8YyOU!$TWMYXF?|i zPXYr} wJp#EH;keSG5WYJ*(~oiu#GDR>C4%-HpIWr7v`W`lzQN-lb?*vpoit z8FqJ)`LC4w8fO8Fu}AYV`awF2NLMS4$f+?=KisU4P6@#+_t)5WDz@f*qE|NG0*hwO z&gv^k^kC6Fg;5>Gr`Q46C{6>3F(p0QukG6NM07rxa&?)_C*eyU(jtli>9Zh#eUb(y zt9NbC-bp0> ^m?i`?$aJUyBmF`N0zQ% zvF_;vLVI{tq%Ji%u*8s2p4iBirv*uD(?t~PEz$CfxVa =@R z^HQu6-+I9w>a35kX!P)TfnJDD!)j8!%38(vWNe9vK0{k*`FS$ABZ`rdwfQe@IGDki zssfXnsa6teKXCZUTd^qhhhUZ}>GG_>F0~LG7*<*x;8e39nb-0Bka(l)%+QZ_IVy3q zcmm2uKO0p)9|HGxk*e_$mX2?->&-MXe`=Fz3FRTFfM!$_y}G?{F9jmNgD+L%R`jM1 zIP-kb=3Hlsb35Q&qo(%Ja(LwQj>~!GI|Hgq65J9^A!ibChYB3kxLn@&=#pr}BwON0Q=e5;#sF8GGGuzx6O}z%u3l?jlKF&8Y#lUA)Cs6ZiW8DgOk|q z=YBPAMsO7AoAhWgnSKae2I7%7*Xk>#AyLX-InyBO?OD_^2^nI4#;G|tBvg3C0ldO0 z*`$g(q^es4VqXH2t~0-u^m5cfK8eECh3Rb2h1kW%%^8A!+ya3OHLw$8kHorx4(vJO zAlVu$nC>D{7i? 7xDg3116Y2e+)Zb4FPAdZaX}qA!WW{$d?u+sK(iIKqOE-YM zH7y^hkny24==(1;qEacfFU{W{xSXhffC&DJV&oqw`u~WAl@=HIel>KC-mLs2ggFld zsSm-03=Jd^XNDA4i$vKqJ|e|TBc19bglw{)QL${Q(xlN?E;lPumO~;4w_McND6d+R zsc2p*&uRWd`wTDszTcWKiii1mNBrF7n&LQp$2Z<}zkv=8k2s6-^+#siy_K1`5R+n( z++5VOU^LDo(kt3ok?@$3drI`<%+SWcF*`CUWqAJxl3PAq!X|q{al;8%HfgxxM#2Vb zeBS756iU|BzB>bN2NP=AX&!{uZXS;|F`LLd9F^97UTMnNks_t7EPnjZF`2ocD2*u+ z?oKP{xXrD*AKGYGkZtlnvCuazg6g16ZAF{Nu%w+LCZ+v_*`0R$NK)tOh_c#cze;o$ z)kY(eZ5Viv<5zl1XfL(#GO|2FlXL#w3T?hpj3BZ&OAl^L!7@ zy;+iJWYQYP?$(`li_!|bfn!h~k#=v-#XXyjTLd+_txOqZZETqSEp>m+O0ji7MxZ*W zSdq+yqEmafrsLErZG8&;kH2kbCwluSa<@1yU3^Q#5HmW(hYVR0E6!4ZvH;Cr<$`qf zSvqRc`Pq_9b+xrtN3qLmds9;d7HdtlR!2NV$rZPCh6>(7f7M}>C^LeM_5^b$B~mn| z#)?`E=ze o9(9?{O_ko>51~h|c?8{F=2=_-o(-eRc z9p)o51krhCmff^U2oUi#$AG2p-*wSq8DZ(i!Jmu1wzD*)#%J&r)yZTq`3e|v4>EI- z=c|^$Qhv}lEyG@!{G~@}Wbx~vxTxwKoe9zn%5_Z^H$F1?JG_Kadc(G8#|@yaf2-4< zM1bdQF$b5R!W1f`j(S>Id;CHMzfpyjYEC_95VQ*$U3y5piVy=9Rdwg7g& )%#6;U%b2W}_VVdh}qPnM 4FY9zFP(5eR zWuCEFox6e;COjs$1RV}IbpE0EV;}5IP}Oq|zcb*77PEDIZU{;@_;8*22{~JRvG~1t zc+ln^I+)Q*+Ha>(@=ra&L&a-kD;l$WEN;YL0q^GE8+})U_A_StHjX_gO{)N>tx4&F zRK?99!6JqktfeS-IsD@74yuq*aFJoV{5&K(W`6Oa2Qy0O5J G>O`zZ-p7vBGh!MxS;}}h6(96Wp`dci3DY?|B@1p8fVsDf$|0S zfE{WL5g3<9&{~yygYyR?jK!>;eZ2 L#tpL2)H#89*b zycE?VViXbH7M}m33{#tI69 PUPD=r)EVPTBku={Qh{ zKi*pht1jJ+yRhVE)1=Y()iS9j`FesMo$bjLSqPMF-i<42Hxl6%y7{#vw5YT(C}x0? z$rJU7fFmoiR&%b|Y*pG?7O&+Jb#Z%S8&%o~fc?S9c`Dwdnc4BJC7njo7?3bp#Yonz z PC>y`DVK~nzN^n}jB5RhE4N>LzhCZD#WQseohYXvqp5^%Ns!q^B z&8zQN(jgPS(2ty~g2t9!x9;Dao~lYVujG-QEq{vZp<1Nlp;oj#kFVsBnJssU^p-4% zKF_A?5sRmA>d*~^og-I95z$>T*K*33 TGBPzs{OMoV2i+(P6K|9 5UwSj$Zn<@Rt(g%|iY z$SkSjYVJ)I<@S(kMQ6md{HxAa8S`^lXGV?ktLX!ngTVI~%WW+p#A#XTWaFWeBAl%U z&rVhve#Yse*h4BC4nrq7A1n>Rlf^ErbOceJC`o#fyCu@ H;y)`E#a#)w)3eg^{Hw&E7);N5*6V+z%olvLj zp^aJ4`h*4L4ij)K+uYvdpil(Z{EO@u{BcMI&}5{ephilI%zCkBhBMCvOQT#zp|!18 zuNl=id d81|{FpGkt%ty=$fnZnWXxem!t4x{ zat@68CPmac(xYaOIeF}@O1j8O?2jbR!KkMSuix;L8x?m01}|bS2=&gsjg^t2O|+0{ zlzfu5r5_l4)py8uPb5~NHPG>!lYVynw;;T-gk1Pl6PQ39Mwgd2O+iHDB397H)2grN zHwbd>8i%GY>Pfy7;y5X7AN>qGLZVH>N _ZuJZ-`z9UA> zfyb$nbmPqxyF2F;UW}7`Cu>SS%0W6h^Wq5e{PWAjxlh=#Fq+6SiPa-L*551SZKX&w zc9TkPv4eao?kqomkZ#X%tA{`UIvf|_=Y7p~mHZKqO>i_;q4PrwVtUDTk ?M7N Cssa?Y4uxYrsXj!+k@`Cxl;&{NLs*6!R<6k9$Bq z%grLhxJ#G_j~ytJpiND8neLfvD0+xu>wa$-%5v;4;RYYM66PUab)c9ruUm%d{^s{# zTBBY??@^foRv9H}iEf{w_J%rV<%T1wv^`)Jm#snLTIifjgRkX``x2wV(D6(=VTLL4 zI-o}&5WuwBl~(XSLIn5~{cGWorl#z+=(vXuBXC#lp}SdW=_)~8Z(Vv!#3h2@pdA3d z{cIPYK@Ojc9(ph=H3T7;aY>(S3~iuIn05Puh^32WObj%hVN(Y{Ty?n?Cm#!kGNZFa zW6Ybz!tq|@erhtMo4xAus|H8V_c+XfE5mu|lYe|{$V3mKnb1~fqoFim;&_ZHN_=?t zysQwC4qO}rTi}k8_f=R&i27RdBB)@bTeV9Wcd}Rysvod}7I%ujwYbTI*cN7Kbp_hO z=eU521!#cx$0O@k9b$;pnCTRtLIzv){nVW6Ux1<0@te6`S5%Ew3{Z^9=lbL5$NF vd4eUtK?%zgmB;_I&p`)YtpN `2Im(?jPN<(7Ua_ZWJRF(CChv`(gHfWodK%+joy>8Vaa;H1w zIJ?!kA| x7V;4U1BNr(UrhfvjPii7YENLIm`LtnL9Sx z5E9TYaILoB2nSwDe|BVmrpLT4 3*dJ8;T@1l zJE)4LEzIE{IN}+Nvpo3=ZtV!U#D;rB@9OXYw^4QH+(52&pQEcZq&~u9bTg63ikW9! z=!_RjN2xO=F+bk>fSPhsjQA;)%M1My#34T`I7tUf>Q_L>DRa=>Eo(sapm>}}LUsN% zVw!C~a)xcca`G#g*Xqo>_uCJTz>LoWGSKOwp-tv`yvfqw{17t`9Z}U4o+q2JGP^&9 z(m}|d13XhYSnEm$_8vH-Lq$A^>oWUz1)bnv|AVn_0FwM$vYu&8+qUg$+qP}nwrykD zwmIF?wr$()X@33oz1@B9zi+?Th^nZnsES)rb@O*K^JL~ZH|pRRk$i0+ohh?Il)y&~ zQaq{}9YxPt5~_2|+r#{k#~SUhO6yFq)uBGtYMMg4h1qddg!`TGHocYROyNFJtYjNe z3oezNpq6%TP5V1g(?^5DMeKV|i6vdBq)aGJ)BRv;K(EL0_q7$h@s?BV$)w31*c(jd z{@hDGl3QdXxS=#?0y3KmPd4JL(q(>0ikTk6nt98ptq$6_M|qrPi)N>HY>wKFbnCKY z%0`~`9p)MDESQJ#A`_>@iL7qOCmCJ(p^>f+zqaMuDRk!z01Nd2A_W^D%~M73jTqC* zKu8u$$r ({vP~TE8rPk?8RSjlRvG*BLF}ye~Su%s~rivmjg2F z24dhh6-1EQF(c>Z1E8DWY)Jw#9U#wR<@6J)3hjA&2qN$X%piJ4s={|>d-|Gzl~RNu z##iR(m;9TN3|zh+>HgTI&82iR>$YVoOq$a(2%l*2mNP(AsV=lR^>=tIP-R9T w!BYnZROx`PN*JiNH>8bG}&@h0_v$yOTk#@1;Mh;-={ZU7e @JE(~@@y0AuETvsqQV@7hbKe2wiWk@QvV=Kz`%@$rN z_0Hadkl?7oEdp5eaaMqBm;#Xj^`fxNO^GQ9S3|Fb#%{lN;1b`~yxLGEcy8~!cz{!! z=7tS!I)Qq%w(t9sTSMWNhoV#f=l5+a{a=}--?S!rA0w}QF!_Eq>V4NbmYKV&^OndM z4WiLbqeC5+P@g_!_rs01AY6HwF7)$~%Ok^(NPD9I@fn5I?f$(rcOQjP+z?_|V0DiN zb}l0fy*el9E 3Q7fVRKw$EIlb&T0fG~fDJZL7Qn8*a5{)vUblM)*)NTLf1ll$ zpQ^(0pkSTol`|t~`Y4wzl;%NRn >689mpQrW=SJ*rB;7}w zVHB?&sVa2%-q@ANA~v)F Xb`?Nz8M1rHKiZB4xC9<{Q3T!XaS#fEk=sXI4IFMnlRqG+yaFw< zF{}7tcMjV04!-_FFD8(FtuOZx+|CjF@-xl6-{qSFF!r7L3yD()=*Ss6fT?lDhy(h$ zt#%F575$U(3-e2LsJd>ksuUZZ%=c}2dWvu8f!V%>z3gajZ!Dlk zm=0|(wKY`c?r$|pX6XVo6padb9{EH}px)jIsdHoqG^(XH(7}r^bRa8BC(%M+wtcB? z6G2%tui|Tx6C3*#RFgNZi9emm*v~txI}~xV4C`Ns)qEoczZ>j*r zqQCa5k90Gntl?EX!{iWh=1t$~jVoXjs&*jKu0Ay`^k)hC^v_y0xU~brMZ6PPcmt5$ z@_h`f#qnI$6B D(`#IR0PrITIV^~O{uo=)+Bi$oHA$G* zH0a^PRoeYD3jU_k%!rTFh)v#@cq`P3_y=6D( M~GBud;4 zCk$LuxPgJ5=8OEDlnU!R^4QDM4jGn i}~C zy;t2E%Qy;A^bz_5HSb5pq{x{g59U!ReE?6ULOw58DJ cJy;H?g*ofr(X7+8wF;*3{rx>j&27Syl6A~{|w{pHb zeFgu0E>OC 81~6a9(2F13r7NZDGdQxR8T68&t`-BK zE>ZV0*0Ba9HkF_(AwfAds-r=|dA&p`G&B_zn5f9Zfrz9n#Rvso`x%u~SwE4SzYj!G zVQ0@jrLwbYP=awX$21Aq!I%M{x?|C`narFWhp4n;=>Sj!0_J!k7|A0;N4!+z%Oqlk z1>l=MHhw3bi1vT}1!}zR=6JOIYSm==qEN#7_fVsht?7SFCj=*2+Ro}B4}HR=D%%)F z?eHy=I#Qx(vvx)@Fc3?MT_@D))w@oOCRR5zRw7614#?(-nC?RH`r(bb{Zzn+VV0bm zJ93!(bfrDH;^p=IZkCH73f*GR8nDKoBo|!}($3^s*hV$c45Zu>6QCV(JhBW=3(Tpf z=4PT6@|s1Uz+U=zJXil3K(N6;ePhAJhCIo`%XDJYW@x#7Za);~`ANTvi$N4(Fy!K- z?CQ3KeEK64F0@ykv$-0oWCWhYI-5ZC1pDqui@B|+LVJmU`WJ=&C|{I_))TlREOc4* zSd%N=pJ_5$G5d ^3XK+yj2UZasg2) zXMLtMp<5XWWfh-o@ywb*nCnGdK{&S{YI54Wh2|h}yZ})+NCM;~i9H@1GMCgYf`d5n zwOR(*EEkE4-V#R2 +Rc>@cAEho+GAS2L!tz isLl${4 2Y=A7v}h;#@71_Gh2MV=hPr0_a% z0!={Fcv5^GwuEU^ 5rD|sP;+y<%5o9;#m>ssbtVR2g<420(I-@fSqfBVMv z?`>61-^q;M(b3r2z{=QxSjyH=-%99fpvb}8z}d;%_8$$J$qJg1Sp3KzlO_!nCn|g8 zzg8skdHNsfg kf8 A7PWs;YBz_S$S%!hWQ@G>guCgS--P!!Ui9#%GQ#Jh?s!U-4)7ozR?i>JXHU$| zg0^vuti{!=N|kWorZN FX`dJgdphgic#(8sOBHQdBkY}Qzp3V%T{DFb{nGPgS;QwnH9B9;-Xhy{? z(QVwtzkn9I)vHEmjY!T3ifk1l5B?%%TgP#;CqG-?16lTz;S_mHOzu#MY0w}XuF{lk z*dt`2?&plYn(B>FFXo+fd&CS3q^hquSLVEn6TMAZ6e*WC{Q2e&U7l|)*W;^4l~|Q= zt+yFlLVqPz!I4 0}NHv zE2t1meCuGH%<`5iJ(~8ji#VD{?uhP%F(TnG#uRZW-V}1=N%ev&+Gd4v!0(f`2Ar-Y z)GO6eYj7S{T_vxV?5^%l6TF{ygS_9e2DXT>9caP~xq* ~oE<5KkngGtsv)sdCC zaQH#kSL%c*gLj6tV)zE6SGq|0iX*DPV|I`byc9kn_tNQkP U%y<`rj zMC}lD<93=Oj+D6Y2GNMZb|m$^)RVdi`&0*}mxNy0BW#0iq!GGN2BGx5I0LS>I|4op z(6^xWULBr=QRpbxIJDK~?h;K#>LwQI4N<8 V?%3>9I5l+e*yG zFOZTIM0c3(q?y9f7qDHKX|%zsUF%2zN9jDa7%AK*qrI5@z~IruFP+IJy7!s~TE%V3 z_PSSxXlr!FU|Za>G_JL>DD3KVZ7u&}6VWbwWmSg?5;MabycEB)JT(eK8wg`^wvw!Q zH5h24_E$2cuib&9>Ue&@%Cly}6YZN-oO_ei5#33VvqV%L*~ZehqMe;)m;$9)$HBsM zfJ96Hk8GJyWwQ0$iiGjwhxGgQX$sN8ij%XJzW`pxqgwW=79hgMOMnC|0Q@ed%Y~=_ z?OnjUB|5rS+R$Q-p)vvM(eFS+Qr{_w$?#Y;0Iknw3u(+wA=2?gPyl~NyYa3me{-Su zhH#8;01jEm%r#5g5oy-f&F>VA5TE_9=a0aO4!|gJpu470WIrfGo~v}HkF91m6qEG2 zK4j=7C?wWUMG$kYbIp^+@)<#ArZ$3k^EQxraLk0qav9TynuE7T79%MsBxl3|nRn?L zD&8kt6* RJB6*a7=5c57wp!pg)p6O?WHQarI{o9@3a32zQ3FH8cK@P!DZ?CPN_LtmC6U4F zlv8T2?sa u&+(i@EL6+tvP^&=|aq3@QgL4 zOu6S3wSWeYtgCnKqg*H4ifIQlR4hd^n{F+3>h3;u_q~qw-Sh;4dYtp^VYymX12$`? z;V2_NiRt82RC=yC+aG ?=t&a81!gso$hQUb)LM2D4Z{)S zI1S9f020mSm(Dn$&Rlj 0UX}H@ zv={G+fFC>Sad0~8yB%62V(NB4Z|b%6%Co8j!>D(VyAvjFBP%gB+`b* &KnJ zU8s}&F+?iFKE(AT913mq;57|)q?ZrA&8YD3Hw*$yhkm;p5G6PNiO3VdFlnH-&U#JH zEX+y>hB(4$R<6k|pt0?$?8l@zeWk&1Y5tlbgs3540F>A@@rfvY;KdnVncEh@N6Mfi zY)8tFRY~Z?Qw!{@{sE~vQy)0&fKsJpj?yR`Yj+H5SDO1PBId3~d!yjh>FcI#Ug|^M z7-%>aeyQhL8Zmj1!O0D7A2pZE-$>+-6m<#`QX8(n)Fg>}l404xFmPR~at%$(h$hYD zoTzbxo`O{S{E}s8Mv6WviXMP}(YPZoL11xfd>bggPx;#&pFd;*#Yx%TtN1cp)MuHf z+Z*5CG_AFPwk624V9@&aL0;=@Ql=2h6aJoqWx|hPQQzdF{e7|fe(m){0==hk_!$ou zI|p_?kzdO9&d^GBS1u+$>JE-6Ov*o{mu@MF-?$r9V>i%;>>Fo~U`ac2hD*X}-gx*v z1&;@ey`rA0qNcD9-5;3_K&jg|qvn@m^+t?8(GTF0l#|({Zwp^5Ywik@bW9mN+5`MU zJ# _Ju|jtsq{tv)xA zY$5SnHgHj}c%qlQG72VS_(OSv;H~1GLUAegygT3T-J{<#h}))pk$FjfRQ+Kr%`2ZiI)@$96Nivh82#K@t>ze^H?R8wHii6Pxy z0o#T(lh=V>ZD6EXf0U}sG~nQ1dFI`bx;vivBkYSVkxXn?yx1aGxbUiNBawMGad;6? zm{zp?xqAoogt=I2H0g@826=7z^DmTTLB11by YvAO;ir|O0xmNN3Ec0w%yHO({-%q(go%?_X{LP?=E1uXoQgrEGOfL1?~ zI%uPHC23dn-RC@UPs;mxq6cFr{UrgG@e3ONEL^SoxFm%kE^LBhe_D6+Ia+u0J=)BC zf8FB!0J$dYg33jb2SxfmkB|8qeN&De!%r5|@H@GiqReK(YEpnXC;-v~*o<#JmYuze zW}p-K=9?0=*fZyYTE7A}?QR6}m_vMPK!r~y*6%My)d;x4R?-=~MMLC_02KejX9q6= z4sUB4AD0+H4ulSYz4;6mL8uaD07eXFvpy*i5X@dmx--+9`ur@rcJ5< L#s%nq3MRi4Dpr;#28}dl36M{MkVs4+Fm3Pjo5qSV)h}i(2^$Ty|<7N z>*LiBzFKH30D!$@n^3B@HYI_V1?yM(G$2Ml{oZ}?frfPU+{i|dHQOP^M0N2#NN_$+ zs*E=MXUOd=$Z2F4jSA^XIW=?KN=w6{_vJ4f(ZYhLxvFtPozPJv9k%7+z!Zj+_0|HC zMU0(8`8c`Sa=%e$|Mu2+CT22Ifbac@7Vn*he`|6Bl81j`44IRcTu8aw_Y%;I$Hnyd zdWz~I!tkWuGZx4Yjof(?jM;exFlUsrj5qO=@2F;56&^gM9D^ZUQ!6TMMUw19zslEu zwB^^D&nG96Y+Q wbvgk?Zmkn 9%d{+V;DGKmBE(yBWX6H#wbaAm&O1U^ zS4YS7j2!1LDC6|>cfdQa`}_^satOz6vc$BfFIG07LoU^IhVMS_u+N=|QCJao0{F>p z-^UkM)ODJW9#9*o;?LPCRV1y~k9B`&U)jbTdvuxG&2%!n_Z&udT=0mb@e;tZ $_l3bj6d0K2;Ya!&)q`A${SmdG_*4WfjubB)Mn+vaLV+)L5$yD zYSTGxpVok&fJDG9iS8#oMN{vQneO|W{Y_xL2Hhb%YhQJgq7j~X7?bcA|B||C?R=Eo z!z;=sSeKiw4mM$Qm>|aIP3nw36Tbh6Eml?hL#&PlR5xf9^vQGN6J8op1dpLfwFg}p zlqYx$610Zf?=vCbB_^~~(e4IMic7C}X(L6~AjDp^;|=d$`=!gd%iwCi5E9<6Y~z0! zX8p$qprEadiMgq>gZ_V~n$d~YUqqqsL#BE6t9ufXIUrs@DCTfGg^-Yh5Ms(wD1xAf zTX8g52V!jr9TlWLl+whcUDv?Rc~JmYs3haeG*UnV;4bI=;__i?OSk)bF3=c9;qTdP zeW1exJwD+;Q3yAw9j_42Zj9nuvs%q GF=6I@($2Ue(a9QGRMZTd4ZAlxbT5W~7(alP1u<^YY!c3B7QV z@jm$vn34XnA6Gh1I)NBgTmgmR=O1PKp#dT*mYDPRZ=}~X3B8}H*e_;;BHlr$FO}Eq zJ9oWk0y#h;N1~ho724x~d)A4Z-{V%F6#e5?Z^(`GGC}sYp5%DKnnB+i-NWxwL-CuF+^JWNl`t@VbXZ{K3#aIX+h9-{T*+t(b0BM&MymW9AA*{p^&-9 zWpWQ?*z(Yw!y%AoeoYS|E!(3IlLksr@?Z9Hqlig?Q4|cGe;0rg#FC}tXTmTNfpE}; z$sfUYEG@hLHUb$(K{A{R%~%6MQN|Bu949`f#H6YC*E(p3lBBKcx z-~Bsd6^QsKzB0)$FteBf*b3i7CN4hccSa-&lfQz4qHm>eC|_X!_E#?=`M(bZ{$cvU zZpMbr|4omp`s9mrgz@>4=Fk3~8Y7q$G{T@?oE0<(I91_t+U}xYlT{c&6}zPAE8ikT z3DP!l#>}i!A(eGT+@;fWdK#(~CTkwjs?*i4SJVBuNB2$6!bCRmcm6AnpHHvnN8G<| zuh4YCYC%5}Zo;BO1>L0hQ8p>}tRVx~O89!${_NXhT!HUoGj0}bLvL2)qRNt|g*q~B z7U&U7E+8Ixy1U`QT^&W@ZSRN|`_Ko$-Mk^^c%`YzhF(KY9l5))1jSyz$&>m WJHZzHt0Jje%BQFxEV}C00{|qo5_Hz7c!FlJ|T(JD^0*yjkDm zL}4S%JU(mBV|3G2jVWU>DX413;d+h0C3{g3v|U8cUj`tZL37Sf@1d*jpwt4^B)`bK zZdlwnPB6jfc7 rIKsldW81$C$a9BukX%=V}yPnaBz|i6(h>S)+Bn44@i8RtBZf0XetH&kAb?iAL zD%Ge{>Jo3sy2hgrD?15PM}X_)( 6$LV`&t*D`IP)m}bzM)+x-xRJ zavhA )>hu2cD;LUTvN38FEtB94ee|~lIvk~3MBPzmTsN|7V}Kzi!h&za#NyY zX^0BnB+lfBuW!oR#8G&S#Er2bCVtA@5FI` Q+a-e?G)LhzW_chWN-ZQmjtR eWu-UOPu^G}|k=o=;ffg>8|Z*qev7qS&oqA7%Z{4Ezb!t$f3& z^NuT8CSNp`VHScyikB1YO{BgaBVJR&>dNIEEBwYkfOkWN;(I8CJ|vIfD}ST
N z{097)R9iC@6($s$#dsb*4B XBx7 zb{6S2O}QUk>upEfij9C2tjqWy7%%V@Xfpe)vo6}PG+hmuY1Tc}peynUJLLmm)8pshG zb}HWl^|sOPtYk)CD- 7{L+l(=F zOp}fX8)|n{JDa&9uI!*@jh^^9qP&SbZ(xxDhR)y|bjnn|K3MeR3gl6xcvh9uqzb#K zYkVjnK $;lUky~??mcqN-)d5~mk{wXhrf^<)!Jjq c zG~hX0P_@KvOKwV=X9H&KR3GnP3U)DfqafBt$e10}iuVRFBXx@uBQ)sn0J%%c<;R+! zQz;ETTVa+ma>+VF%U43w?_F6s0=x@N2(oisjA7LUOM<$|6iE|$WcO67W|KY8JUV_# zg7P9K3Yo-c*;EmbsqT!M4(WT`%9uk+s9Em-yB0bE{B%F4X<8fT!%4??vezaJ(wJhj zfOb%wKfkY3RU}7^FRq`UEbB-#A-%7)NJQwQd1As=!$u#~2vQ*CE~qp`u=_kL<`{OL zk>753UqJVx1-4~+d@(pnX-i zV4&=eRWbJ)9YEGMV53poXpv$vd@^yd05z$$@i5J7%>gYKBx?mR2qGv&BPn!tE-_aW zg*C!Z& !B zH>3J16dTJC(@M0*kIc}Jn}jf=f*agba|!HVm|^@+7A?V>Woo!$SJko*Jv1mu>;d}z z^vF{3u5Mvo_94`4kq2&R2`32oyoWc2lJco3`Ls0Ew4E7*AdiMbn^LCV %7%mU)hr4S3UVJjDLUoIKRQ)gm?^{1Z}OYzd$1?a~tEY ztjXmIM*2_qC|OC{7V%430T?RsY?ZLN$w!bkDOQ0}wiq69){Kdu3SqW?NMC))S}zq^ zu)w!>E1!;OrXO!RmT?m&PA;YKUjJy5-Seu=@o;m4*Vp$0OipBl4~Ub)1xBdWkZ 47=UkJd$`Z}O8ZbpGN$i_WtY^00`S8=EHG#Ff{&MU1L(^wYjTchB zMTK%1LZ(eLLP($0UR2JVLaL|C2~IFbWirNjp|^= Fl48~Sp9zNOCZ@t&;;^avfN(NpNfq}~VYA{q%yjHo4D>JB>XEv(~Z!`1~SoY=9v zTq;hrjObE_h)cmHXLJ>LC_&XQ2 BgGfV}e#v}ZF}iF97bG`Nog&O+SA`2zsn%bbB309}I$ zYi;vW$k@fC^muYBL?XB#CBuhC&^H)F4E&vw(5Q^PF{7~}(b&lF4^%DQzL0(BVk?lM zTHXTo4?Ps|dRICEiux#y77_RF8?5!1D-*h5UY&gRY`WO|V`xxB{f{DHzBwvt1W==r zdfAUy d({^*>Y7lObr;_fO zxDDw7X^dO`n!PLqHZ`by0h#BJ-@bAFPs{yJQ~Ylj^M5zWsxO_WFHG}8hH>OK{Q)9` zSRP94d{AM(q-2x0yhK@aNMv!qGA5@~2tB;X?l{Pf?DM5Y*Q K`{mGA? zjx;gwnR~#Nep12dFk<^@-U{`&`P1Z}Z3T2~m8^J&7y}GaMElsTXg|GqfF3>E#HG=j zMt;6hfbfjHSQ&pN9(AT8q$FLKXo`N(WNHDY!K6;JrHZCO&ISBdX`g8sX vIf?|8 zX$-W^ut!FhBxY|+R49o44IgWHt}$1BuE|6|kvn1OR#zhyrw}4H*~cpmFk%K(CTGYc zNkJ8L$eS;UYDa=ZHWZy`rO`!w0oIcgZnK&xC|93#nHvfb^n1xgxf{$LB`H1ao+OGb zKG_}>N-RHSqL(RBdlc7J-Z$Gaay`wEGJ_u-lo88{`aQ*+T~+x(H5j?Q{uRA~>2R+} zB+{wM2m?$->unwg8-GaFrG%ZmoHEceOj{W21)Mi2lAfT)EQuNVo+Do%nHPuq7Ttt7 z%^6J5Yo64dH671tOUrA7I2hL@HKZq;S#Ejxt;*m-l*pPj?=i`=E~FAXAb#QH+a}-% z#3u^pFlg%p{hGiIp>05T$RiE*V7bPXtkz(G<+^E}Risi6F!R~Mbf(Qz*<@2&F#vDr zaL#!8!&ughWxjA(o9xtK{BzzYwm_z2t*c>2jI)c0-xo8ahnEqZ&K;8uF*!Hg0?Gd* z=eJK`FkAr>7$_i$;kq3Ks5NNJkNBnw|1f-&Ys56c9Y@tdM3VTT uXOCbWqye9va6+ZSeF0eh} zYb^ct&