Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiaoxuan_i809
AndroidUtilCode
提交
08ddfce5
A
AndroidUtilCode
项目概览
xiaoxuan_i809
/
AndroidUtilCode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
AndroidUtilCode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
08ddfce5
编写于
6月 03, 2019
作者:
B
Blankj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
see 06/03 log
上级
fdad02a3
变更
50
隐藏空白更改
内联
并排
Showing
50 changed file
with
642 addition
and
436 deletion
+642
-436
CHANGELOG.md
CHANGELOG.md
+1
-0
build.gradle
build.gradle
+9
-9
bus-gradle-plugin/CHANGELOG.md
bus-gradle-plugin/CHANGELOG.md
+3
-0
bus-gradle-plugin/build.gradle
bus-gradle-plugin/build.gradle
+13
-4
bus-gradle-plugin/com/blankj/bus/BusUtils.class
bus-gradle-plugin/com/blankj/bus/BusUtils.class
+0
-0
bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransform.groovy
...e-plugin/src/main/java/com/blankj/bus/BusTransform.groovy
+3
-1
bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransformAsm.groovy
...lugin/src/main/java/com/blankj/bus/BusTransformAsm.groovy
+3
-1
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar
...gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar
+0
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.md5
...le-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.md5
+1
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.sha1
...e-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.sha1
+1
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar
...s-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar
+0
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.md5
...adle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.md5
+1
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.sha1
...dle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.sha1
+1
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar
...s-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar
+0
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.md5
...adle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.md5
+1
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.sha1
...dle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.sha1
+1
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar
...lankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar
+0
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar.md5
...j/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar.md5
+1
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar.sha1
.../bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar.sha1
+1
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom
...lankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom
+40
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.md5
...j/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.md5
+1
-0
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.sha1
.../bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.sha1
+1
-0
busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml
busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml
+12
-0
busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.md5
busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.md5
+1
-0
busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.sha1
...aven/com/blankj/bus-gradle-plugin/maven-metadata.xml.sha1
+1
-0
gradle/config/config.gradle
gradle/config/config.gradle
+104
-145
gradle/config/configApp.gradle
gradle/config/configApp.gradle
+4
-4
gradle/config/configBuild.gradle
gradle/config/configBuild.gradle
+93
-0
gradle/upload/localMavenUpload.gradle
gradle/upload/localMavenUpload.gradle
+0
-7
gradle/util/utils.gradle
gradle/util/utils.gradle
+132
-0
lib/base/build.gradle
lib/base/build.gradle
+4
-4
lib/base/src/main/res/anim/slide_in_right.xml
lib/base/src/main/res/anim/slide_in_right.xml
+1
-1
lib/base/src/main/res/values/styles.xml
lib/base/src/main/res/values/styles.xml
+4
-0
settings.gradle
settings.gradle
+1
-1
subutil/lib/build.gradle
subutil/lib/build.gradle
+2
-2
subutil/lib/src/test/java/com/blankj/subutil/util/http/nodeServer/node_modules/moment/moment.d.ts
...util/util/http/nodeServer/node_modules/moment/moment.d.ts
+1
-1
utilcode/README-CN.md
utilcode/README-CN.md
+1
-0
utilcode/README-STATIC-BUS.md
utilcode/README-STATIC-BUS.md
+2
-2
utilcode/lib/build.gradle
utilcode/lib/build.gradle
+3
-3
utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
.../lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
+57
-48
utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
...c/main/java/com/blankj/utilcode/util/PermissionUtils.java
+11
-32
utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
...src/main/java/com/blankj/utilcode/util/ResourceUtils.java
+90
-0
utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
...lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
+9
-2
utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
...ib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
+10
-16
utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
...ode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
+12
-13
utilcode/pkg/src/main/AndroidManifest.xml
utilcode/pkg/src/main/AndroidManifest.xml
+1
-1
utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt
...j/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt
+3
-3
utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AppStoreUtils.java
...lankj/utilcode/pkg/feature/adaptScreen/AppStoreUtils.java
+0
-128
utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt
...nkj/utilcode/pkg/feature/permission/PermissionActivity.kt
+1
-2
utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
.../main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
+0
-6
未找到文件。
CHANGELOG.md
浏览文件 @
08ddfce5
*
`19/06/03`
[fix] Refactoring framework. Publish v1.24.0.
*
`19/04/25`
[fix] LogUtils delete due log.
*
`19/04/24`
[upd] The swipe panel.
*
`19/03/17`
[fix] The ugly UI.
...
...
build.gradle
浏览文件 @
08ddfce5
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript
{
repositories
{
if
(!
gradle
.
ext
.
bus
.
isPublish
)
{
if
(
gradle
.
ext
.
bus
.
isDebug
)
{
maven
()
{
url
uri
(
new
File
(
project
.
rootDir
,
"maven"
))
}
if
(
gradle
.
ext
.
depConfig
.
plugin_bus
.
useLocal
)
{
maven
()
{
// use for debug plugin local
url
new
File
(
"busMaven"
)
}
}
google
()
...
...
@@ -13,14 +12,15 @@ buildscript {
}
dependencies
{
for
(
plugin
in
gradle
.
ext
.
dep
.
plugin
)
{
if
(
gradle
.
ext
.
bus
.
isPublish
&&
plugin
.
contains
(
"com.blankj:bus-gradle-plugin:"
))
{
continue
// 根据 config 来 configClasspath 各 plugin
gradle
.
ext
.
depConfig
.
each
{
name
,
config
->
if
(
name
.
startsWith
(
"plugin_"
)
&&
config
.
isApply
)
{
classpath
config
.
remotePath
}
classpath
plugin
}
}
}
allprojects
{
repositories
{
google
()
...
...
bus-gradle-plugin/CHANGELOG.md
浏览文件 @
08ddfce5
# Change Log
## v1.8
兼容最新工程组件化
## v1.7
兼容 utilcodex
...
...
bus-gradle-plugin/build.gradle
浏览文件 @
08ddfce5
...
...
@@ -6,9 +6,8 @@ apply {
plugin
"groovy"
plugin
"java-gradle-plugin"
from
"${rootDir.path}/gradle/upload/pluginPublish.gradle"
if
(
gradle
.
ext
.
bus
.
isDebug
)
{
if
(
gradle
.
ext
.
depConfig
.
plugin_bus
.
useLocal
)
{
plugin
"maven"
from
"${rootDir.path}/gradle/upload/localMavenUpload.gradle"
}
else
{
plugin
"com.github.dcendents.android-maven"
plugin
"com.jfrog.bintray"
...
...
@@ -51,8 +50,18 @@ sourceSets {
}
}
group
=
gradle
.
ext
.
bus
.
group
version
=
gradle
.
ext
.
bus
.
version
group
=
gradle
.
ext
.
depConfig
.
plugin_bus
.
groupId
version
=
gradle
.
ext
.
depConfig
.
plugin_bus
.
version
if
(
gradle
.
ext
.
depConfig
.
plugin_bus
.
useLocal
)
{
uploadArchives
{
repositories
{
mavenDeployer
{
repository
(
url:
uri
(
new
File
(
project
.
rootDir
,
"busMaven"
)))
}
}
}
}
//./gradlew bus-gradle-plugin:bintrayUpload
//./gradlew publishPlugins
bus-gradle-plugin/com/blankj/bus/BusUtils.class
已删除
100644 → 0
浏览文件 @
fdad02a3
文件已删除
bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransform.groovy
浏览文件 @
08ddfce5
...
...
@@ -84,7 +84,9 @@ class BusTransform extends Transform {
)
FileUtils
.
copyFile
(
jar
,
dest
)
if
(
jarName
.
contains
(
"utilcode"
))
{
if
(
jarName
.
startsWith
(
"com.blankj:utilcode:"
)
||
jarName
.
startsWith
(
"com.blankj:utilcodex:"
)
||
jarName
.
equals
(
":utilcode:lib"
))
{
busScan
.
busJar
=
dest
LogUtils
.
l
(
"bus jar: $jarName [$dest]"
)
return
...
...
bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransformAsm.groovy
浏览文件 @
08ddfce5
...
...
@@ -114,7 +114,9 @@ class BusTransformAsm extends Transform {
)
FileUtils
.
copyFile
(
jar
,
dest
)
if
(
jarName
.
contains
(
"utilcode"
))
{
if
(
jarName
.
startsWith
(
"com.blankj:utilcode:"
)
||
jarName
.
startsWith
(
"com.blankj:utilcodex:"
)
||
jarName
.
equals
(
":utilcode:lib"
))
{
busScan
.
busJar
=
dest
LogUtils
.
l
(
"bus jar: $jarName [$dest]"
)
return
...
...
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar
0 → 100644
浏览文件 @
08ddfce5
文件已添加
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.md5
0 → 100644
浏览文件 @
08ddfce5
f066bbc77d59ce6c1379873e5a89715e
\ No newline at end of file
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-groovydoc.jar.sha1
0 → 100644
浏览文件 @
08ddfce5
27634ae190af35cf8cdd4acb5a0450a5f76d85e9
\ No newline at end of file
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar
0 → 100644
浏览文件 @
08ddfce5
文件已添加
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.md5
0 → 100644
浏览文件 @
08ddfce5
d1f3a078f25631446d7f61a2b3f13b87
\ No newline at end of file
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-javadoc.jar.sha1
0 → 100644
浏览文件 @
08ddfce5
46debaa90519ccdb6aabb7034d5ac1a43c466c47
\ No newline at end of file
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar
0 → 100644
浏览文件 @
08ddfce5
文件已添加
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.md5
0 → 100644
浏览文件 @
08ddfce5
704f0fc2f320ad82e43447dcac14050d
\ No newline at end of file
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0-sources.jar.sha1
0 → 100644
浏览文件 @
08ddfce5
456c915220fe181bed8c67bef1568f70e7b0f1d1
\ No newline at end of file
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar
0 → 100644
浏览文件 @
08ddfce5
文件已添加
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar.md5
0 → 100644
浏览文件 @
08ddfce5
55bd3f4ad26b78c15c747c22a0633f4d
\ No newline at end of file
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.jar.sha1
0 → 100644
浏览文件 @
08ddfce5
1b448aa58fcd10792e28db88c2a6813207dbee2e
\ No newline at end of file
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom
0 → 100644
浏览文件 @
08ddfce5
<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.blankj
</groupId>
<artifactId>
bus-gradle-plugin
</artifactId>
<version>
1.7.0
</version>
<dependencies>
<dependency>
<groupId>
com.android.tools.build
</groupId>
<artifactId>
gradle
</artifactId>
<version>
3.4.0
</version>
<scope>
runtime
</scope>
</dependency>
<dependency>
<groupId>
com.android.tools.build
</groupId>
<artifactId>
gradle-api
</artifactId>
<version>
3.4.0
</version>
<scope>
runtime
</scope>
</dependency>
<dependency>
<groupId>
org.javassist
</groupId>
<artifactId>
javassist
</artifactId>
<version>
3.24.0-GA
</version>
<scope>
runtime
</scope>
</dependency>
<dependency>
<groupId>
commons-io
</groupId>
<artifactId>
commons-io
</artifactId>
<version>
2.5
</version>
<scope>
runtime
</scope>
</dependency>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>
4.12
</version>
<scope>
test
</scope>
</dependency>
</dependencies>
</project>
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.md5
0 → 100644
浏览文件 @
08ddfce5
03dd0e6302a92e8849d59866a2b2bf85
\ No newline at end of file
busMaven/com/blankj/bus-gradle-plugin/1.7.0/bus-gradle-plugin-1.7.0.pom.sha1
0 → 100644
浏览文件 @
08ddfce5
ce864f19c593951f14bc93fd812fe4251cad7098
\ No newline at end of file
busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml
0 → 100644
浏览文件 @
08ddfce5
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>
com.blankj
</groupId>
<artifactId>
bus-gradle-plugin
</artifactId>
<versioning>
<release>
1.7.0
</release>
<versions>
<version>
1.7.0
</version>
</versions>
<lastUpdated>
20190603071129
</lastUpdated>
</versioning>
</metadata>
busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.md5
0 → 100644
浏览文件 @
08ddfce5
88dc3791e85eb3ccba2f1bb9d71dccbb
\ No newline at end of file
busMaven/com/blankj/bus-gradle-plugin/maven-metadata.xml.sha1
0 → 100644
浏览文件 @
08ddfce5
3c87365d79cf58e5eecaa328aceab560914ecd78
\ No newline at end of file
gradle/config/config.gradle
浏览文件 @
08ddfce5
apply
from:
"${rootDir.path}/gradle/util/utils.gradle"
apply
from:
"${rootDir.path}/gradle/config/configBuild.gradle"
gradle
.
ext
{
applicationId
=
'com.blankj.androidutilcode'
...
...
@@ -7,182 +8,140 @@ gradle.ext {
compileSdkVersion
=
27
minSdkVersion
=
14
targetSdkVersion
=
27
versionCode
=
1
_023_008
versionName
=
'1.23.8'
// E.g. 1.9.72 => 1,009,072
bus
=
[
isPublish:
false
,
isDebug
:
true
,
version
:
'1.7'
,
group
:
'com.blankj'
]
versionCode
=
1
_024_000
versionName
=
'1.24.0'
// E.g. 1.9.72 => 1,009,072
// lib version
kotlin_version
=
'1.3.10'
support_version
=
'27.1.1'
leakcanary_version
=
'1.6.3'
dep
=
[
plugin
:
[
"com.android.tools.build:gradle:3.4.0"
,
"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
,
"com.github.dcendents:android-maven-gradle-plugin:2.1"
,
// 上传到 maven
"com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4"
,
// 上传到 bintray
"tech.harmonysoft:traute-gradle:1.1.10"
,
// 注解转非空判断
"com.blankj:bus-gradle-plugin:$bus.version"
,
// 组件化 Static Bus
],
// 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"
,
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:1.0.1"
,
swipe_panel
:
"com.blankj:swipe-panel:1.1"
,
gson
:
"com.google.code.gson:gson:2.8.2"
,
glide
:
"com.github.bumptech.glide:glide:4.7.1"
,
retrofit
:
"com.squareup.retrofit2:retrofit:2.4.0"
,
javassist
:
"org.javassist:javassist:3.24.0-GA"
,
commons_io
:
"commons-io:commons-io:2.5"
,
junit
:
"junit:junit:4.12"
,
robolectric
:
"org.robolectric:robolectric:4.2"
,
]
module
=
[
"buildSrc"
:
[
true
,
":buildSrc"
,
""
]
as
ModuleConfig
,
"bus-gradle-plugin"
:
[
true
,
":bus-gradle-plugin"
,
""
]
as
ModuleConfig
,
"launcher_app"
:
[
true
,
":launcher:app"
,
""
]
as
ModuleConfig
,
"launcher_pkg"
:
[
true
,
":launcher:pkg"
,
""
]
as
ModuleConfig
,
"lib_base"
:
[
true
,
":lib:base"
,
""
]
as
ModuleConfig
,
"subutil_app"
:
[
true
,
":subutil:app"
,
""
]
as
ModuleConfig
,
"subutil_lib"
:
[
true
,
":subutil:lib"
,
""
]
as
ModuleConfig
,
"subutil_pkg"
:
[
true
,
":subutil:pkg"
,
""
]
as
ModuleConfig
,
"utilcode_app"
:
[
true
,
":utilcode:app"
,
""
]
as
ModuleConfig
,
"utilcode_lib"
:
[
true
,
":utilcode:lib"
,
"com.blankj:utilcode:$versionName"
]
as
ModuleConfig
,
"utilcode_pkg"
:
[
true
,
":utilcode:pkg"
,
""
]
as
ModuleConfig
,
dep
=
[:]
depConfig
=
[
plugin_gradle
:
new
DepConfig
(
"com.android.tools.build:gradle:3.4.0"
),
plugin_kotlin
:
new
DepConfig
(
"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
),
plugin_maven
:
new
DepConfig
(
"com.github.dcendents:android-maven-gradle-plugin:2.1"
),
// 上传到 maven
plugin_bintray
:
new
DepConfig
(
"com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4"
),
// 上传到 bintray
plugin_traute
:
new
DepConfig
(
"tech.harmonysoft:traute-gradle:1.1.10"
),
// 注解转非空判断
plugin_bus
:
new
DepConfig
(
false
/*是否本地调试*/
,
""
,
"com.blankj:bus-gradle-plugin:1.8"
,
true
),
buildSrc
:
new
DepConfig
(
":buildSrc"
),
bus_gradle_plugin
:
new
DepConfig
(
":bus-gradle-plugin"
,
false
),
launcher_app
:
new
DepConfig
(
":launcher:app"
),
launcher_pkg
:
new
DepConfig
(
":launcher:pkg"
),
lib_base
:
new
DepConfig
(
":lib:base"
),
subutil_app
:
new
DepConfig
(
":subutil:app"
),
subutil_lib
:
new
DepConfig
(
":subutil:lib"
),
subutil_pkg
:
new
DepConfig
(
":subutil:pkg"
),
utilcode_app
:
new
DepConfig
(
":utilcode:app"
),
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_multidex
:
new
DepConfig
(
"com.android.support:multidex:1.0.2"
),
constraint
:
new
DepConfig
(
"com.android.support.constraint:constraint-layout:1.1.3"
),
kotlin
:
new
DepConfig
(
"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
),
leakcanary_android
:
new
DepConfig
(
"com.squareup.leakcanary:leakcanary-android:$leakcanary_version"
),
leakcanary_android_no_op
:
new
DepConfig
(
"com.squareup.leakcanary:leakcanary-android-no-op:$leakcanary_version"
),
leakcanary_support_fragment:
new
DepConfig
(
"com.squareup.leakcanary:leakcanary-support-fragment:$leakcanary_version"
),
free_proguard
:
new
DepConfig
(
"com.blankj:free-proguard:1.0.1"
),
swipe_panel
:
new
DepConfig
(
"com.blankj:swipe-panel:1.1"
),
gson
:
new
DepConfig
(
"com.google.code.gson:gson:2.8.2"
),
glide
:
new
DepConfig
(
"com.github.bumptech.glide:glide:4.7.1"
),
retrofit
:
new
DepConfig
(
"com.squareup.retrofit2:retrofit:2.4.0"
),
javassist
:
new
DepConfig
(
"org.javassist:javassist:3.24.0-GA"
),
commons_io
:
new
DepConfig
(
"commons-io:commons-io:2.5"
),
junit
:
new
DepConfig
(
"junit:junit:4.12"
),
robolectric
:
new
DepConfig
(
"org.robolectric:robolectric:4.2"
),
]
fn
=
[
include
Modules:
this
.&
includeModules
,
include
Dep:
this
.&
includeDep
,
]
}
def
log
(
String
msg
)
{
println
(
"----> ${msg} <----"
)
}
gradle
.
ext
.
Utils
=
[
log:
this
.&
log
,
]
def
includeModules
()
{
// 根据 config 来 include 各 module
gradle
.
ext
.
module
.
each
{
k
,
v
->
if
(
v
.
isLocal
)
{
include
v
.
localPath
def
includeDep
()
{
// 根据 config 来 include 各 module
gradle
.
ext
.
Utils
.
log
(
"includeDep -> depConfig = "
+
gradle
.
ext
.
Utils
.
object2String
(
gradle
.
ext
.
depConfig
))
gradle
.
ext
.
depConfig
.
each
{
String
name
,
DepConfig
config
->
if
(
config
.
isApply
)
{
if
(
config
.
useLocal
)
{
include
config
.
localPath
}
}
}
}
gradle
.
addBuildListener
(
new
CustomListener
())
class
CustomListener
implements
BuildListener
{
private
timings
=
[]
private
File
file
@Override
void
buildStarted
(
Gradle
gradle
)
{
gradle
.
ext
.
Utils
.
log
(
"buildStarted"
)
gradle
.
addListener
(
new
TaskExecutionListener
()
{
@Override
void
beforeExecute
(
Task
task
)
{
gradle
.
ext
.
Utils
.
log
(
"beforeExecute"
)
task
.
ext
.
startTime
=
System
.
currentTimeMillis
()
}
@Override
void
afterExecute
(
Task
task
,
TaskState
state
)
{
gradle
.
ext
.
Utils
.
log
(
"afterExecute"
)
def
ms
=
System
.
currentTimeMillis
()
-
task
.
ext
.
startTime
timings
.
add
([
ms
,
task
.
path
])
}
})
def
sdf
=
new
java
.
text
.
SimpleDateFormat
(
"yyyy-MM-dd-HH-mm-ss"
)
file
=
new
File
(
rootProject
.
buildDir
.
getAbsolutePath
(),
"buildTime_"
+
sdf
.
format
(
new
Date
(
System
.
currentTimeMillis
()))
+
".txt"
)
class
DepConfig
{
boolean
useLocal
// 是否使用本地的
String
localPath
// 本地路径
String
remotePath
// 远程路径
boolean
isApply
// 是否应用
String
path
// 最后的路径
String
isDebug
// 是否调试
String
groupId
String
artifactId
String
version
DepConfig
(
String
path
)
{
this
(
path
,
true
)
}
@Override
void
settingsEvaluated
(
Settings
settings
)
{
DepConfig
(
String
path
,
boolean
isApply
)
{
if
(
path
.
startsWith
(
":"
))
{
this
.
useLocal
=
true
this
.
localPath
=
path
this
.
isApply
=
isApply
}
else
{
this
.
useLocal
=
false
this
.
remotePath
=
path
this
.
isApply
=
isApply
}
this
.
path
=
path
}
@Override
void
projectsLoaded
(
Gradle
gradle
)
{
gradle
.
ext
.
Utils
.
log
(
"projectsLoaded"
)
gradle
.
ext
.
module
.
each
{
k
,
v
->
// 动态把 module 添加到 dep 中
gradle
.
ext
.
dep
[
k
]
=
v
.
isLocal
?
gradle
.
rootProject
.
project
(
v
.
localPath
)
:
v
.
url
}
gradle
.
ext
.
Utils
.
log
(
"addModules2Dep: "
+
gradle
.
ext
.
dep
.
toString
())
DepConfig
(
boolean
useLocal
,
String
localPath
,
String
remotePath
)
{
this
(
useLocal
,
localPath
,
remotePath
,
true
)
}
@Override
void
projectsEvaluated
(
Gradle
gradle
)
{
gradle
.
ext
.
Utils
.
log
(
"projectsEvaluated"
)
DepConfig
(
boolean
useLocal
,
String
localPath
,
String
remotePath
,
boolean
isApply
)
{
this
.
useLocal
=
useLocal
this
.
localPath
=
localPath
this
.
remotePath
=
remotePath
this
.
isApply
=
isApply
this
.
path
=
useLocal
?
localPath
:
remotePath
}
@Override
void
buildFinished
(
BuildResult
result
)
{
ArrayList
<
Long
>
array
=
new
ArrayList
()
for
(
timing
in
timings
)
{
if
(
timing
[
0
]
>=
100
)
{
array
.
add
(
timing
)
}
}
if
(!
array
.
isEmpty
())
{
Collections
.
sort
(
array
)
StringBuilder
sb
=
new
StringBuilder
()
array
.
reverseEach
{
sb
.
append
(
String
.
format
(
"%7sms %s\n"
,
it
[
0
],
it
[
1
]))
}
def
content
=
sb
.
toString
()
Utils
.
log
(
content
)
com
.
android
.
utils
.
FileUtils
.
writeToFile
(
file
,
content
)
}
String
getGroupId
()
{
String
[]
splits
=
remotePath
.
split
(
":"
)
return
splits
.
length
==
3
?
splits
[
0
]
:
null
}
}
class
ModuleConfig
{
boolean
isLocal
String
localPath
String
url
String
getArtifactId
()
{
String
[]
splits
=
remotePath
.
split
(
":"
)
return
splits
.
length
==
3
?
splits
[
1
]
:
null
}
ModuleConfig
(
boolean
isLocal
,
String
localPath
,
String
url
)
{
this
.
isLocal
=
isLocal
this
.
localPath
=
localPath
this
.
url
=
url
String
getVersion
()
{
String
[]
splits
=
remotePath
.
split
(
":"
)
return
splits
.
length
==
3
?
splits
[
2
]
:
null
}
@Override
String
toString
()
{
return
"
Module
Config { "
+
"
isLocal = '"
+
isLocal
+
"'
, "
+
"
localPath = '"
+
localPath
+
"'
, "
+
"
url = '"
+
url
+
"'
"
+
" }
\n
"
return
"
Dep
Config { "
+
"
useLocal = "
+
useLocal
+
"
, "
+
"
path = "
+
path
+
"
, "
+
"
isApply = "
+
isApply
+
"
"
+
" }"
}
}
//./gradlew clean :utilcode:lib:bintrayUpload
\ No newline at end of file
gradle/config/configApp.gradle
浏览文件 @
08ddfce5
...
...
@@ -2,7 +2,7 @@ apply {
plugin
"com.android.application"
plugin
"kotlin-android"
plugin
"kotlin-android-extensions"
if
(
!
gradle
.
ext
.
bus
.
isPublish
)
{
if
(
gradle
.
ext
.
depConfig
.
plugin_bus
.
isApply
)
{
plugin
"com.blankj.bus"
}
}
...
...
@@ -50,9 +50,9 @@ android {
dependencies
{
// LeakCanary
debugImplementation
gradle
.
ext
.
dep
.
leakcanary
.
android
debugImplementation
gradle
.
ext
.
dep
.
leakcanary
.
support_fragment
releaseImplementation
gradle
.
ext
.
dep
.
leakcanary
.
android_no_op
debugImplementation
gradle
.
ext
.
dep
.
leakcanary
_
android
debugImplementation
gradle
.
ext
.
dep
.
leakcanary
_
support_fragment
releaseImplementation
gradle
.
ext
.
dep
.
leakcanary
_
android_no_op
}
private
String
getSuffix
()
{
...
...
gradle/config/configBuild.gradle
0 → 100644
浏览文件 @
08ddfce5
gradle
.
addBuildListener
(
new
CustomListener
(
gradle
))
class
CustomListener
implements
BuildListener
{
private
timings
=
[]
private
File
file
private
Gradle
gradle
CustomListener
(
Gradle
gradle
)
{
this
.
gradle
=
gradle
}
@Override
void
settingsEvaluated
(
Settings
settings
)
{
log
(
"settingsEvaluated"
)
}
@Override
void
projectsLoaded
(
Gradle
gradle
)
{
log
(
"projectsLoaded"
)
configDep
()
}
@Override
void
projectsEvaluated
(
Gradle
gradle
)
{
log
(
"projectsEvaluated"
)
}
@Override
void
buildStarted
(
Gradle
gradle
)
{
log
(
"buildStarted"
)
gradle
.
addListener
(
new
TaskExecutionListener
()
{
@Override
void
beforeExecute
(
Task
task
)
{
log
(
"beforeExecute"
)
task
.
ext
.
startTime
=
System
.
currentTimeMillis
()
}
@Override
void
afterExecute
(
Task
task
,
TaskState
state
)
{
log
(
"afterExecute"
)
def
ms
=
System
.
currentTimeMillis
()
-
task
.
ext
.
startTime
timings
.
add
([
ms
,
task
.
path
])
}
})
def
sdf
=
new
java
.
text
.
SimpleDateFormat
(
"yyyy-MM-dd-HH-mm-ss"
)
file
=
new
File
(
rootProject
.
buildDir
.
getAbsolutePath
(),
"buildTime_"
+
sdf
.
format
(
new
Date
(
System
.
currentTimeMillis
()))
+
".txt"
)
}
@Override
void
buildFinished
(
BuildResult
result
)
{
ArrayList
<
Long
>
array
=
new
ArrayList
()
for
(
timing
in
timings
)
{
if
(
timing
[
0
]
>=
100
)
{
array
.
add
(
timing
)
}
}
if
(!
array
.
isEmpty
())
{
Collections
.
sort
(
array
)
StringBuilder
sb
=
new
StringBuilder
()
array
.
reverseEach
{
sb
.
append
(
String
.
format
(
"%7sms %s\n"
,
it
[
0
],
it
[
1
]))
}
def
content
=
sb
.
toString
()
log
(
content
)
com
.
android
.
utils
.
FileUtils
.
writeToFile
(
file
,
content
)
}
}
/**
* 根据 depConfig 生成 dep
*/
private
void
configDep
()
{
gradle
.
depConfig
.
each
{
name
,
config
->
if
(!
config
.
isApply
)
return
if
(
config
.
useLocal
)
{
gradle
.
ext
.
dep
[
name
]
=
gradle
.
rootProject
.
findProject
(
config
.
localPath
)
}
else
{
gradle
.
ext
.
dep
[
name
]
=
config
.
remotePath
}
}
log
(
"dep = "
+
gradle
.
ext
.
Utils
.
object2String
(
gradle
.
ext
.
dep
))
}
private
void
log
(
Object
content
)
{
gradle
.
ext
.
Utils
.
log
(
content
)
}
}
\ No newline at end of file
gradle/upload/localMavenUpload.gradle
已删除
100755 → 0
浏览文件 @
fdad02a3
uploadArchives
{
repositories
{
mavenDeployer
{
repository
(
url:
uri
(
new
File
(
project
.
rootDir
,
"maven"
)))
}
}
}
\ No newline at end of file
gradle/util/utils.gradle
浏览文件 @
08ddfce5
def
log
(
Object
content
)
{
StringBuilder
sb
=
new
StringBuilder
()
sb
.
append
(
Const
.
BORDER_TOP
)
LogFormatter
.
object2String
(
content
).
split
(
Const
.
LINE_SEP
).
each
{
line
->
sb
.
append
(
Const
.
BORDER_LFT
).
append
(
line
).
append
(
Const
.
LINE_SEP
)
}
sb
.
append
(
Const
.
BORDER_BTM
)
print
sb
.
toString
()
}
gradle
.
ext
.
Utils
=
[
log
:
this
.&
log
,
object2String:
LogFormatter
.&
object2String
,
]
class
Const
{
static
final
String
LINE_SEP
=
System
.
getProperty
(
"line.separator"
);
static
final
String
BORDER_TOP
=
"┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────"
+
LINE_SEP
static
final
String
BORDER_LFT
=
"│ "
;
static
final
String
BORDER_BTM
=
"└────────────────────────────────────────────────────────────────────────────────────────────────────────────────"
+
LINE_SEP
}
class
LogFormatter
{
static
String
object2String
(
Object
object
)
{
if
(
object
==
null
)
return
"null"
;
if
(
object
.
getClass
().
isArray
())
return
array2String
(
object
);
if
(
object
instanceof
Map
)
return
map2String
(
object
);
if
(
object
instanceof
Throwable
)
return
throwable2String
(
object
);
return
object
.
toString
();
}
private
static
String
array2String
(
Object
object
)
{
if
(
object
instanceof
Object
[])
{
return
Arrays
.
deepToString
((
Object
[])
object
);
}
else
if
(
object
instanceof
boolean
[])
{
return
Arrays
.
toString
((
boolean
[])
object
);
}
else
if
(
object
instanceof
byte
[])
{
return
Arrays
.
toString
((
byte
[])
object
);
}
else
if
(
object
instanceof
char
[])
{
return
Arrays
.
toString
((
char
[])
object
);
}
else
if
(
object
instanceof
double
[])
{
return
Arrays
.
toString
((
double
[])
object
);
}
else
if
(
object
instanceof
float
[])
{
return
Arrays
.
toString
((
float
[])
object
);
}
else
if
(
object
instanceof
int
[])
{
return
Arrays
.
toString
((
int
[])
object
);
}
else
if
(
object
instanceof
long
[])
{
return
Arrays
.
toString
((
long
[])
object
);
}
else
if
(
object
instanceof
short
[])
{
return
Arrays
.
toString
((
short
[])
object
);
}
throw
new
IllegalArgumentException
(
"Array has incompatible type: "
+
object
.
getClass
());
}
private
static
map2String
(
Map
map
)
{
StringBuilder
sb
=
new
StringBuilder
()
sb
.
append
(
"["
)
map
.
each
{
k
,
v
->
sb
.
append
(
String
.
format
(
"$Const.LINE_SEP%8s%-27s: $v,"
,
""
,
k
))
}
sb
.
deleteCharAt
(
sb
.
length
()
-
1
)
sb
.
append
(
"$Const.LINE_SEP]"
)
return
sb
.
toString
()
}
private
static
String
throwable2String
(
Throwable
throwable
)
{
final
List
<
Throwable
>
throwableList
=
new
ArrayList
<>();
while
(
throwable
!=
null
&&
!
throwableList
.
contains
(
throwable
))
{
throwableList
.
add
(
throwable
);
throwable
=
throwable
.
getCause
();
}
final
int
size
=
throwableList
.
size
();
final
List
<
String
>
frames
=
new
ArrayList
<>();
List
<
String
>
nextTrace
=
getStackFrameList
(
throwableList
.
get
(
size
-
1
));
for
(
int
i
=
size
;
--
i
>=
0
;)
{
final
List
<
String
>
trace
=
nextTrace
;
if
(
i
!=
0
)
{
nextTrace
=
getStackFrameList
(
throwableList
.
get
(
i
-
1
));
removeCommonFrames
(
trace
,
nextTrace
);
}
if
(
i
==
size
-
1
)
{
frames
.
add
(
throwableList
.
get
(
i
).
toString
());
}
else
{
frames
.
add
(
" Caused by: "
+
throwableList
.
get
(
i
).
toString
());
}
frames
.
addAll
(
trace
);
}
StringBuilder
sb
=
new
StringBuilder
();
for
(
final
String
element
:
frames
)
{
sb
.
append
(
element
).
append
(
Const
.
LINE_SEP
);
}
return
sb
.
toString
();
}
private
static
List
<
String
>
getStackFrameList
(
final
Throwable
throwable
)
{
final
StringWriter
sw
=
new
StringWriter
();
final
PrintWriter
pw
=
new
PrintWriter
(
sw
,
true
);
throwable
.
printStackTrace
(
pw
);
final
String
stackTrace
=
sw
.
toString
();
final
StringTokenizer
frames
=
new
StringTokenizer
(
stackTrace
,
Const
.
LINE_SEP
);
final
List
<
String
>
list
=
new
ArrayList
<>();
boolean
traceStarted
=
false
;
while
(
frames
.
hasMoreTokens
())
{
final
String
token
=
frames
.
nextToken
();
// Determine if the line starts with <whitespace>at
final
int
at
=
token
.
indexOf
(
"at"
);
if
(
at
!=
-
1
&&
token
.
substring
(
0
,
at
).
trim
().
isEmpty
())
{
traceStarted
=
true
;
list
.
add
(
token
);
}
else
if
(
traceStarted
)
{
break
;
}
}
return
list
;
}
private
static
void
removeCommonFrames
(
final
List
<
String
>
causeFrames
,
final
List
<
String
>
wrapperFrames
)
{
int
causeFrameIndex
=
causeFrames
.
size
()
-
1
;
int
wrapperFrameIndex
=
wrapperFrames
.
size
()
-
1
;
while
(
causeFrameIndex
>=
0
&&
wrapperFrameIndex
>=
0
)
{
// Remove the frame from the cause trace if it is the same
// as in the wrapper trace
final
String
causeFrame
=
causeFrames
.
get
(
causeFrameIndex
);
final
String
wrapperFrame
=
wrapperFrames
.
get
(
wrapperFrameIndex
);
if
(
causeFrame
.
equals
(
wrapperFrame
))
{
causeFrames
.
remove
(
causeFrameIndex
);
}
causeFrameIndex
--;
wrapperFrameIndex
--;
}
}
}
lib/base/build.gradle
浏览文件 @
08ddfce5
...
...
@@ -7,13 +7,13 @@ dependencies {
api
gradle
.
ext
.
dep
.
utilcode_lib
api
gradle
.
ext
.
dep
.
subutil_lib
api
gradle
.
ext
.
dep
.
support
.
appcompat_v7
api
gradle
.
ext
.
dep
.
support
.
design
api
gradle
.
ext
.
dep
.
support
.
multidex
api
gradle
.
ext
.
dep
.
support
_
appcompat_v7
api
gradle
.
ext
.
dep
.
support
_
design
api
gradle
.
ext
.
dep
.
support
_
multidex
api
gradle
.
ext
.
dep
.
constraint
api
gradle
.
ext
.
dep
.
kotlin
api
gradle
.
ext
.
dep
.
free_proguard
api
gradle
.
ext
.
dep
.
swipe_panel
compileOnly
gradle
.
ext
.
dep
.
leakcanary
.
android_no_op
compileOnly
gradle
.
ext
.
dep
.
leakcanary
_
android_no_op
// api 'com.blankj:utilcode:1.23.7'
}
\ No newline at end of file
lib/base/src/main/res/anim/slide_in_right.xml
浏览文件 @
08ddfce5
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<translate
android:duration=
"
3
00"
android:duration=
"
2
00"
android:fromXDelta=
"-100%"
android:toXDelta=
"0"
/>
</set>
\ No newline at end of file
lib/base/src/main/res/values/styles.xml
浏览文件 @
08ddfce5
...
...
@@ -26,9 +26,13 @@
</style>
<style
name=
"AnimationActivity"
parent=
"@android:style/Animation"
>
<!-- A 打开 B,B 的出现动画 -->
<item
name=
"android:activityOpenEnterAnimation"
>
@anim/slide_in_left
</item>
<!-- A 打开 B,A 的消失动画 -->
<item
name=
"android:activityOpenExitAnimation"
>
@anim/slide_out_left
</item>
<!-- B 关闭到 A,A 的出现动画 *时长要小于 B 的消失动画,否则会闪烁* -->
<item
name=
"android:activityCloseEnterAnimation"
>
@anim/slide_in_right
</item>
<!-- B 关闭到 A,B 的消失动画 *时长要小于 B 的消失动画,否则会闪烁* -->
<item
name=
"android:activityCloseExitAnimation"
>
@anim/slide_out_right
</item>
</style>
</resources>
settings.gradle
浏览文件 @
08ddfce5
apply
from:
'gradle/config/config.gradle'
gradle
.
fn
.
includeModules
()
\ No newline at end of file
gradle
.
fn
.
includeDep
()
\ No newline at end of file
subutil/lib/build.gradle
浏览文件 @
08ddfce5
...
...
@@ -13,8 +13,8 @@ readme {
}
dependencies
{
compileOnly
gradle
.
ext
.
dep
.
support
.
appcompat_v7
compileOnly
gradle
.
ext
.
dep
.
support
.
design
compileOnly
gradle
.
ext
.
dep
.
support
_
appcompat_v7
compileOnly
gradle
.
ext
.
dep
.
support
_
design
api
(
gradle
.
ext
.
dep
.
glide
)
{
exclude
group:
"com.android.support"
}
...
...
subutil/lib/src/test/java/com/blankj/subutil/util/http/nodeServer/node_modules/moment/moment.d.ts
浏览文件 @
08ddfce5
...
...
@@ -441,7 +441,7 @@ declare namespace moment {
// current date/time in local mode
local
(
keepLocalTime
?:
boolean
):
Moment
;
is
Local
():
boolean
;
use
Local
():
boolean
;
// current date/time in UTC mode
utc
(
keepLocalTime
?:
boolean
):
Moment
;
...
...
utilcode/README-CN.md
浏览文件 @
08ddfce5
...
...
@@ -20,6 +20,7 @@ startHomeActivity : 回到桌面
getActivityList : 获取 Activity 栈链表
getLauncherActivity : 获取启动项 Activity
getTopActivity : 获取栈顶 Activity
isActivityAlive : 判断 Activity 是否存活
isActivityExistsInStack : 判断 Activity 是否存在栈中
finishActivity : 结束 Activity
finishToActivity : 结束到指定 Activity
...
...
utilcode/README-STATIC-BUS.md
浏览文件 @
08ddfce5
...
...
@@ -13,7 +13,7 @@
buildscript
{
dependencies
{
...
classpath
'com.blankj:bus-gradle-plugin:1.
7
'
classpath
'com.blankj:bus-gradle-plugin:1.
8
'
}
}
```
...
...
@@ -27,7 +27,7 @@ apply plugin: "com.blankj.bus"
给 base 模块添加
[
AndroidUtilCode
](
https://github.com/Blankj/AndroidUtilCode
)
依赖:
```
groovy
api
"com.blankj:utilcode:1.2
3.7
"
api
"com.blankj:utilcode:1.2
4.0
"
```
比如 module0 中存在的
`Module0Activity.java`
,我们通常都是在它内部写一个
`start`
函数来启动它,现在我们给它添加
`@BusUtils.Subscribe`
注解,并给注解的
`name`
赋唯一值,要注意,函数务必要
`public static`
哦:
...
...
utilcode/lib/build.gradle
浏览文件 @
08ddfce5
...
...
@@ -17,10 +17,10 @@ apply from: "${rootDir.path}/gradle/upload/bintrayUploadAndroid.gradle"
dependencies
{
compile
gradle
.
ext
.
dep
.
gson
compileOnly
gradle
.
ext
.
dep
.
support
.
appcompat_v7
compileOnly
gradle
.
ext
.
dep
.
support
.
design
compileOnly
gradle
.
ext
.
dep
.
support
_
appcompat_v7
compileOnly
gradle
.
ext
.
dep
.
support
_
design
testImplementation
gradle
.
ext
.
dep
.
junit
testImplementation
gradle
.
ext
.
dep
.
robolectric
testImplementation
gradle
.
ext
.
dep
.
support
.
appcompat_v7
testImplementation
gradle
.
ext
.
dep
.
support
_
appcompat_v7
}
\ No newline at end of file
utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
浏览文件 @
08ddfce5
...
...
@@ -101,8 +101,6 @@ public final class LogUtils {
private
static
final
String
ARGS
=
"args"
;
private
static
final
String
PLACEHOLDER
=
" "
;
private
static
final
Config
CONFIG
=
new
Config
();
private
static
final
Gson
GSON
=
new
GsonBuilder
()
.
setPrettyPrinting
().
serializeNulls
().
create
();
private
static
final
ThreadLocal
<
SimpleDateFormat
>
SDF_THREAD_LOCAL
=
new
ThreadLocal
<>();
...
...
@@ -333,8 +331,8 @@ public final class LogUtils {
private
static
String
formatObject
(
int
type
,
Object
object
)
{
if
(
object
==
null
)
return
NULL
;
if
(
type
==
JSON
)
return
LogFormatter
.
object2
Json
(
object
);
if
(
type
==
XML
)
return
LogFormatter
.
formatXml
(
object
.
toString
()
);
if
(
type
==
JSON
)
return
LogFormatter
.
object2
String
(
object
,
JSON
);
if
(
type
==
XML
)
return
LogFormatter
.
object2String
(
object
,
XML
);
return
formatObject
(
object
);
}
...
...
@@ -874,38 +872,23 @@ public final class LogUtils {
private
final
static
class
LogFormatter
{
private
static
final
Gson
GSON
=
new
GsonBuilder
().
setPrettyPrinting
().
serializeNulls
().
create
();
static
String
object2String
(
Object
object
)
{
return
object2String
(
object
,
-
1
);
}
static
String
object2String
(
Object
object
,
int
type
)
{
if
(
object
.
getClass
().
isArray
())
return
array2String
(
object
);
if
(
object
instanceof
Throwable
)
return
throwable2String
((
Throwable
)
object
);
if
(
object
instanceof
Bundle
)
return
bundle2String
((
Bundle
)
object
);
if
(
object
instanceof
Intent
)
return
intent2String
((
Intent
)
object
);
return
object
.
toString
();
}
static
String
object2Json
(
Object
object
)
{
if
(
object
instanceof
CharSequence
)
{
return
formatJson
(
object
.
toString
());
}
try
{
return
GSON
.
toJson
(
object
);
}
catch
(
Throwable
t
)
{
return
object
.
toString
();
}
}
static
String
formatXml
(
String
xml
)
{
try
{
Source
xmlInput
=
new
StreamSource
(
new
StringReader
(
xml
));
StreamResult
xmlOutput
=
new
StreamResult
(
new
StringWriter
());
Transformer
transformer
=
TransformerFactory
.
newInstance
().
newTransformer
();
transformer
.
setOutputProperty
(
OutputKeys
.
INDENT
,
"yes"
);
transformer
.
setOutputProperty
(
"{http://xml.apache.org/xslt}indent-amount"
,
"2"
);
transformer
.
transform
(
xmlInput
,
xmlOutput
);
xml
=
xmlOutput
.
getWriter
().
toString
().
replaceFirst
(
">"
,
">"
+
LINE_SEP
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
if
(
type
==
JSON
)
{
return
object2Json
(
object
);
}
else
if
(
type
==
XML
)
{
return
formatXml
(
object
.
toString
());
}
return
xml
;
return
object
.
toString
()
;
}
private
static
String
throwable2String
(
final
Throwable
e
)
{
...
...
@@ -1043,24 +1026,6 @@ public final class LogUtils {
return
sb
.
toString
();
}
private
static
String
formatJson
(
String
json
)
{
try
{
for
(
int
i
=
0
,
len
=
json
.
length
();
i
<
len
;
i
++)
{
char
c
=
json
.
charAt
(
i
);
if
(
c
==
'{'
)
{
return
new
JSONObject
(
json
).
toString
(
2
);
}
else
if
(
c
==
'['
)
{
return
new
JSONArray
(
json
).
toString
(
2
);
}
else
if
(!
Character
.
isWhitespace
(
c
))
{
return
json
;
}
}
}
catch
(
JSONException
e
)
{
e
.
printStackTrace
();
}
return
json
;
}
@RequiresApi
(
api
=
Build
.
VERSION_CODES
.
JELLY_BEAN
)
private
static
void
clipData2String
(
ClipData
clipData
,
StringBuilder
sb
)
{
ClipData
.
Item
item
=
clipData
.
getItemAt
(
0
);
...
...
@@ -1100,6 +1065,50 @@ public final class LogUtils {
sb
.
append
(
"}"
);
}
private
static
String
object2Json
(
Object
object
)
{
if
(
object
instanceof
CharSequence
)
{
return
formatJson
(
object
.
toString
());
}
try
{
return
GSON
.
toJson
(
object
);
}
catch
(
Throwable
t
)
{
return
object
.
toString
();
}
}
private
static
String
formatJson
(
String
json
)
{
try
{
for
(
int
i
=
0
,
len
=
json
.
length
();
i
<
len
;
i
++)
{
char
c
=
json
.
charAt
(
i
);
if
(
c
==
'{'
)
{
return
new
JSONObject
(
json
).
toString
(
2
);
}
else
if
(
c
==
'['
)
{
return
new
JSONArray
(
json
).
toString
(
2
);
}
else
if
(!
Character
.
isWhitespace
(
c
))
{
return
json
;
}
}
}
catch
(
JSONException
e
)
{
e
.
printStackTrace
();
}
return
json
;
}
private
static
String
formatXml
(
String
xml
)
{
try
{
Source
xmlInput
=
new
StreamSource
(
new
StringReader
(
xml
));
StreamResult
xmlOutput
=
new
StreamResult
(
new
StringWriter
());
Transformer
transformer
=
TransformerFactory
.
newInstance
().
newTransformer
();
transformer
.
setOutputProperty
(
OutputKeys
.
INDENT
,
"yes"
);
transformer
.
setOutputProperty
(
"{http://xml.apache.org/xslt}indent-amount"
,
"2"
);
transformer
.
transform
(
xmlInput
,
xmlOutput
);
xml
=
xmlOutput
.
getWriter
().
toString
().
replaceFirst
(
">"
,
">"
+
LINE_SEP
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
xml
;
}
private
static
String
array2String
(
Object
object
)
{
if
(
object
instanceof
Object
[])
{
return
Arrays
.
deepToString
((
Object
[])
object
);
...
...
utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
浏览文件 @
08ddfce5
...
...
@@ -145,34 +145,8 @@ public final class PermissionUtils {
return
Settings
.
canDrawOverlays
(
Utils
.
getApp
());
}
/**
* Return whether the app can draw on top of other apps.
*
* @return {@code true}: yes<br>{@code false}: no
*/
@RequiresApi
(
api
=
Build
.
VERSION_CODES
.
M
)
public
static
boolean
isGrantedDrawOverlays
(
final
Utils
.
Callback
<
Boolean
>
callback
)
{
return
Utils
.
UTIL_HANDLER
.
postDelayed
(
new
Runnable
()
{
@Override
public
void
run
()
{
callback
.
onCall
(
isGrantedDrawOverlays
());
}
},
200
);
}
@RequiresApi
(
api
=
Build
.
VERSION_CODES
.
M
)
public
static
void
requestDrawOverlays
(
final
SimpleCallback
callback
)
{
isGrantedDrawOverlays
(
new
Utils
.
Callback
<
Boolean
>()
{
@Override
public
void
onCall
(
Boolean
data
)
{
if
(
data
)
{
if
(
callback
!=
null
)
callback
.
onGranted
();
return
;
}
sSimpleCallback4DrawOverlays
=
callback
;
PermissionActivity
.
start
(
Utils
.
getApp
(),
PermissionActivity
.
TYPE_DRAW_OVERLAYS
);
}
});
if
(
isGrantedDrawOverlays
())
{
if
(
callback
!=
null
)
callback
.
onGranted
();
return
;
...
...
@@ -458,12 +432,17 @@ public final class PermissionUtils {
sSimpleCallback4WriteSettings
=
null
;
}
else
if
(
requestCode
==
TYPE_DRAW_OVERLAYS
)
{
if
(
sSimpleCallback4DrawOverlays
==
null
)
return
;
if
(
isGrantedDrawOverlays
())
{
sSimpleCallback4DrawOverlays
.
onGranted
();
}
else
{
sSimpleCallback4DrawOverlays
.
onDenied
();
}
sSimpleCallback4DrawOverlays
=
null
;
Utils
.
runOnUiThreadDelayed
(
new
Runnable
()
{
@Override
public
void
run
()
{
if
(
isGrantedDrawOverlays
())
{
sSimpleCallback4DrawOverlays
.
onGranted
();
}
else
{
sSimpleCallback4DrawOverlays
.
onDenied
();
}
sSimpleCallback4DrawOverlays
=
null
;
}
},
100
);
}
finish
();
}
...
...
utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
浏览文件 @
08ddfce5
...
...
@@ -31,6 +31,46 @@ public final class ResourceUtils {
throw
new
UnsupportedOperationException
(
"u can't instantiate me..."
);
}
/**
* Return the id identifier by name.
*
* @param name The name of id.
* @return the id identifier by name
*/
public
static
int
getIdByName
(
String
name
)
{
return
Utils
.
getApp
().
getResources
().
getIdentifier
(
name
,
"id"
,
Utils
.
getApp
().
getPackageName
());
}
/**
* Return the string identifier by name.
*
* @param name The name of string.
* @return the string identifier by name
*/
public
static
int
getStringIdByName
(
String
name
)
{
return
Utils
.
getApp
().
getResources
().
getIdentifier
(
name
,
"string"
,
Utils
.
getApp
().
getPackageName
());
}
/**
* Return the color identifier by name.
*
* @param name The name of color.
* @return the color identifier by name
*/
public
static
int
getColorIdByName
(
String
name
)
{
return
Utils
.
getApp
().
getResources
().
getIdentifier
(
name
,
"color"
,
Utils
.
getApp
().
getPackageName
());
}
/**
* Return the dimen identifier by name.
*
* @param name The name of dimen.
* @return the dimen identifier by name
*/
public
static
int
getDimenIdByName
(
String
name
)
{
return
Utils
.
getApp
().
getResources
().
getIdentifier
(
name
,
"dimen"
,
Utils
.
getApp
().
getPackageName
());
}
/**
* Return the drawable identifier by name.
*
...
...
@@ -41,6 +81,56 @@ public final class ResourceUtils {
return
Utils
.
getApp
().
getResources
().
getIdentifier
(
name
,
"drawable"
,
Utils
.
getApp
().
getPackageName
());
}
/**
* Return the mipmap identifier by name.
*
* @param name The name of mipmap.
* @return the mipmap identifier by name
*/
public
static
int
getMipmapIdByName
(
String
name
)
{
return
Utils
.
getApp
().
getResources
().
getIdentifier
(
name
,
"mipmap"
,
Utils
.
getApp
().
getPackageName
());
}
/**
* Return the layout identifier by name.
*
* @param name The name of layout.
* @return the layout identifier by name
*/
public
static
int
getLayoutIdByName
(
String
name
)
{
return
Utils
.
getApp
().
getResources
().
getIdentifier
(
name
,
"layout"
,
Utils
.
getApp
().
getPackageName
());
}
/**
* Return the style identifier by name.
*
* @param name The name of style.
* @return the style identifier by name
*/
public
static
int
getStyleIdByName
(
String
name
)
{
return
Utils
.
getApp
().
getResources
().
getIdentifier
(
name
,
"style"
,
Utils
.
getApp
().
getPackageName
());
}
/**
* Return the anim identifier by name.
*
* @param name The name of anim.
* @return the anim identifier by name
*/
public
static
int
getAnimIdByName
(
String
name
)
{
return
Utils
.
getApp
().
getResources
().
getIdentifier
(
name
,
"anim"
,
Utils
.
getApp
().
getPackageName
());
}
/**
* Return the menu identifier by name.
*
* @param name The name of menu.
* @return the menu identifier by name
*/
public
static
int
getMenuIdByName
(
String
name
)
{
return
Utils
.
getApp
().
getResources
().
getIdentifier
(
name
,
"menu"
,
Utils
.
getApp
().
getPackageName
());
}
/**
* Copy the file from assets.
*
...
...
utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
浏览文件 @
08ddfce5
...
...
@@ -52,6 +52,7 @@ import android.util.Log;
import
android.widget.TextView
;
import
java.io.InputStream
;
import
java.io.Serializable
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.ref.WeakReference
;
...
...
@@ -132,7 +133,7 @@ public final class SpanUtils {
private
int
spaceSize
;
private
int
spaceColor
;
private
SpannableStringBuilder
mBuilder
;
private
S
erializableS
pannableStringBuilder
mBuilder
;
private
int
mType
;
private
final
int
mTypeCharSequence
=
0
;
...
...
@@ -145,7 +146,7 @@ public final class SpanUtils {
}
public
SpanUtils
()
{
mBuilder
=
new
SpannableStringBuilder
();
mBuilder
=
new
S
erializableS
pannableStringBuilder
();
mText
=
""
;
mType
=
-
1
;
setDefault
();
...
...
@@ -1406,6 +1407,12 @@ public final class SpanUtils {
}
}
private
static
class
SerializableSpannableStringBuilder
extends
SpannableStringBuilder
implements
Serializable
{
private
static
final
long
serialVersionUID
=
4909567650765875771L
;
}
///////////////////////////////////////////////////////////////////////////
// static
///////////////////////////////////////////////////////////////////////////
...
...
utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
浏览文件 @
08ddfce5
...
...
@@ -3,7 +3,6 @@ package com.blankj.utilcode.util;
import
android.annotation.SuppressLint
;
import
android.app.Activity
;
import
android.content.Context
;
import
android.content.res.Configuration
;
import
android.graphics.Color
;
import
android.graphics.PixelFormat
;
import
android.graphics.PorterDuff
;
...
...
@@ -437,6 +436,7 @@ public final class ToastUtils {
@Override
public
void
onActivityDestroyed
(
Activity
activity
)
{
if
(
iToast
==
null
)
return
;
activity
.
getWindow
().
getDecorView
().
setVisibility
(
View
.
GONE
);
iToast
.
cancel
();
}
};
...
...
@@ -468,35 +468,29 @@ public final class ToastUtils {
mParams
.
type
=
WindowManager
.
LayoutParams
.
LAST_APPLICATION_WINDOW
;
Utils
.
getActivityLifecycle
().
addOnActivityDestroyedListener
(
topActivity
,
LISTENER
);
}
// else {
// mWM = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
// mParams.type = WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW + 37;
// }
final
Configuration
config
=
context
.
getResources
().
getConfiguration
();
final
int
gravity
=
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
?
Gravity
.
getAbsoluteGravity
(
mToast
.
getGravity
(),
config
.
getLayoutDirection
())
:
mToast
.
getGravity
();
mParams
.
y
=
mToast
.
getYOffset
();
mParams
.
height
=
WindowManager
.
LayoutParams
.
WRAP_CONTENT
;
mParams
.
width
=
WindowManager
.
LayoutParams
.
WRAP_CONTENT
;
mParams
.
format
=
PixelFormat
.
TRANSLUCENT
;
mParams
.
windowAnimations
=
android
.
R
.
style
.
Animation_Toast
;
mParams
.
setTitle
(
"ToastWithoutNotification"
);
mParams
.
flags
=
WindowManager
.
LayoutParams
.
FLAG_KEEP_SCREEN_ON
|
WindowManager
.
LayoutParams
.
FLAG_NOT_FOCUSABLE
|
WindowManager
.
LayoutParams
.
FLAG_NOT_TOUCHABLE
;
mParams
.
gravity
=
gravity
;
if
((
gravity
&
Gravity
.
HORIZONTAL_GRAVITY_MASK
)
==
Gravity
.
FILL_HORIZONTAL
)
{
mParams
.
packageName
=
Utils
.
getApp
().
getPackageName
();
mParams
.
gravity
=
mToast
.
getGravity
();
if
((
mParams
.
gravity
&
Gravity
.
HORIZONTAL_GRAVITY_MASK
)
==
Gravity
.
FILL_HORIZONTAL
)
{
mParams
.
horizontalWeight
=
1.0f
;
}
if
((
gravity
&
Gravity
.
VERTICAL_GRAVITY_MASK
)
==
Gravity
.
FILL_VERTICAL
)
{
if
((
mParams
.
gravity
&
Gravity
.
VERTICAL_GRAVITY_MASK
)
==
Gravity
.
FILL_VERTICAL
)
{
mParams
.
verticalWeight
=
1.0f
;
}
mParams
.
x
=
mToast
.
getXOffset
();
mParams
.
packageName
=
Utils
.
getApp
().
getPackageName
();
mParams
.
y
=
mToast
.
getYOffset
();
mParams
.
horizontalMargin
=
mToast
.
getHorizontalMargin
();
mParams
.
verticalMargin
=
mToast
.
getVerticalMargin
();
try
{
if
(
mWM
!=
null
)
{
...
...
utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
浏览文件 @
08ddfce5
...
...
@@ -159,7 +159,7 @@ public final class Utils {
return
task
;
}
static
void
runOnUiThread
(
final
Runnable
runnable
)
{
public
static
void
runOnUiThread
(
final
Runnable
runnable
)
{
if
(
Looper
.
myLooper
()
==
Looper
.
getMainLooper
())
{
runnable
.
run
();
}
else
{
...
...
@@ -167,12 +167,8 @@ public final class Utils {
}
}
static
void
runOnUiThreadDelayed
(
final
Runnable
runnable
,
long
delayMillis
)
{
if
(
Looper
.
myLooper
()
==
Looper
.
getMainLooper
())
{
runnable
.
run
();
}
else
{
Utils
.
UTIL_HANDLER
.
postDelayed
(
runnable
,
delayMillis
);
}
public
static
void
runOnUiThreadDelayed
(
final
Runnable
runnable
,
long
delayMillis
)
{
Utils
.
UTIL_HANDLER
.
postDelayed
(
runnable
,
delayMillis
);
}
static
String
getCurrentProcessName
()
{
...
...
@@ -321,9 +317,7 @@ public final class Utils {
}
@Override
public
void
onActivityPaused
(
Activity
activity
)
{
/**/
}
public
void
onActivityPaused
(
Activity
activity
)
{
/**/
}
@Override
public
void
onActivityStopped
(
Activity
activity
)
{
...
...
@@ -350,9 +344,14 @@ public final class Utils {
Activity
getTopActivity
()
{
if
(!
mActivityList
.
isEmpty
())
{
final
Activity
topActivity
=
mActivityList
.
getLast
();
if
(
topActivity
!=
null
)
{
return
topActivity
;
for
(
int
i
=
mActivityList
.
size
()
-
1
;
i
>=
0
;
i
--)
{
Activity
activity
=
mActivityList
.
get
(
i
);
if
(
activity
==
null
||
activity
.
isFinishing
()
||
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
&&
activity
.
isDestroyed
()))
{
continue
;
}
return
activity
;
}
}
Activity
topActivityByReflect
=
getTopActivityByReflect
();
...
...
utilcode/pkg/src/main/AndroidManifest.xml
浏览文件 @
08ddfce5
...
...
@@ -203,7 +203,7 @@
<activity
android:name=
".feature.screen.ScreenActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:launchMode=
"singleTop"
></activity
>
android:launchMode=
"singleTop"
/
>
<activity
android:name=
".feature.sdcard.SDCardActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
...
...
utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt
浏览文件 @
08ddfce5
package
com.blankj.utilcode.pkg.feature.adaptScreen
import
android.content.Context
import
android.content.Intent
import
android.os.Bundle
import
android.view.View
import
com.blankj.lib.base.BaseTitleActivity
...
...
@@ -11,9 +12,8 @@ class AdaptScreenActivity : BaseTitleActivity() {
companion
object
{
fun
start
(
context
:
Context
)
{
// val starter = Intent(context, AdaptScreenActivity::class.java)
// context.startActivity(starter)
AppStoreUtils
.
go2AppStoreAtLarkPage
(
context
)
val
starter
=
Intent
(
context
,
AdaptScreenActivity
::
class
.
java
)
context
.
startActivity
(
starter
)
}
}
...
...
utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AppStoreUtils.java
已删除
100644 → 0
浏览文件 @
fdad02a3
package
com.blankj.utilcode.pkg.feature.adaptScreen
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.pm.PackageManager
;
import
android.net.Uri
;
import
android.os.Build
;
import
android.support.v4.util.ArrayMap
;
import
com.blankj.utilcode.util.LogUtils
;
import
java.util.List
;
/**
* <pre>
* author: blankj
* blog : http://blankj.com
* time : 2019/05/20
* desc :
* </pre>
*/
public
class
AppStoreUtils
{
private
static
final
String
TAG
=
"AppStoreUtils"
;
private
static
final
String
larkPkg
=
"com.ss.android.lark"
;
private
static
ArrayMap
<
String
,
String
>
appStore
;
/**
* 判断手机是否有应用商店
*/
public
static
boolean
hasAppStore
(
final
Context
context
)
{
if
(
context
==
null
)
return
false
;
Uri
uri
=
Uri
.
parse
(
"appStore://details?id="
+
larkPkg
);
Intent
intent
=
new
Intent
(
Intent
.
ACTION_VIEW
,
uri
);
intent
.
addFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
);
return
getAvailableIntentSize
(
context
,
intent
)
>
0
;
}
/**
* 跳转到应用商店的 lark 页面
* 默认跳转
*/
public
static
void
go2AppStoreAtLarkPage
(
final
Context
context
)
{
if
(
context
==
null
)
return
;
try
{
Uri
uri
=
Uri
.
parse
(
"appStore://details?id="
+
larkPkg
);
Intent
intent
=
new
Intent
(
Intent
.
ACTION_VIEW
,
uri
);
intent
.
addFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
);
int
availableIntentSize
=
getAvailableIntentSize
(
context
,
intent
);
if
(
availableIntentSize
==
0
)
{
LogUtils
.
e
(
TAG
,
"No app store!"
);
}
else
if
(
availableIntentSize
==
1
)
{
context
.
startActivity
(
intent
);
LogUtils
.
e
(
TAG
,
"Show app store"
);
}
else
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
N
)
{
int
systemSize
=
context
.
getPackageManager
()
.
queryIntentActivities
(
intent
,
PackageManager
.
MATCH_SYSTEM_ONLY
)
.
size
();
// 获取系统商店个数
if
(
systemSize
>
0
)
{
go2FirstAppStore
(
context
,
intent
,
PackageManager
.
MATCH_SYSTEM_ONLY
);
return
;
}
}
go2AppStoreWithPriority
(
context
,
intent
);
}
}
catch
(
Exception
e
)
{
LogUtils
.
e
(
TAG
,
e
.
toString
());
}
}
private
static
void
go2AppStoreWithPriority
(
final
Context
context
,
final
Intent
intent
)
{
if
(
appStore
==
null
)
{
appStore
=
new
ArrayMap
<>();
appStore
.
put
(
"yingyongbao"
,
"com.tencent.android.qqdownloader"
);
appStore
.
put
(
"360"
,
"com.qihoo.appstore"
);
appStore
.
put
(
"wandoujia"
,
"com.wandoujia.phoenix2"
);
appStore
.
put
(
"xiaomi"
,
"com.xiaomi.shop"
);
appStore
.
put
(
"oppo"
,
"com.oppo.appStore"
);
appStore
.
put
(
"huawei"
,
"com.huawei.appmarket"
);
appStore
.
put
(
"meizu"
,
"com.meizu.mstore"
);
appStore
.
put
(
"vivo"
,
"com.bbk.appstore"
);
appStore
.
put
(
"sanxing"
,
"com.sec.android.app.samsungapps"
);
appStore
.
put
(
"baidu"
,
"com.baidu.appsearch"
);
appStore
.
put
(
"sougou"
,
"com.sogou.appmall"
);
appStore
.
put
(
"yingyonghui"
,
"com.yingyonghui.appStore"
);
appStore
.
put
(
"anzhi"
,
"cn.goapk.appStore"
);
}
List
<
String
>
list
=
getAppStoreList
();
if
(
list
==
null
||
list
.
isEmpty
())
{
// 商店列表为空则默认跳转到第一个
go2FirstAppStore
(
context
,
intent
,
PackageManager
.
MATCH_DEFAULT_ONLY
);
return
;
}
for
(
String
s
:
list
)
{
String
pkgName
=
appStore
.
get
(
s
);
if
(
pkgName
!=
null
)
{
intent
.
setPackage
(
pkgName
);
if
(
getAvailableIntentSize
(
context
,
intent
)
>
0
)
{
go2FirstAppStore
(
context
,
intent
,
PackageManager
.
MATCH_DEFAULT_ONLY
);
return
;
}
}
}
go2FirstAppStore
(
context
,
intent
,
PackageManager
.
MATCH_DEFAULT_ONLY
);
}
private
static
List
<
String
>
getAppStoreList
()
{
return
null
;
}
private
static
void
go2FirstAppStore
(
Context
context
,
Intent
intent
,
int
matchDefaultOnly
)
{
String
packageName
=
context
.
getPackageManager
()
.
queryIntentActivities
(
intent
,
matchDefaultOnly
)
.
get
(
0
).
activityInfo
.
packageName
;
intent
.
setPackage
(
packageName
);
context
.
startActivity
(
intent
);
}
private
static
int
getAvailableIntentSize
(
Context
context
,
final
Intent
intent
)
{
return
context
.
getPackageManager
()
.
queryIntentActivities
(
intent
,
PackageManager
.
MATCH_DEFAULT_ONLY
)
.
size
();
}
}
utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt
浏览文件 @
08ddfce5
...
...
@@ -59,7 +59,7 @@ class PermissionActivity : BaseTitleActivity() {
override
fun
onResume
()
{
super
.
onResume
()
updateAboutPermission
(
)
Utils
.
runOnUiThreadDelayed
(
Runnable
(
this
@PermissionActivity
::
updateAboutPermission
),
100
)
}
override
fun
doBusiness
()
{}
...
...
@@ -182,6 +182,5 @@ class PermissionActivity : BaseTitleActivity() {
appendLine
(
"DRAW_OVERLAYS: "
+
PermissionUtils
.
isGrantedDrawOverlays
())
}
}
.
create
()
}
}
utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
浏览文件 @
08ddfce5
...
...
@@ -28,7 +28,6 @@ object DialogHelper {
fun
showRationaleDialog
(
shouldRequest
:
ShouldRequest
)
{
val
topActivity
=
ActivityUtils
.
getTopActivity
()
if
(!
ActivityUtils
.
isActivityAlive
(
topActivity
))
return
AlertDialog
.
Builder
(
topActivity
)
.
setTitle
(
android
.
R
.
string
.
dialog_alert_title
)
.
setMessage
(
R
.
string
.
permission_rationale_message
)
...
...
@@ -41,7 +40,6 @@ object DialogHelper {
fun
showOpenAppSettingDialog
()
{
val
topActivity
=
ActivityUtils
.
getTopActivity
()
if
(!
ActivityUtils
.
isActivityAlive
(
topActivity
))
return
AlertDialog
.
Builder
(
topActivity
)
.
setTitle
(
android
.
R
.
string
.
dialog_alert_title
)
.
setMessage
(
R
.
string
.
permission_denied_forever_message
)
...
...
@@ -54,7 +52,6 @@ object DialogHelper {
fun
showKeyboardDialog
()
{
val
topActivity
=
ActivityUtils
.
getTopActivity
()
if
(!
ActivityUtils
.
isActivityAlive
(
topActivity
))
return
val
dialog
=
Dialog
(
topActivity
)
val
dialogView
=
LayoutInflater
.
from
(
topActivity
).
inflate
(
R
.
layout
.
dialog_keyboard
,
null
)
...
...
@@ -94,7 +91,6 @@ object DialogHelper {
fun
showFragmentDialog
(
info
:
CharSequence
)
{
val
topActivity
=
ActivityUtils
.
getTopActivity
()
if
(!
ActivityUtils
.
isActivityAlive
(
topActivity
))
return
val
dialogView
=
LayoutInflater
.
from
(
topActivity
).
inflate
(
R
.
layout
.
dialog_fragment
,
null
)
val
aboutTv
=
dialogView
.
findViewById
<
TextView
>(
R
.
id
.
fragmentDialogAboutTv
)
aboutTv
.
movementMethod
=
ScrollingMovementMethod
.
getInstance
()
...
...
@@ -105,7 +101,6 @@ object DialogHelper {
fun
showScreenshotDialog
(
screenshot
:
Bitmap
)
{
val
topActivity
=
ActivityUtils
.
getTopActivity
()
if
(!
ActivityUtils
.
isActivityAlive
(
topActivity
))
return
val
dialogView
=
LayoutInflater
.
from
(
topActivity
).
inflate
(
R
.
layout
.
dialog_screen
,
null
)
val
screenshotIv
=
dialogView
.
findViewById
<
ImageView
>(
R
.
id
.
screenDialogScreenshotIv
)
screenshotIv
.
setImageBitmap
(
screenshot
)
...
...
@@ -115,7 +110,6 @@ object DialogHelper {
fun
showToastDialog
()
{
val
topActivity
=
ActivityUtils
.
getTopActivity
()
if
(!
ActivityUtils
.
isActivityAlive
(
topActivity
))
return
val
dialogView
=
LayoutInflater
.
from
(
topActivity
).
inflate
(
R
.
layout
.
dialog_toast
,
null
)
dialogView
.
findViewById
<
Button
>(
R
.
id
.
toastDialogShowShortToastBtn
)
.
setOnClickListener
{
ToastUtils
.
showShort
(
"Short"
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录