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/45] 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/45] 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/45] 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/45] see 06/03 log
---
.gitignore | 2 +-
CHANGELOG.md | 1 +
gradle.properties | 8 +++++-
gradle/config/config.gradle | 10 ++++----
gradle/config/configApp.gradle | 5 +++-
launcher/app/build.gradle | 6 ++---
launcher/pkg/build.gradle | 2 +-
.../com/blankj/launcher/pkg/MainActivity.kt | 2 +-
.../pkg/src/main/res/layout/activity_main.xml | 18 ++++++-------
lib/base/build.gradle | 2 +-
.../com/blankj/lib/base/BaseActivity.java | 5 ++--
.../com/blankj/lib/base/BaseApplication.java | 3 ++-
.../blankj/lib/base/BaseDrawerActivity.java | 11 ++++----
.../com/blankj/lib/base/BaseFragment.java | 13 +++++-----
.../blankj/lib/base/BaseTitleActivity.java | 9 ++++---
.../java/com/blankj/lib/base/IBaseView.java | 5 ++--
.../com/blankj/lib/base/rv/BaseAdapter.java | 5 ++--
.../java/com/blankj/lib/base/rv/BaseCell.java | 3 ++-
.../blankj/lib/base/rv/BaseViewHolder.java | 4 +--
.../lib/base/rv/RecycleViewDivider.java | 10 ++++----
.../main/res/layout/activity_base_title.xml | 11 ++++----
.../activity_base_title_stub_scroll.xml | 4 +--
.../src/main/res/layout/activity_drawer.xml | 6 ++---
subutil/app/build.gradle | 2 +-
subutil/lib/build.gradle | 2 +-
.../blankj/subutil/util/LocationUtils.java | 2 +-
.../com/blankj/subutil/util/PinyinUtils.java | 2 +-
.../java/com/blankj/subutil/util/Utils.java | 4 +--
.../subutil/util/http/ExecutorFactory.java | 3 ++-
.../blankj/subutil/util/http/HttpUtils.java | 3 ++-
.../com/blankj/subutil/util/http/Request.java | 3 ++-
.../blankj/subutil/util/http/SSLConfig.java | 3 ++-
subutil/pkg/build.gradle | 2 +-
.../blankj/subutil/pkg/helper/DialogHelper.kt | 2 +-
utilcode/README-CN.md | 2 +-
utilcode/README.md | 2 +-
utilcode/app/build.gradle | 2 +-
utilcode/lib/build.gradle | 2 +-
utilcode/lib/project.properties | 6 ++---
.../utilcode/constant/MemoryConstants.java | 2 +-
.../constant/PermissionConstants.java | 2 +-
.../utilcode/constant/TimeConstants.java | 2 +-
.../blankj/utilcode/util/ActivityUtils.java | 11 ++++----
.../blankj/utilcode/util/AntiShakeUtils.java | 5 ++--
.../com/blankj/utilcode/util/AppUtils.java | 5 ++--
.../com/blankj/utilcode/util/BarUtils.java | 11 ++++----
.../blankj/utilcode/util/BrightnessUtils.java | 5 ++--
.../com/blankj/utilcode/util/BusUtils.java | 5 ++--
.../utilcode/util/CacheDiskStaticUtils.java | 3 ++-
.../blankj/utilcode/util/CacheDiskUtils.java | 3 ++-
.../utilcode/util/CacheDoubleStaticUtils.java | 3 ++-
.../utilcode/util/CacheDoubleUtils.java | 2 +-
.../utilcode/util/CacheMemoryStaticUtils.java | 2 +-
.../utilcode/util/CacheMemoryUtils.java | 4 +--
.../com/blankj/utilcode/util/ColorUtils.java | 12 ++++-----
.../com/blankj/utilcode/util/CrashUtils.java | 4 +--
.../com/blankj/utilcode/util/DeviceUtils.java | 5 ++--
.../blankj/utilcode/util/FragmentUtils.java | 21 ++++++++--------
.../com/blankj/utilcode/util/ImageUtils.java | 14 +++++------
.../com/blankj/utilcode/util/IntentUtils.java | 4 +--
.../blankj/utilcode/util/KeyboardUtils.java | 3 ++-
.../com/blankj/utilcode/util/LogUtils.java | 8 +++---
.../blankj/utilcode/util/MetaDataUtils.java | 2 +-
.../blankj/utilcode/util/NetworkUtils.java | 5 ++--
.../utilcode/util/NotificationUtils.java | 6 ++---
.../com/blankj/utilcode/util/ObjectUtils.java | 6 ++---
.../blankj/utilcode/util/PermissionUtils.java | 8 +++---
.../com/blankj/utilcode/util/PhoneUtils.java | 2 +-
.../blankj/utilcode/util/ProcessUtils.java | 4 +--
.../com/blankj/utilcode/util/RegexUtils.java | 2 +-
.../blankj/utilcode/util/ResourceUtils.java | 2 +-
.../blankj/utilcode/util/SPStaticUtils.java | 2 +-
.../com/blankj/utilcode/util/SPUtils.java | 2 +-
.../com/blankj/utilcode/util/ScreenUtils.java | 4 +--
.../com/blankj/utilcode/util/ShellUtils.java | 2 +-
.../blankj/utilcode/util/SnackbarUtils.java | 14 +++++------
.../com/blankj/utilcode/util/SpanUtils.java | 16 ++++++------
.../com/blankj/utilcode/util/StringUtils.java | 4 +--
.../com/blankj/utilcode/util/ThreadUtils.java | 5 ++--
.../com/blankj/utilcode/util/TimeUtils.java | 2 +-
.../com/blankj/utilcode/util/ToastUtils.java | 10 ++++----
.../com/blankj/utilcode/util/UriUtils.java | 25 +++++++++++++------
.../java/com/blankj/utilcode/util/Utils.java | 3 ++-
.../blankj/utilcode/util/VibrateUtils.java | 2 +-
.../com/blankj/utilcode/util/BaseTest.java | 11 +++-----
.../blankj/utilcode/util/ObjectUtilsTest.java | 5 ++--
utilcode/pkg/build.gradle | 2 +-
.../pkg/feature/activity/ActivityActivity.kt | 2 +-
.../feature/activity/SubActivityActivity.kt | 2 +-
.../feature/bar/BarStatusFragmentActivity.kt | 16 ++++++------
.../pkg/feature/fragment/ContainerFragment.kt | 6 ++---
.../pkg/feature/fragment/FragmentActivity.kt | 6 ++---
.../pkg/feature/image/ImageActivity.kt | 4 +--
.../pkg/feature/snackbar/SnackbarActivity.kt | 2 +-
.../utilcode/pkg/feature/span/SpanActivity.kt | 2 +-
.../utilcode/pkg/feature/toast/CustomToast.kt | 2 +-
.../pkg/feature/toast/ToastActivity.kt | 2 +-
.../utilcode/pkg/helper/DialogHelper.kt | 5 ++--
.../main/res/layout/activity_adaptscreen.xml | 4 +--
.../res/layout/activity_adaptscreen_close.xml | 4 +--
.../layout/activity_adaptscreen_height.xml | 7 +++---
.../res/layout/activity_adaptscreen_width.xml | 4 +--
.../layout/activity_bar_status_fragment.xml | 4 +--
.../src/main/res/layout/activity_fragment.xml | 2 +-
.../src/main/res/layout/activity_image.xml | 3 +--
105 files changed, 293 insertions(+), 253 deletions(-)
diff --git a/.gitignore b/.gitignore
index 201b88771a..193619553c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,4 +9,4 @@
.externalNativeBuild
/apk
*.phrof
-/maven
+/busMaven
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 95dfb60cc3..9c48786e89 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@
* `19/04/24` [upd] The swipe panel.
* `19/03/17` [fix] The ugly UI.
* `19/03/14` [fix] AdaptScreenUtils didn't work on some HaWei tablet.
+* `19/03/09` [fix] UriUtils#uri2File.
* `19/03/08` [add] LogUtils support multi process. Publish v1.23.7.
* `19/03/02` [fix] LogUtils#file.
* `19/02/28` [fix] ImageUtils#calculateInSampleSize. Publish v1.23.6.
diff --git a/gradle.properties b/gradle.properties
index 110f0cb7ef..c209c08b84 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -19,4 +19,10 @@
#org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
-org.gradle.jvmargs=-XX:MaxHeapSize=1024m -Xmx1024m
\ No newline at end of file
+org.gradle.jvmargs=-Xmx8192m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+org.gradle.daemon=true
+org.gradle.configureondemand=true
+org.gradle.parallel=true
+
+android.enableJetifier=true
+android.useAndroidX=true
\ No newline at end of file
diff --git a/gradle/config/config.gradle b/gradle/config/config.gradle
index e455c4dba6..e8c793b6b3 100644
--- a/gradle/config/config.gradle
+++ b/gradle/config/config.gradle
@@ -5,7 +5,7 @@ gradle.ext {
applicationId = 'com.blankj.androidutilcode'
appName = 'Util'
- compileSdkVersion = 27
+ compileSdkVersion = 28
minSdkVersion = 14
targetSdkVersion = 27
versionCode = 1_024_000
@@ -13,8 +13,8 @@ gradle.ext {
// lib version
kotlin_version = '1.3.10'
- support_version = '27.1.1'
leakcanary_version = '1.6.3'
+ androidx_version = '1.0.0'
dep = [:]
@@ -36,11 +36,11 @@ gradle.ext {
subutil_lib : new DepConfig(":subutil:lib"),
subutil_pkg : new DepConfig(":subutil:pkg"),
utilcode_app : new DepConfig(":utilcode:app"),
- utilcode_lib : new DepConfig(false, ":utilcode:lib", "com.blankj:utilcode:$versionName"),
+ utilcode_lib : new DepConfig(true, ":utilcode:lib", "com.blankj:utilcode:$versionName"),
utilcode_pkg : new DepConfig(":utilcode:pkg"),
- support_appcompat_v7 : new DepConfig("com.android.support:appcompat-v7:$support_version"),
- support_design : new DepConfig("com.android.support:design:$support_version"),
+ support_appcompat_v7 : new DepConfig("androidx.appcompat:appcompat:$androidx_version"),
+ support_material : new DepConfig("com.google.android.material:material:$androidx_version"),
support_multidex : new DepConfig("com.android.support:multidex:1.0.2"),
constraint : new DepConfig("com.android.support.constraint:constraint-layout:1.1.3"),
diff --git a/gradle/config/configApp.gradle b/gradle/config/configApp.gradle
index cb8d5a290a..809cb07cd4 100644
--- a/gradle/config/configApp.gradle
+++ b/gradle/config/configApp.gradle
@@ -42,8 +42,11 @@ android {
}
dexOptions {
+ preDexLibraries true
javaMaxHeapSize "8g"
maxProcessCount 8
+ incremental true
+ dexInProcess = true
}
}
@@ -57,7 +60,7 @@ dependencies {
private String getSuffix() {
if (project.path == ":launcher:app") return ""
- return project.path.replace(":" , "_").substring(0, project.path.length() - 4)
+ return project.path.replace(":", "_").substring(0, project.path.length() - 4)
}
def configSigning(Project pro) {
diff --git a/launcher/app/build.gradle b/launcher/app/build.gradle
index eb9f8d906f..bf68fb45ff 100644
--- a/launcher/app/build.gradle
+++ b/launcher/app/build.gradle
@@ -4,7 +4,7 @@ apply {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation project(':launcher:pkg')
- implementation project(':subutil:pkg')
- implementation project(':utilcode:pkg')
+ implementation gradle.ext.dep.launcher_pkg
+ implementation gradle.ext.dep.subutil_pkg
+ implementation gradle.ext.dep.utilcode_pkg
}
\ No newline at end of file
diff --git a/launcher/pkg/build.gradle b/launcher/pkg/build.gradle
index 9fe360a5dd..881637b34a 100644
--- a/launcher/pkg/build.gradle
+++ b/launcher/pkg/build.gradle
@@ -4,5 +4,5 @@ apply {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- api project(':lib:base')
+ api gradle.ext.dep.lib_base
}
\ No newline at end of file
diff --git a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
index 02491cd88d..0e9f0a8477 100644
--- a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
+++ b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
@@ -2,7 +2,7 @@ package com.blankj.launcher.pkg
import android.graphics.Color
import android.os.Bundle
-import android.support.v7.app.ActionBarDrawerToggle
+import androidx.appcompat.app.ActionBarDrawerToggle
import android.view.View
import android.widget.ImageView
import com.blankj.lib.base.BaseDrawerActivity
diff --git a/launcher/pkg/src/main/res/layout/activity_main.xml b/launcher/pkg/src/main/res/layout/activity_main.xml
index 3b31dafe32..ee8b62a6fa 100644
--- a/launcher/pkg/src/main/res/layout/activity_main.xml
+++ b/launcher/pkg/src/main/res/layout/activity_main.xml
@@ -1,17 +1,17 @@
-
-
-
-
-
-
+
+
-
@@ -69,5 +69,5 @@
android:text="@string/sub_util" />
-
-
+
+
diff --git a/lib/base/build.gradle b/lib/base/build.gradle
index 370036c062..67f9762d82 100644
--- a/lib/base/build.gradle
+++ b/lib/base/build.gradle
@@ -8,7 +8,7 @@ dependencies {
api gradle.ext.dep.subutil_lib
api gradle.ext.dep.support_appcompat_v7
- api gradle.ext.dep.support_design
+ api gradle.ext.dep.support_material
api gradle.ext.dep.support_multidex
api gradle.ext.dep.constraint
api gradle.ext.dep.kotlin
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java
index caae1d45cf..0c9d8fa419 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java
@@ -3,11 +3,12 @@
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
-import android.support.annotation.LayoutRes;
-import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
+import androidx.annotation.LayoutRes;
+import androidx.appcompat.app.AppCompatActivity;
+
import com.blankj.swipepanel.SwipePanel;
import com.blankj.utilcode.util.AntiShakeUtils;
import com.blankj.utilcode.util.AppUtils;
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.java b/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.java
index 1e0ddc0b27..5d2eba8260 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.java
@@ -2,7 +2,8 @@
import android.app.Application;
import android.content.Context;
-import android.support.multidex.MultiDex;
+
+import androidx.multidex.MultiDex;
import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.CrashUtils;
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java b/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java
index c7f7f1daea..ec3c895f6e 100755
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java
@@ -3,17 +3,18 @@
import android.annotation.SuppressLint;
import android.content.Intent;
import android.net.Uri;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.StringRes;
-import android.support.design.widget.NavigationView;
-import android.support.v4.widget.DrawerLayout;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.widget.FrameLayout;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.StringRes;
+import androidx.drawerlayout.widget.DrawerLayout;
+
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.StringUtils;
+import com.google.android.material.navigation.NavigationView;
/**
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java b/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java
index 5667f3f02c..0e4e7ba5cc 100755
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java
@@ -4,17 +4,18 @@
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
-import android.support.annotation.IdRes;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import androidx.annotation.IdRes;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentTransaction;
+
import com.blankj.utilcode.util.AntiShakeUtils;
/**
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java b/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java
index a40230420d..e0ed3ed10a 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java
@@ -1,16 +1,17 @@
package com.blankj.lib.base;
import android.annotation.SuppressLint;
-import android.support.annotation.LayoutRes;
-import android.support.design.widget.CoordinatorLayout;
-import android.support.v7.app.ActionBar;
-import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewStub;
import android.widget.FrameLayout;
+import androidx.annotation.LayoutRes;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.widget.Toolbar;
+import androidx.coordinatorlayout.widget.CoordinatorLayout;
+
import com.blankj.utilcode.util.BarUtils;
import com.blankj.utilcode.util.ColorUtils;
diff --git a/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java b/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java
index 29e8553899..b0550f126c 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java
@@ -1,10 +1,11 @@
package com.blankj.lib.base;
import android.os.Bundle;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.Nullable;
import android.view.View;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.Nullable;
+
/**
*
diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseAdapter.java b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseAdapter.java
index 11aa94e015..e69be6c6df 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseAdapter.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseAdapter.java
@@ -1,12 +1,13 @@
package com.blankj.lib.base.rv;
import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
import java.util.List;
/**
diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseCell.java b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseCell.java
index cdf42c7882..332c4caee0 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseCell.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseCell.java
@@ -1,10 +1,11 @@
package com.blankj.lib.base.rv;
-import android.support.annotation.NonNull;
import android.util.SparseArray;
import android.util.SparseIntArray;
import android.view.View;
+import androidx.annotation.NonNull;
+
/**
*
* author: blankj
diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java
index ceb1c46eac..0bd892f317 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java
@@ -1,7 +1,7 @@
package com.blankj.lib.base.rv;
-import android.support.annotation.IdRes;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.IdRes;
+import androidx.recyclerview.widget.RecyclerView;
import android.util.SparseArray;
import android.view.View;
diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java b/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java
index 3d2b90f302..dd20894e10 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java
@@ -5,11 +5,11 @@
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
+import androidx.core.view.ViewCompat;
+import androidx.recyclerview.widget.RecyclerView;
import android.view.View;
import android.widget.LinearLayout;
diff --git a/lib/base/src/main/res/layout/activity_base_title.xml b/lib/base/src/main/res/layout/activity_base_title.xml
index b11ecf7341..986d3669b6 100644
--- a/lib/base/src/main/res/layout/activity_base_title.xml
+++ b/lib/base/src/main/res/layout/activity_base_title.xml
@@ -1,24 +1,23 @@
-
-
-
-
+
-
+
diff --git a/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml b/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml
index 96f5e09d49..bd031cfb67 100644
--- a/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml
+++ b/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml
@@ -1,5 +1,5 @@
-
-
+
diff --git a/lib/base/src/main/res/layout/activity_drawer.xml b/lib/base/src/main/res/layout/activity_drawer.xml
index 72f70ed969..be44cd718c 100644
--- a/lib/base/src/main/res/layout/activity_drawer.xml
+++ b/lib/base/src/main/res/layout/activity_drawer.xml
@@ -1,5 +1,5 @@
-
-
-
+
diff --git a/subutil/app/build.gradle b/subutil/app/build.gradle
index a2e0172413..a7027c15ef 100644
--- a/subutil/app/build.gradle
+++ b/subutil/app/build.gradle
@@ -4,5 +4,5 @@ apply {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation project(':subutil:pkg')
+ implementation gradle.ext.dep.subutil_pkg
}
\ No newline at end of file
diff --git a/subutil/lib/build.gradle b/subutil/lib/build.gradle
index 9dcbe0b542..f3140b4f0b 100644
--- a/subutil/lib/build.gradle
+++ b/subutil/lib/build.gradle
@@ -14,7 +14,7 @@ readme {
dependencies {
compileOnly gradle.ext.dep.support_appcompat_v7
- compileOnly gradle.ext.dep.support_design
+ compileOnly gradle.ext.dep.support_material
api(gradle.ext.dep.glide) {
exclude group: "com.android.support"
}
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java
index 7ee8747902..0c177b534c 100755
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java
@@ -11,7 +11,7 @@
import android.location.LocationProvider;
import android.os.Bundle;
import android.provider.Settings;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
import android.util.Log;
import java.io.IOException;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java
index 22486b3a91..934408c65e 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java
@@ -1,6 +1,6 @@
package com.blankj.subutil.util;
-import android.support.v4.util.SimpleArrayMap;
+import androidx.collection.SimpleArrayMap;
/**
*
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
index 9cbf4e06fd..91b336abcf 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
@@ -7,8 +7,8 @@
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import java.lang.reflect.InvocationTargetException;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java
index f5583397d9..2f26fb9c24 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java
@@ -2,7 +2,8 @@
import android.os.Handler;
import android.os.Looper;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java
index b952f318cb..bdd4174486 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java
@@ -1,7 +1,8 @@
package com.blankj.subutil.util.http;
import android.accounts.NetworkErrorException;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java
index fe39b1299c..c6eddf9b96 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java
@@ -1,6 +1,7 @@
package com.blankj.subutil.util.http;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java
index b8624af490..0cf43662f2 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java
@@ -2,7 +2,8 @@
import android.annotation.SuppressLint;
import android.os.Build;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
import java.io.IOException;
import java.net.InetAddress;
diff --git a/subutil/pkg/build.gradle b/subutil/pkg/build.gradle
index 9fe360a5dd..881637b34a 100644
--- a/subutil/pkg/build.gradle
+++ b/subutil/pkg/build.gradle
@@ -4,5 +4,5 @@ apply {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- api project(':lib:base')
+ api gradle.ext.dep.lib_base
}
\ No newline at end of file
diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
index 45e67a4a0d..9eba25c622 100644
--- a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
+++ b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
@@ -1,6 +1,6 @@
package com.blankj.subutil.pkg.helper
-import android.support.v7.app.AlertDialog
+import androidx.appcompat.app.AlertDialog
import com.blankj.subutil.pkg.R
import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.PermissionUtils
diff --git a/utilcode/README-CN.md b/utilcode/README-CN.md
index 445f206121..0bdb622940 100644
--- a/utilcode/README-CN.md
+++ b/utilcode/README-CN.md
@@ -5,7 +5,7 @@ Gradle:
implementation 'com.blankj:utilcode:1.24.0'
// if u use AndroidX, use the following
-implementation 'com.blankj:utilcodex:1.23.7'
+implementation 'com.blankj:utilcodex:1.24.0'
```
diff --git a/utilcode/README.md b/utilcode/README.md
index f449736061..5a6a295b4c 100644
--- a/utilcode/README.md
+++ b/utilcode/README.md
@@ -5,7 +5,7 @@ Gradle:
implementation 'com.blankj:utilcode:1.24.0'
// if u use AndroidX, use the following
-implementation 'com.blankj:utilcodex:1.23.7'
+implementation 'com.blankj:utilcodex:1.24.0'
```
diff --git a/utilcode/app/build.gradle b/utilcode/app/build.gradle
index 5616386892..ea5c172cd7 100644
--- a/utilcode/app/build.gradle
+++ b/utilcode/app/build.gradle
@@ -4,5 +4,5 @@ apply {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation project(':utilcode:pkg')
+ implementation gradle.ext.dep.utilcode_pkg
}
\ No newline at end of file
diff --git a/utilcode/lib/build.gradle b/utilcode/lib/build.gradle
index e4dd3a6716..6d6c599298 100644
--- a/utilcode/lib/build.gradle
+++ b/utilcode/lib/build.gradle
@@ -18,7 +18,7 @@ dependencies {
compile gradle.ext.dep.gson
compileOnly gradle.ext.dep.support_appcompat_v7
- compileOnly gradle.ext.dep.support_design
+ compileOnly gradle.ext.dep.support_material
testImplementation gradle.ext.dep.junit
testImplementation gradle.ext.dep.robolectric
diff --git a/utilcode/lib/project.properties b/utilcode/lib/project.properties
index 22ae3b8603..d238eda740 100644
--- a/utilcode/lib/project.properties
+++ b/utilcode/lib/project.properties
@@ -1,9 +1,9 @@
#project
-project.name=UtilCode
+project.name=UtilCodeX
project.groupId=com.blankj
-project.artifactId=utilcode
+project.artifactId=utilcodex
project.packaging=aar
project.siteUrl=https://github.com/Blankj/AndroidUtilCode
project.gitUrl=https://github.com/Blankj/AndroidUtilCode.git
#javadoc
-javadoc.name=UtilCode
\ No newline at end of file
+javadoc.name=UtilCodeX
\ No newline at end of file
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
index b68bfcb113..5c05c0163e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
@@ -1,6 +1,6 @@
package com.blankj.utilcode.constant;
-import android.support.annotation.IntDef;
+import androidx.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
index 76f7e9a217..6db826e4ab 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
@@ -4,7 +4,7 @@
import android.Manifest.permission;
import android.annotation.SuppressLint;
import android.os.Build;
-import android.support.annotation.StringDef;
+import androidx.annotation.StringDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
index 9932037bf8..45090576e3 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
@@ -1,6 +1,6 @@
package com.blankj.utilcode.constant;
-import android.support.annotation.IntDef;
+import androidx.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
index d6a671e4fe..de1bfeb005 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
@@ -10,14 +10,15 @@
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
-import android.support.annotation.AnimRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.ActivityOptionsCompat;
-import android.support.v4.util.Pair;
import android.util.Log;
import android.view.View;
+import androidx.annotation.AnimRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.app.ActivityOptionsCompat;
+import androidx.core.util.Pair;
+
import java.util.List;
/**
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
index 7e87e73474..ca9036225e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
@@ -1,9 +1,10 @@
package com.blankj.utilcode.util;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
import android.view.View;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
/**
*
* author: blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
index a9368be59f..5a9194ce66 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
@@ -17,8 +17,6 @@
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.v4.content.FileProvider;
import android.util.Log;
import java.io.File;
@@ -27,6 +25,9 @@
import java.util.ArrayList;
import java.util.List;
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
+
/**
*
* author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
index 7b5509b2b5..22178a5c20 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
@@ -8,11 +8,6 @@
import android.graphics.Color;
import android.graphics.Point;
import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RequiresPermission;
-import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.util.TypedValue;
import android.view.Display;
@@ -27,6 +22,12 @@
import java.lang.reflect.Method;
+import androidx.annotation.ColorInt;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
+import androidx.drawerlayout.widget.DrawerLayout;
+
import static android.Manifest.permission.EXPAND_STATUS_BAR;
/**
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
index f9344b0a59..bacc519540 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
@@ -2,11 +2,12 @@
import android.content.ContentResolver;
import android.provider.Settings;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
import android.view.Window;
import android.view.WindowManager;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
/**
*
* author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
index f04202043e..d272c99b98 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
@@ -16,11 +16,12 @@
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
index bb48a4b5cf..c5a9a17a6d 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
@@ -3,13 +3,14 @@
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Parcelable;
-import android.support.annotation.NonNull;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.Serializable;
+import androidx.annotation.NonNull;
+
/**
*
* author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
index 67e6b3fb0e..a8ae8afa5b 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
@@ -8,9 +8,10 @@
import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
-import android.support.annotation.NonNull;
import android.util.Log;
+import androidx.annotation.NonNull;
+
import com.blankj.utilcode.constant.CacheConstants;
import org.json.JSONArray;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
index 2ef267bd01..6dbb9f7475 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
@@ -3,13 +3,14 @@
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Parcelable;
-import android.support.annotation.NonNull;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.Serializable;
+import androidx.annotation.NonNull;
+
/**
*
* author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
index c800423c78..aca1c25837 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
@@ -3,7 +3,7 @@
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Parcelable;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import com.blankj.utilcode.constant.CacheConstants;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
index 56abfba117..aedcfa7fc4 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
@@ -1,6 +1,6 @@
package com.blankj.utilcode.util;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
/**
*
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
index d0e06e394d..ddaa2baed9 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
@@ -1,7 +1,7 @@
package com.blankj.utilcode.util;
-import android.support.annotation.NonNull;
-import android.support.v4.util.LruCache;
+import androidx.annotation.NonNull;
+import androidx.collection.LruCache;
import com.blankj.utilcode.constant.CacheConstants;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
index 4c0c22232b..a6603cfc44 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
@@ -1,12 +1,12 @@
package com.blankj.utilcode.util;
import android.graphics.Color;
-import android.support.annotation.ColorInt;
-import android.support.annotation.ColorRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.ColorRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
/**
*
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
index 18b5f814a3..081dd09761 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
@@ -5,8 +5,8 @@
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Environment;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
import android.util.Log;
import java.io.BufferedWriter;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
index e6b1910cfc..c641c9bdae 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
@@ -11,11 +11,12 @@
import android.os.Debug;
import android.os.PowerManager;
import android.provider.Settings;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RequiresPermission;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
+
import java.io.File;
import java.net.InetAddress;
import java.net.NetworkInterface;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
index 43b8537e75..9e8ae14ef1 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
@@ -3,16 +3,6 @@
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
-import android.support.annotation.AnimRes;
-import android.support.annotation.AnimatorRes;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IdRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.View;
@@ -20,6 +10,17 @@
import java.util.Collections;
import java.util.List;
+import androidx.annotation.AnimRes;
+import androidx.annotation.AnimatorRes;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.IdRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
/**
*
* author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
index 83e01eb1ad..cbee7dd4bd 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
@@ -27,13 +27,13 @@
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
import android.view.View;
import java.io.BufferedOutputStream;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
index 6faa37d043..1e26dc8a9a 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
@@ -8,8 +8,8 @@
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.Settings;
-import android.support.annotation.RequiresPermission;
-import android.support.v4.content.FileProvider;
+import androidx.annotation.RequiresPermission;
+import androidx.core.content.FileProvider;
import java.io.File;
import java.util.ArrayList;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
index cfa568fa7c..de3eb285cc 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
@@ -7,7 +7,6 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.ResultReceiver;
-import android.support.annotation.NonNull;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
@@ -16,6 +15,8 @@
import android.view.inputmethod.InputMethodManager;
import android.widget.FrameLayout;
+import androidx.annotation.NonNull;
+
import java.lang.reflect.Field;
/**
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
index 1372ecd40b..9a7e11cbf5 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
@@ -10,10 +10,10 @@
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.RequiresApi;
-import android.support.v4.util.SimpleArrayMap;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.RequiresApi;
+import androidx.collection.SimpleArrayMap;
import android.util.Log;
import com.google.gson.Gson;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
index 6f6cf85b80..bd4b8da935 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
@@ -8,7 +8,7 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
/**
*
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
index d59eb28240..24a05a26b7 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
@@ -7,13 +7,14 @@
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
+
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.InterfaceAddress;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
index b8163d2e66..73a900b465 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
@@ -5,9 +5,9 @@
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
-import android.support.annotation.Nullable;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationManagerCompat;
+import androidx.annotation.Nullable;
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationManagerCompat;
/**
*
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
index be5491ece0..3c0c087a39 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
@@ -1,9 +1,9 @@
package com.blankj.utilcode.util;
import android.os.Build;
-import android.support.annotation.RequiresApi;
-import android.support.v4.util.LongSparseArray;
-import android.support.v4.util.SimpleArrayMap;
+import androidx.annotation.RequiresApi;
+import androidx.collection.LongSparseArray;
+import androidx.collection.SimpleArrayMap;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.SparseIntArray;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
index d35cbcc620..602efcb5db 100755
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
@@ -9,10 +9,10 @@
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RequiresApi;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
import android.util.Log;
import android.view.MotionEvent;
import android.view.WindowManager;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
index 99068781a4..f407f81b5f 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
@@ -7,7 +7,7 @@
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
index adcd265f72..619b175549 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
@@ -10,8 +10,8 @@
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
import android.util.Log;
import java.util.Arrays;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
index ba57fab956..817a94149f 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
@@ -1,6 +1,6 @@
package com.blankj.utilcode.util;
-import android.support.v4.util.SimpleArrayMap;
+import androidx.collection.SimpleArrayMap;
import com.blankj.utilcode.constant.RegexConstants;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
index 81d10f08cf..3fb515c06b 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
@@ -1,6 +1,6 @@
package com.blankj.utilcode.util;
-import android.support.annotation.RawRes;
+import androidx.annotation.RawRes;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
index d3e21fb873..21274c3023 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
@@ -1,7 +1,7 @@
package com.blankj.utilcode.util;
import android.content.SharedPreferences;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import java.util.Map;
import java.util.Set;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
index 554a2ed586..a9d18a1a55 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
@@ -3,7 +3,7 @@
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import java.util.Collections;
import java.util.HashMap;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
index 7390fceed0..3245eb115c 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
@@ -10,8 +10,8 @@
import android.graphics.Point;
import android.os.Build;
import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
import android.util.DisplayMetrics;
import android.view.Surface;
import android.view.View;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java
index b7ad2fa9d2..fc10a601ae 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java
@@ -1,6 +1,6 @@
package com.blankj.utilcode.util;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import java.io.BufferedReader;
import java.io.DataOutputStream;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
index b164e6154e..eab1990d29 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
@@ -1,12 +1,12 @@
package com.blankj.utilcode.util;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.design.widget.Snackbar;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import com.google.android.material.snackbar.Snackbar;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
index b8d9d53aed..4d49451ec0 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
@@ -14,14 +14,14 @@
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
import android.text.Layout;
import android.text.Layout.Alignment;
import android.text.SpannableStringBuilder;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
index c3254e3d32..70f0defe50 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
@@ -1,8 +1,8 @@
package com.blankj.utilcode.util;
import android.content.res.Resources;
-import android.support.annotation.ArrayRes;
-import android.support.annotation.StringRes;
+import androidx.annotation.ArrayRes;
+import androidx.annotation.StringRes;
/**
*
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
index 0545a27fa0..19de94ca33 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
@@ -2,10 +2,11 @@
import android.os.Handler;
import android.os.Looper;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
import android.util.Log;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
index adaa920474..a5286b0fbe 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
@@ -1,6 +1,6 @@
package com.blankj.utilcode.util;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import com.blankj.utilcode.constant.TimeConstants;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
index 150425cdba..0dd47cfa3e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
@@ -12,11 +12,11 @@
import android.os.Build;
import android.os.Handler;
import android.os.Message;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.StringRes;
-import android.support.v4.app.NotificationManagerCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.StringRes;
+import androidx.core.app.NotificationManagerCompat;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
index 9ad408912a..20fdc39b81 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
@@ -8,12 +8,14 @@
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
-import android.support.annotation.NonNull;
-import android.support.v4.content.FileProvider;
+import android.text.TextUtils;
import android.util.Log;
import java.io.File;
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
+
/**
*
* author: Blankj
@@ -75,12 +77,19 @@ public static File uri2File(@NonNull final Uri uri) {
Log.d("UriUtils", uri.toString() + " parse failed. -> 1");
return null;
} else if ("com.android.providers.downloads.documents".equals(authority)) {
- final String id = DocumentsContract.getDocumentId(uri);
- final Uri contentUri = ContentUris.withAppendedId(
- Uri.parse("content://downloads/public_downloads"),
- Long.valueOf(id)
- );
- return getFileFromUri(contentUri, 2);
+ String id = DocumentsContract.getDocumentId(uri);
+ if (!TextUtils.isEmpty(id)) {
+ if (id.startsWith("raw:")) {
+ return new File(id.substring(4));
+ }
+ final Uri contentUri = ContentUris.withAppendedId(
+ Uri.parse(Environment.DIRECTORY_DOWNLOADS),
+ Long.valueOf(id)
+ );
+ return getFileFromUri(contentUri, 2);
+ }
+ Log.d("UriUtils", uri.toString() + " parse failed. -> 3");
+ return null;
} else if ("com.android.providers.media.documents".equals(authority)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
index d0c98afc96..1992a2c902 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
@@ -13,13 +13,14 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
-import android.support.v4.content.FileProvider;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
+import androidx.core.content.FileProvider;
+
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
index a57bbb8241..622d657817 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
@@ -2,7 +2,7 @@
import android.content.Context;
import android.os.Vibrator;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
import static android.Manifest.permission.VIBRATE;
diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
index 85bc9d8ac2..2dadedff8c 100644
--- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
+++ b/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
@@ -1,8 +1,5 @@
package com.blankj.utilcode.util;
-
-import android.support.annotation.NonNull;
-
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@@ -29,7 +26,7 @@ public BaseTest() {
ShadowLog.stream = System.out;
ThreadUtils.setDeliver(new Executor() {
@Override
- public void execute(@NonNull Runnable command) {
+ public void execute(Runnable command) {
command.run();
}
});
@@ -201,8 +198,8 @@ public void onFail(Throwable t) {
static class Person implements Comparable {
String name;
- int age;
- int time;
+ int age;
+ int time;
public Person(String name) {
this.name = name;
@@ -220,7 +217,7 @@ public String toString() {
}
@Override
- public int compareTo(@NonNull Person o) {
+ public int compareTo(Person o) {
int res = o.age - age;
if (res != 0) {
return res;
diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
index a0203f78fc..ed12c24d8d 100644
--- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
+++ b/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
@@ -1,7 +1,5 @@
package com.blankj.utilcode.util;
-import android.support.v4.util.LongSparseArray;
-import android.support.v4.util.SimpleArrayMap;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.SparseIntArray;
@@ -12,6 +10,9 @@
import java.util.HashMap;
import java.util.LinkedList;
+import androidx.collection.LongSparseArray;
+import androidx.collection.SimpleArrayMap;
+
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
diff --git a/utilcode/pkg/build.gradle b/utilcode/pkg/build.gradle
index 9fe360a5dd..881637b34a 100644
--- a/utilcode/pkg/build.gradle
+++ b/utilcode/pkg/build.gradle
@@ -4,5 +4,5 @@ apply {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- api project(':lib:base')
+ api gradle.ext.dep.lib_base
}
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
index e784f98401..9982c948b7 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
@@ -6,7 +6,7 @@ import android.graphics.Bitmap
import android.graphics.drawable.BitmapDrawable
import android.os.Build
import android.os.Bundle
-import android.support.v4.app.ActivityOptionsCompat
+import androidx.core.app.ActivityOptionsCompat
import android.view.View
import android.view.Window
import com.blankj.lib.base.BaseTitleActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
index 0c63773639..abf0151bbc 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
@@ -2,7 +2,7 @@ package com.blankj.utilcode.pkg.feature.activity
import android.os.Build
import android.os.Bundle
-import android.support.v4.app.ActivityCompat
+import androidx.core.app.ActivityCompat
import android.view.View
import android.view.Window
import com.blankj.lib.base.BaseTitleActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
index d4f0d60530..fc8020b3e5 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
@@ -3,10 +3,10 @@ package com.blankj.utilcode.pkg.feature.bar
import android.content.Context
import android.content.Intent
import android.os.Bundle
-import android.support.design.widget.BottomNavigationView
-import android.support.v4.app.Fragment
-import android.support.v4.app.FragmentPagerAdapter
-import android.support.v4.view.ViewPager
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentPagerAdapter
+import androidx.viewpager.widget.ViewPager
import android.view.View
import com.blankj.lib.base.BaseActivity
import com.blankj.utilcode.pkg.R
@@ -37,7 +37,7 @@ class BarStatusFragmentActivity : BaseActivity() {
R.id.barStatusFragmentNavigationCustom
)
- private val mFragmentList = ArrayList()
+ private val mFragmentList = ArrayList()
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener l@{ item ->
when (item.itemId) {
@@ -78,8 +78,8 @@ class BarStatusFragmentActivity : BaseActivity() {
mFragmentList.add(BarStatusCustomFragment.newInstance())
barStatusFragmentVp.offscreenPageLimit = 3
- barStatusFragmentVp.adapter = object : FragmentPagerAdapter(supportFragmentManager) {
- override fun getItem(position: Int): Fragment {
+ barStatusFragmentVp.adapter = object : androidx.fragment.app.FragmentPagerAdapter(supportFragmentManager) {
+ override fun getItem(position: Int): androidx.fragment.app.Fragment {
return mFragmentList[position]
}
@@ -88,7 +88,7 @@ class BarStatusFragmentActivity : BaseActivity() {
}
}
- barStatusFragmentVp.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ barStatusFragmentVp.addOnPageChangeListener(object : androidx.viewpager.widget.ViewPager.OnPageChangeListener {
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
override fun onPageSelected(position: Int) {
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
index ada9dd0d10..86972c449d 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
@@ -2,8 +2,8 @@ package com.blankj.utilcode.pkg.feature.fragment
import android.os.Build
import android.os.Bundle
-import android.support.annotation.RequiresApi
-import android.support.v4.app.Fragment
+import androidx.annotation.RequiresApi
+import androidx.fragment.app.Fragment
import android.transition.*
import android.view.View
import com.blankj.lib.base.BaseLazyFragment
@@ -128,7 +128,7 @@ class ContainerFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener
}
}
- private fun addSharedElement(fragment: Fragment): Fragment {
+ private fun addSharedElement(fragment: androidx.fragment.app.Fragment): androidx.fragment.app.Fragment {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
fragment.sharedElementEnterTransition = DetailTransition()
fragment.enterTransition = Fade()
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
index 446271b366..b18a2e236b 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
@@ -4,8 +4,8 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.PersistableBundle
-import android.support.design.widget.BottomNavigationView
-import android.support.v4.app.Fragment
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import androidx.fragment.app.Fragment
import android.view.View
import com.blankj.lib.base.BaseActivity
import com.blankj.utilcode.pkg.R
@@ -29,7 +29,7 @@ class FragmentActivity : BaseActivity() {
}
}
- private val mFragments = arrayListOf()
+ private val mFragments = arrayListOf()
private var curIndex: Int = 0
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
index 0e092e0062..2c6656f220 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
@@ -6,12 +6,12 @@ import android.graphics.Bitmap
import android.graphics.Color
import android.os.Build
import android.os.Bundle
-import android.support.annotation.StringRes
-import android.support.v7.widget.LinearLayoutManager
import android.view.View
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
+import androidx.annotation.StringRes
+import androidx.recyclerview.widget.LinearLayoutManager
import com.blankj.lib.base.BaseTaskActivity
import com.blankj.lib.base.rv.BaseAdapter
import com.blankj.lib.base.rv.BaseCell
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
index a0ea36d528..cd1c1b0d99 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
@@ -4,7 +4,7 @@ import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
-import android.support.annotation.StringRes
+import androidx.annotation.StringRes
import android.text.SpannableStringBuilder
import android.view.View
import android.view.ViewGroup
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
index d84ced168c..202069ed61 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
@@ -5,7 +5,7 @@ import android.content.Context
import android.content.Intent
import android.graphics.*
import android.os.Bundle
-import android.support.annotation.ColorInt
+import androidx.annotation.ColorInt
import android.text.Layout
import android.text.SpannableStringBuilder
import android.text.TextPaint
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
index 314ba33d59..458ecbb3fb 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
@@ -2,7 +2,7 @@ package com.blankj.utilcode.pkg.feature.toast
import android.os.Handler
import android.os.Looper
-import android.support.annotation.StringRes
+import androidx.annotation.StringRes
import android.widget.TextView
import android.widget.Toast
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
index 51c9e53774..47f91e826e 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
@@ -4,7 +4,7 @@ import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
-import android.support.v4.content.ContextCompat
+import androidx.core.content.ContextCompat
import android.view.Gravity
import android.view.View
import com.blankj.lib.base.BaseTitleActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
index 344a69e448..a495a13013 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
@@ -3,7 +3,6 @@ package com.blankj.utilcode.pkg.helper
import android.app.Dialog
import android.graphics.Bitmap
import android.graphics.drawable.ColorDrawable
-import android.support.v7.app.AlertDialog
import android.text.method.ScrollingMovementMethod
import android.view.Gravity
import android.view.LayoutInflater
@@ -12,9 +11,9 @@ import android.widget.Button
import android.widget.EditText
import android.widget.ImageView
import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
import com.blankj.utilcode.pkg.R
import com.blankj.utilcode.util.*
-import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldRequest
/**
* ```
@@ -26,7 +25,7 @@ import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldReques
*/
object DialogHelper {
- fun showRationaleDialog(shouldRequest: ShouldRequest) {
+ fun showRationaleDialog(shouldRequest: PermissionUtils.OnRationaleListener.ShouldRequest) {
val topActivity = ActivityUtils.getTopActivity()
AlertDialog.Builder(topActivity)
.setTitle(android.R.string.dialog_alert_title)
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
index 792ae5672e..9be8749952 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
@@ -1,5 +1,5 @@
-
-
+
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
index ccc88dddb6..1522b0741b 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
@@ -8,7 +8,7 @@
android:fillViewport="true"
tools:context=".feature.adaptScreen.AdaptCloseActivity">
-
@@ -43,6 +43,6 @@
android:textSize="30pt"
app:layout_constraintTop_toBottomOf="@id/adaptScreenCloseAdaptDpTv" />
-
+
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
index 350921b04d..75fa87e8e5 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
@@ -1,13 +1,12 @@
-
-
@@ -94,6 +93,6 @@
android:textSize="30pt" />
-
+
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
index 121415e1b6..dd9f9f40c7 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
@@ -8,7 +8,7 @@
android:fillViewport="true"
tools:context=".feature.adaptScreen.AdaptWidthActivity">
-
@@ -149,6 +149,6 @@
-
+
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml b/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
index 3ce196004b..bd6e43e7a7 100644
--- a/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
@@ -6,7 +6,7 @@
android:layout_height="match_parent"
android:orientation="vertical">
-
-
-
-
Date: Sat, 29 Jun 2019 19:59:42 +0800
Subject: [PATCH 05/45] 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/45] 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/45] 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: Blankj
Date: Tue, 7 Apr 2020 00:11:37 +0800
Subject: [PATCH 08/45] 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/45] 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
Date: Tue, 5 May 2020 02:24:34 +0800
Subject: [PATCH 10/45] 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/45] 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/45] 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;
/**
*
diff --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;
+
/**
*
* 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;
+
/**
*
* author: Blankj
From f14b404543d17cdba6680a78a15afdf7570a9248 Mon Sep 17 00:00:00 2001
From: jobs_xie
Date: Thu, 22 Apr 2021 10:46:19 +0800
Subject: [PATCH 13/45] 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 14/45] 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 15/45] 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 16/45] 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 17/45] 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 18/45] 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: caimengjie
Date: Thu, 13 May 2021 01:09:26 +0800
Subject: [PATCH 19/45] 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 20/45] 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: jikun2008
Date: Wed, 10 Nov 2021 16:52:17 +0800
Subject: [PATCH 21/45] =?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 22/45] 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 23/45] 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.Entry entry : 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 List commands) {
- 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?IMYnO`JhmPq7|LA_@Iz75S9h~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;2x9gYj59oFwG>?Leva43@e(z{mjm0b*@OAYLC`O9q|s+FQLOE
z!+*Y;%_0(6Sr<(cxE0c=lS&-FGBFGWd_R<5$vwHRJG=tB&Mi8@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^qj&|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`EAE1oAiY5Jgo=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)m77nKF68FggQ-l3iXlVZuM2BDrR8AQbK;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}XaRr0uL?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-i7nJw95F3iH&IX5hhy3CCV5y>mK4)&5aC*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@+92Q-Y6h)>@omP=9i~
zi`krLQK^!=@2BH?-R83DyFkejZkhHJqV%^}
zUa&K22zwz7b*@CQV6BQ9X*RB177VCVa{Z!Lf?*c~PwS~V3K{id1TB^WZh=aMqiws5)qWylK#^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)tYPjxTH5mAw#3n-*sOMVjpUrdnj1DBm4G!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}ZnlJLotYZCYKoL7YsQdLXZ!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=jfM1MdJP(v2fIrYTc{;e5;5gsp`}X8-!{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!02Qxfw-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(NHHCKRyu
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_YchYOak7oOzR|`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&
zBEmSq2jQ7#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#v3qubWALaUEAf@`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^2Yi$$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&wQPjRzg%pS1RO9}U0*C6fhUi&f#qoV`1{U<&mWKS<$oVFW>{&*$6)r6Rx)F4W
zdUL8Mm_qNk6ycFVkI5F?V+cYFUch$92|8O^-Z1JC94GU+Nuk
zA#n3Z1q4<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=zeo9(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}qPnM4FY9zFP(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`6Oa2Qy0O5JG>O`zZ-p7vBGh!MxS;}}h6(96Wp`dci3DY?|B@1p8fVsDf$|0S
zfE{WL5g3<9&{~yygYyR?jK!>;eZ2L#tpL2)H#89*b
zycE?VViXbH7M}m33{#tI69PUPD=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
zPC>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*33TGBPzs{OMoV2i+(P6K|95UwSj$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=idd81|{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?M7NCssa?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$NFvd4eUtK?%zgmB;_I&p`)YtpN`2Im(?jPN<(7Ua_ZWJRF(CChv`(gHfWodK%+joy>8Vaa;H1w
zIJ?!kA|x7V;4U1BNr(UrhfvjPii7YENLIm`LtnL9Sx
z5E9TYaILoB2nSwDe|BVmrpLT43*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-R9Tw!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*el9E3Q7fVRKw$EIlb&T0fG~fDJZL7Qn8*a5{)vUblM)*)NTLf1ll$
zpQ^(0pkSTol`|t~`Y4wzl;%NRn>689mpQrW=SJ*rB;7}w
zVHB?&sVa2%-q@ANA~v)FXb`?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$6BD(`#IR0PrITIV^~O{uo=)+Bi$oHA$G*
zH0a^PRoeYD3jU_k%!rTFh)v#@cq`P3_y=6D(M~GBud;4
zCk$LuxPgJ5=8OEDlnU!R^4QDM4jGni}~C
zy;t2E%Qy;A^bz_5HSb5pq{x{g59U!ReE?6ULOw58DJcJy;H?g*ofr(X7+8wF;*3{rx>j&27Syl6A~{|w{pHb
zeFgu0E>OC81~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!tzisLl${42Y=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
zzg8skdHNsfgkf8A7PWs;YBz_S$S%!hWQ@G>guCgS--P!!Ui9#%GQ#Jh?s!U-4)7ozR?i>JXHU$|
zg0^vuti{!=N|kWorZNFX`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!I40}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_tNQkPU%y<`rj
zMC}lD<93=Oj+D6Y2GNMZb|m$^)RVdi`&0*}mxNy0BW#0iq!GGN2BGx5I0LS>I|4op
z(6^xWULBr=QRpbxIJDK~?h;K#>LwQI4N<8V?%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?sau&+(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$&Rlj0UX}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^DmTTLB11byYvAO;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+Qwbvgk?Zmkn9%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%qGF=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$&>mWJHZzHt0Jje%BQFxEV}C00{|qo5_Hz7c!FlJ|T(JD^0*yjkDm
zL}4S%JU(mBV|3G2jVWU>DX413;d+h0C3{g3v|U8cUj`tZL37Sf@1d*jpwt4^B)`bK
zZdlwnPB6jfc7rIKsldW81$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-ZQmjtReWu-UOPu^G}|k=o=;ffg>8|Z*qev7qS&oqA7%Z{4Ezb!t$f3&
z^NuT8CSNp`VHScyikB1YO{BgaBVJR&>dNIEEBwYkfOkWN;(I8CJ|vIfD}STN
z{097)R9iC@6($s$#dsb*4BXBx7
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^<)!Jjqc
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)1xBdWkZ47=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_&XQ2BgGfV}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
zdfAUyd({^*>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*QK`{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`g8sXvIf?|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@tdM3VTTuXOCbWqye9va6+ZSeF0eh}
zYb^ct&4lQTfNZ3M3(9?{;s><(zq%hza7zcxlZ+`F8J*>%4wq8s$cC6Z=F@
zhbvdv;n$%vEI$B~B)Q&LkTse!8Vt};7Szv2@YB!_Ztp@JA>rc(#R1`EZcIdE+JiI%
zC2!hgYt+~@%xU?;ir+g92W`*j
z3`@S;I6@2rO28zqj&SWO^CvA5MeNEhBF+8-U0O0Q1Co=I^WvPl%#}UFDMBVl
z5iXV@d|`QTa$>iw;m$^}6JeuW
zjr;{)S2TfK0Q%xgHvONSJb#NA|LOmg{U=k;R?&1tQbylMEY4<1*9mJh&(qo`G#9{X
zYRs)#*PtEHnO;PV0G~6G`ca%tpKgb6<@)xc^SQY58lTo*S$*sv5w7bG+8YLKYU`8{
zNBVlvgaDu7icvyf;N&%42z2L4(rR<*Jd48X8Jnw
zN>!R$%MZ@~Xu9jH?$2Se&I|ZcW>!26BJP?H7og0hT(S`nXh6{sR36O^7%v=31T+eL
z)~BeC)15v>1m#(LN>OEwYFG?TE0_z)MrT%3SkMBBjvCd6!uD+03Jz#!s#Y~b1jf>S
z&Rz5&8rbLj5!Y;(Hx|UY(2aw~W(8!3q3D}LRE%XX(@h5TnP@PhDoLVQx;6|r^+Bvs
zaR55cR%Db9hZ<<|I%dDkone+8Sq7dqPOMnGoHk~-R*#a8w$c)`>4U`k+o?2|E>Sd4
zZ0ZVT{95pY$qKJ54K}3JB!(WcES>F+x56oJBRg))tMJ^#Qc(2rVcd5add=Us6vpBNkIg9b#ulk%!XBU
zV^fH1uY(rGIAiFew|z#MM!qsVv%ZNb#why9%9In4Kj-hDYtMdirWLFzn~de!nnH(V
zv0>I3;X#N)bo1$dFzqo(tzmvqNUKraAz~?)OSv42MeM!OYu;2VKn2-s7#fucX`|l~
zplxtG1Pgk#(;V=`P_PZ`MV{Bt4$a7;aLvG@KQo%E=;7ZO&Ws-r@XL+AhnPn>PAKc7
zQ_iQ4mXa-a4)QS>cJzt_j;AjuVCp8g^|dIV=DI0>v-f_|w5YWAX61lNBjZEZax3aV
znher(j)f+a9_s8n#|u=kj0(unR1P-*L7`{F28xv054|#DMh}q=@rs@-fbyf(2+52L
zN>hn3v!I~%jfOV=j(@xLOsl$Jv-+yR5{3pX)$rIdDarl7(C3)})P`QoHN|y<<2n;`
zJ0UrF=Zv}d=F(Uj}~Yv9(@1pqUSRa5_bB*AvQ|Z-6YZ*N%p(U
z<;Bpqr9iEBe^LFF!t{1UnRtaH-9=@p35fMQJ~1^&)(2D|^&z?m
z855r&diVS6}jmt2)A7LZDiv;&Ys6@W5P{JHY!!n7W
zvj3(2{1R9Y=TJ|{^2DK&be*ZaMiRHw>WVI^701fC)
zAp1?8?oiU%Faj?Qhou6S^d11_7@tEK-XQ~%q!!7hha-Im^>NcRF7OH7s{IO7arZQ{
zE8n?2><7*!*lH}~usWPWZ}2&M+)VQo7C!AWJSQc>8g_r-P`N&uybK5)p$5_o;+58Q
z-Ux2l<3i|hxqqur*qAfHq=)?GDchq}ShV#m6&w|mi~ar~`EO_S=fb~<}66U>5i7$H#m~wR;L~4yHL2R&;L*u7-SPdHxLS&Iy76q$2j#Pe)$WulRiCICG*t+
zeehM8`!{**KRL{Q{8WCEFLXu3+`-XF(b?c1Z~wg?c0lD!21y?NLq?O$STk3NzmrHM
zsCgQS5I+nxDH0iyU;KKjzS24GJmG?{D`08|N-v+Egy92lBku)fnAM<}tELA_U`)xKYb=pq|hejMCT1-rg0Edt6(*E9l9WCKI1a=@c99swp2t6Tx
zFHy`8Hb#iXS(8c>F~({`NV@F4w0lu5X;MH6I$&|h*qfx{~DJ*h5e|61t1QP}tZEIcjC%!Fa)omJTfpX%aI+OD*Y(l|xc0$1Zip;4rx;
zV=qI!5tSuXG7h?jLR)pBEx!B15HCoVycD&Z2dlqN*MFQDb!|yi0j~JciNC!>){~
zQQgmZvc}0l$XB0VIWdg&ShDTbTkArryp3x)T8%ulR;Z?6APx{JZyUm=LC-ACkFm`6
z(x7zm5ULIU-xGi*V6x|eF~CN`PUM%`!4S;Uv_J>b#&OT9IT=jx5#nydC4=0htcDme
zDUH*Hk-`Jsa>&Z<7zJ{K4AZE1BVW%zk&MZ^lHyj8mWmk|Pq8WwHROz0Kwj-AFqvR)H2gDN*6dzVk>R3@_CV
zw3Z@6s^73xW)XY->AFwUlk^4Q=hXE;ckW=|RcZFchyOM0vqBW{2l*QR#v^SZNnT6j
zZv|?ZO1-C_wLWVuYORQryj29JA;
zS4BsxfVl@X!W{!2GkG9fL4}58Srv{$-GYngg>JuHz!7ZPQbfIQr4@6ZC4T$`;Vr@t
zD#-uJ8A!kSM*gA&^6yWi|F}&59^*Rx{qn3z{(JYxrzg!X2b#uGd>&O0e=0k_2*N?3
zYXV{v={ONL{rW~z_FtFj7kSSJZ?s);LL@W&aND7blR8rlvkAb48RwJZlOHA~t~RfC
zOD%ZcOzhYEV&s9%qns0&ste5U!^MFWYn`Od()5RwIz6%@Ek+Pn`s79unJY-$7n-Uf
z&eUYvtd)f7h7zG_hDiFC!psCg#q&0c=GHKOik~$$>$Fw*k
z;G)HS$IR)Cu72HH|JjeeauX;U6IgZ_IfxFCE_bGPAU25$!j8Etsl0Rk@R`$jXuHo8
z3Hhj-rTR$Gq(x)4Tu6;6rHQhoCvL4Q+h0Y+@Zdt=KTb0~wj7-(Z9G%J+aQu05@k6JHeCC|YRFWGdDCV}ja;-yl^9<`>f=AwOqML1a~*
z9@cQYb?!+Fmkf}9VQrL8$uyq8k(r8)#;##xG9lJ-B)Fg@15&To(@xgk9SP*bkHlxiy8I*wJQylh(+9X~H-Is!g&C!q*eIYuhl&fS&|w)dAzXBdGJ&Mp$+8D|
zZaD<+RtjI90QT{R0YLk6_dm=GfCg>7;$
zlyLsNYf@MfLH<}ott5)t2CXiQos
zFLt^`%ygB2Vy^I$W3J_Rt4olRn~Gh}AW(`F@LsUN{d$sR%bU&3;rsD=2KCL+4c`zv
zlI%D>9-)U&R3;>d1Vdd5b{DeR!HXDm44Vq*u?`wziLLsFUEp4El;*S0;I~D#TgG0s
zBXYZS{o|Hy0A?LVNS)V4c_CFwyYj-E#)4SQq9yaf`Y2Yhk7yHSdos~|fImZG5_3~~o<@jTOH@Mc7`*xn-aO5F
zyFT-|LBsm(NbWkL^oB-Nd31djBaYebhIGXhsJyn~`SQ6_4>{fqIjRp#Vb|~+Qi}Mdz!Zsw=
zz?5L%F{c{;Cv3Q8ab>dsHp)z`DEKHf%e9sT(aE6$az?A}3P`Lm(~W$8Jr=;d8#?dm_cmv>2673NqAOenze
z=&QW`?TQAu5~LzFLJvaJ
zaBU3mQFtl5z?4XQDBWNPaH4y)McRpX#$(3o5Nx@hVoOYOL&-P+gqS1cQ~J;~1roGH
zVzi46?FaI@w-MJ0Y7BuAg*3;D%?<_OGsB3)c|^s3A{UoAOLP8scn`!5?MFa|^cTvq
z#%bYG3m3UO9(sH@LyK9-LSnlVcm#5^NRs9BXFtRN9kBY2mPO|@b7K#IH{B{=0W06)
zl|s#cIYcreZ5p3j>@Ly@35wr-q8z5f9=R42IsII=->1stLo@Q%VooDvg@*K(H@*5g
zUPS&cM~k4oqp`S+qp^*nxzm^0mg3h8ppEHQ@cXyQ=YKV-6)FB*$KCa{POe2^EHr{J
zOxcVd)s3Mzs8m`iV?MSp=qV59blW9$+$P+2;PZDRUD~sr*CQUr&EDiCSfH@wuHez+
z`d5p(r;I7D@8>nbZ&DVhT6qe+accH;<}q$8Nzz|d1twqW?UV%FMP4Y@NQ`3(+5*i8
zP9*yIMP7frrneG3M9
zf>GsjA!O#Bifr5np-H~9lR(>#9vhE6W-r`EjjeQ_wdWp+rt{{L5t5t(Ho|4O24@}4
z_^=_CkbI`3;~sXTnnsv=^b3J}`;IYyvb1gM>#J9{$l#Zd*W!;meMn&yXO7x`Epx_Y
zm-1wlu~@Ii_7D}>%tzlXW;zQT=uQXSG@t$<#6-W*^vy7Vr2TCpnix@7