Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiaoxuan_i809
AndroidUtilCode
提交
e3842d2a
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,体验更适合开发者的 AI 搜索 >>
提交
e3842d2a
编写于
5月 21, 2020
作者:
B
Blankj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
see 05/21 log
上级
0c5a6149
变更
40
隐藏空白更改
内联
并排
Showing
40 changed file
with
632 addition
and
285 deletion
+632
-285
CHANGELOG.md
CHANGELOG.md
+4
-0
buildSrc/src/main/groovy/Config.groovy
buildSrc/src/main/groovy/Config.groovy
+12
-12
buildSrc/src/main/groovy/DepConfig.groovy
buildSrc/src/main/groovy/DepConfig.groovy
+1
-1
config.json
config.json
+3
-3
feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt
...blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt
+7
-7
feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt
...m/blankj/subutil/pkg/feature/location/LocationActivity.kt
+8
-7
feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/PermissionHelper.kt
...in/java/com/blankj/subutil/pkg/helper/PermissionHelper.kt
+0
-59
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt
.../java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt
+6
-0
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt
...n/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt
+7
-7
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt
...nkj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt
+9
-11
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
...va/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
+35
-4
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt
...om/blankj/utilcode/pkg/feature/network/NetworkActivity.kt
+1
-0
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt
...nkj/utilcode/pkg/feature/permission/PermissionActivity.kt
+4
-4
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt
...va/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt
+8
-7
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
.../main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
+4
-27
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/PermissionHelper.kt
...n/java/com/blankj/utilcode/pkg/helper/PermissionHelper.kt
+0
-63
feature/utilcode/pkg/src/main/res/drawable/bar_status_custom.xml
.../utilcode/pkg/src/main/res/drawable/bar_status_custom.xml
+4
-3
lib/common/src/main/java/com/blankj/common/helper/PermissionHelper.kt
...rc/main/java/com/blankj/common/helper/PermissionHelper.kt
+82
-0
lib/utilcode/README-CN.md
lib/utilcode/README-CN.md
+3
-3
lib/utilcode/README.md
lib/utilcode/README.md
+2
-2
lib/utilcode/src/main/AndroidManifest.xml
lib/utilcode/src/main/AndroidManifest.xml
+6
-0
lib/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java
...code/src/main/java/com/blankj/utilcode/util/AppUtils.java
+31
-8
lib/utilcode/src/main/java/com/blankj/utilcode/util/FileIOUtils.java
...e/src/main/java/com/blankj/utilcode/util/FileIOUtils.java
+5
-1
lib/utilcode/src/main/java/com/blankj/utilcode/util/FileUtils.java
...ode/src/main/java/com/blankj/utilcode/util/FileUtils.java
+12
-11
lib/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java
...de/src/main/java/com/blankj/utilcode/util/ImageUtils.java
+169
-5
lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java
...e/src/main/java/com/blankj/utilcode/util/IntentUtils.java
+11
-1
lib/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
.../src/main/java/com/blankj/utilcode/util/NetworkUtils.java
+22
-0
lib/utilcode/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
...c/main/java/com/blankj/utilcode/util/PermissionUtils.java
+29
-6
lib/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java
...de/src/main/java/com/blankj/utilcode/util/ToastUtils.java
+10
-2
lib/utilcode/src/main/java/com/blankj/utilcode/util/UriUtils.java
...code/src/main/java/com/blankj/utilcode/util/UriUtils.java
+44
-11
lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsBridge.java
...e/src/main/java/com/blankj/utilcode/util/UtilsBridge.java
+21
-0
lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsTransActivity.java
...ain/java/com/blankj/utilcode/util/UtilsTransActivity.java
+22
-12
lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsTransActivity4MainProcess.java
.../blankj/utilcode/util/UtilsTransActivity4MainProcess.java
+35
-0
plugin/api-gradle-plugin/CHANGELOG.md
plugin/api-gradle-plugin/CHANGELOG.md
+3
-0
plugin/api-gradle-plugin/README.md
plugin/api-gradle-plugin/README.md
+1
-1
plugin/api-gradle-plugin/build.gradle
plugin/api-gradle-plugin/build.gradle
+2
-2
plugin/bus-gradle-plugin/CHANGELOG.md
plugin/bus-gradle-plugin/CHANGELOG.md
+3
-0
plugin/bus-gradle-plugin/README.md
plugin/bus-gradle-plugin/README.md
+1
-1
plugin/bus-gradle-plugin/build.gradle
plugin/bus-gradle-plugin/build.gradle
+2
-2
settings.gradle
settings.gradle
+3
-2
未找到文件。
CHANGELOG.md
浏览文件 @
e3842d2a
*
`20/05/21`
[add] Publish bus plugin v2.6. Publish api plugin v1.4. Publish. Publish 1.28.5.
*
`20/05/19`
[fix] FileUtils#copyOrMoveDird NPE.
*
`20/05/18`
[add] IntentUtils#getLaunchAppDetailsSettingsIntent support isNewTask.
*
`20/05/17`
[add] ImageUtils#save2Album, NetworkUtils#getSSID, UtilsTransActivity4MainProcess.
*
`20/05/03`
[add] Publish bus plugin v2.5. Publish api plugin v1.3. Publish. Publish 1.28.4.
*
`20/04/30`
[add] BaseItem support partialUpdate.
*
`20/04/29`
[add] Publish plugin lib com.blankj:base-transform:1.0.
...
...
buildSrc/src/main/groovy/Config.groovy
浏览文件 @
e3842d2a
...
...
@@ -14,8 +14,8 @@ class Config {
static
compileSdkVersion
=
29
static
minSdkVersion
=
14
static
targetSdkVersion
=
29
static
versionCode
=
1
_028_00
2
static
versionName
=
'1.28.
4
'
// E.g. 1.9.72 => 1,009,072
static
versionCode
=
1
_028_00
5
static
versionName
=
'1.28.
5
'
// E.g. 1.9.72 => 1,009,072
// lib version
static
gradlePluginVersion
=
'3.5.0'
...
...
@@ -25,9 +25,9 @@ class Config {
static
depConfig
=
[
/*Never delete this line*/
/*Generated by "config.json"*/
plugin_api_gradle_plugin
:
new
DepConfig
(
false
,
true
,
":plugin:api-gradle-plugin"
),
plugin_bus_gradle_plugin
:
new
DepConfig
(
false
,
true
,
":plugin:bus-gradle-plugin"
),
plugin_lib_base_transform
:
new
DepConfig
(
false
,
true
,
":plugin:lib:base-transform"
,
"com.blankj:base-transform:1.0"
),
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"
),
...
...
@@ -53,12 +53,12 @@ class Config {
// 上传新版本插件更新 pluginPath 中的版本号,并设置 isApply = false
// 通过 mavenLocal 上传本地版本,设置 isApply = true 即可应用插件来调试,最后通过 bintrayUpload 来发布插件
plugin_api
:
new
DepConfig
(
isApply:
true
,
useLocal:
false
,
pluginPath:
"com.blankj:api-gradle-plugin:1.
3
"
,
pluginId:
"com.blankj.api"
),
//./gradlew clean
plugin
:plugin_api-gradle-plugin:mavenLocal // 上传到本地 mavenLocal
//./gradlew clean
plugin
:plugin_api-gradle-plugin:bintrayUpload // 上传到 jcenter
plugin_bus
:
new
DepConfig
(
isApply:
true
,
useLocal:
false
,
pluginPath:
"com.blankj:bus-gradle-plugin:2.
5
"
,
pluginId:
"com.blankj.bus"
),
//./gradlew clean
plugin
:plugin_bus-gradle-plugin:mavenLocal // 上传到本地 mavenLocal
//./gradlew clean
plugin
:plugin_bus-gradle-plugin:bintrayUpload // 上传到 jcenter
plugin_api
:
new
DepConfig
(
isApply:
true
,
useLocal:
false
,
pluginPath:
"com.blankj:api-gradle-plugin:1.
4
"
,
pluginId:
"com.blankj.api"
),
//./gradlew clean :plugin_api-gradle-plugin:mavenLocal // 上传到本地 mavenLocal
//./gradlew clean :plugin_api-gradle-plugin:bintrayUpload // 上传到 jcenter
plugin_bus
:
new
DepConfig
(
isApply:
true
,
useLocal:
false
,
pluginPath:
"com.blankj:bus-gradle-plugin:2.
6
"
,
pluginId:
"com.blankj.bus"
),
//./gradlew clean :plugin_bus-gradle-plugin:mavenLocal // 上传到本地 mavenLocal
//./gradlew clean :plugin_bus-gradle-plugin:bintrayUpload // 上传到 jcenter
support_appcompat_v7
:
new
DepConfig
(
"com.android.support:appcompat-v7:$supportVersion"
),
support_design
:
new
DepConfig
(
"com.android.support:design:$supportVersion"
),
...
...
@@ -86,4 +86,4 @@ class Config {
test_robolectric
:
new
DepConfig
(
"org.robolectric:robolectric:4.3.1"
),
]
}
//./gradlew clean lib:lib_utilcode:bintrayUpload
\ No newline at end of file
//./gradlew clean :lib_utilcode:bintrayUpload
\ No newline at end of file
buildSrc/src/main/groovy/DepConfig.groovy
浏览文件 @
e3842d2a
...
...
@@ -76,7 +76,7 @@ class DepConfig {
}
String
getProjectPath
()
{
return
localPath
.
substring
(
0
,
localPath
.
lastIndexOf
(
":"
))
+
":"
+
localPath
.
substring
(
1
).
replace
(
":"
,
"_"
)
return
":"
+
localPath
.
substring
(
1
).
replace
(
":"
,
"_"
)
}
@Override
...
...
config.json
浏览文件 @
e3842d2a
...
...
@@ -5,9 +5,9 @@
"pkgConfig"
:
[],
"proConfigDesc"
:
"proConfig 配置的是使用本地还是仓库,优先级低于 appConfig 和 pkgConfig"
,
"proConfig"
:
[
{
"isApply"
:
fals
e
,
"useLocal"
:
true
,
"localPath"
:
":plugin:api-gradle-plugin"
},
{
"isApply"
:
fals
e
,
"useLocal"
:
true
,
"localPath"
:
":plugin:bus-gradle-plugin"
},
{
"isApply"
:
false
,
"useLocal"
:
tru
e
,
"localPath"
:
":plugin:lib:base-transform"
,
"remotePath"
:
"com.blankj:base-transform:1.0"
},
{
"isApply"
:
tru
e
,
"useLocal"
:
true
,
"localPath"
:
":plugin:api-gradle-plugin"
},
{
"isApply"
:
tru
e
,
"useLocal"
:
true
,
"localPath"
:
":plugin:bus-gradle-plugin"
},
{
"isApply"
:
true
,
"useLocal"
:
fals
e
,
"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"
},
...
...
feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt
浏览文件 @
e3842d2a
...
...
@@ -3,13 +3,14 @@ package com.blankj.subutil.pkg.feature.dangerous
import
android.content.Context
import
android.content.Intent
import
com.blankj.common.activity.CommonActivity
import
com.blankj.common.helper.PermissionHelper
import
com.blankj.common.item.CommonItem
import
com.blankj.common.item.CommonItemClick
import
com.blankj.common.item.CommonItemSwitch
import
com.blankj.subutil.pkg.Config
import
com.blankj.subutil.pkg.R
import
com.blankj.subutil.pkg.helper.PermissionHelper
import
com.blankj.subutil.util.DangerousUtils
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.util.*
/**
...
...
@@ -24,16 +25,15 @@ class DangerousActivity : CommonActivity() {
companion
object
{
fun
start
(
context
:
Context
)
{
PermissionHelper
.
request
StorageAndSms
(
context
,
object
:
PermissionHelper
.
OnPermissionGrantedListener
{
override
fun
on
Permission
Granted
()
{
PermissionHelper
.
request
(
context
,
object
:
PermissionUtils
.
SimpleCallback
{
override
fun
onGranted
()
{
val
starter
=
Intent
(
context
,
DangerousActivity
::
class
.
java
)
context
.
startActivity
(
starter
)
}
},
object
:
PermissionHelper
.
OnPermissionDeniedListener
{
override
fun
onPermissionDenied
()
{
start
(
context
)
override
fun
onDenied
()
{
}
})
}
,
PermissionConstants
.
STORAGE
,
PermissionConstants
.
SMS
)
}
}
...
...
feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt
浏览文件 @
e3842d2a
...
...
@@ -6,11 +6,13 @@ import android.content.Intent
import
android.content.ServiceConnection
import
android.os.IBinder
import
com.blankj.common.activity.CommonActivity
import
com.blankj.common.helper.PermissionHelper
import
com.blankj.common.item.CommonItem
import
com.blankj.common.item.CommonItemTitle
import
com.blankj.subutil.pkg.R
import
com.blankj.
subutil.pkg.helper.PermissionHelper
import
com.blankj.
utilcode.constant.PermissionConstants
import
com.blankj.utilcode.util.CollectionUtils
import
com.blankj.utilcode.util.PermissionUtils
/**
* ```
...
...
@@ -24,16 +26,15 @@ class LocationActivity : CommonActivity() {
companion
object
{
fun
start
(
context
:
Context
)
{
PermissionHelper
.
request
Location
(
context
,
object
:
PermissionHelper
.
OnPermissionGrantedListener
{
override
fun
on
Permission
Granted
()
{
PermissionHelper
.
request
(
context
,
object
:
PermissionUtils
.
SimpleCallback
{
override
fun
onGranted
()
{
val
starter
=
Intent
(
context
,
LocationActivity
::
class
.
java
)
context
.
startActivity
(
starter
)
}
},
object
:
PermissionHelper
.
OnPermissionDeniedListener
{
override
fun
onPermissionDenied
()
{
start
(
context
)
override
fun
onDenied
()
{
}
})
}
,
PermissionConstants
.
LOCATION
)
}
}
...
...
feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/PermissionHelper.kt
已删除
100644 → 0
浏览文件 @
0c5a6149
package
com.blankj.subutil.pkg.helper
import
android.content.Context
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.util.LogUtils
import
com.blankj.utilcode.util.PermissionUtils
/**
* ```
* author: Blankj
* blog : http://blankj.com
* time : 2018/01/06
* desc : helper about permission
* ```
*/
object
PermissionHelper
{
fun
requestStorageAndSms
(
context
:
Context
,
listener
:
OnPermissionGrantedListener
,
deniedListener
:
OnPermissionDeniedListener
)
{
request
(
context
,
listener
,
deniedListener
,
PermissionConstants
.
STORAGE
,
PermissionConstants
.
SMS
)
}
fun
requestLocation
(
context
:
Context
,
listener
:
OnPermissionGrantedListener
,
deniedListener
:
OnPermissionDeniedListener
)
{
request
(
context
,
listener
,
deniedListener
,
PermissionConstants
.
LOCATION
)
}
private
fun
request
(
context
:
Context
,
grantedListener
:
OnPermissionGrantedListener
?,
deniedListener
:
OnPermissionDeniedListener
?,
@PermissionConstants
.
Permission
vararg
permissions
:
String
)
{
PermissionUtils
.
permission
(*
permissions
)
.
rationale
{
activity
,
shouldRequest
->
DialogHelper
.
showRationaleDialog
(
activity
,
shouldRequest
)
}
.
callback
(
object
:
PermissionUtils
.
FullCallback
{
override
fun
onGranted
(
permissionsGranted
:
List
<
String
>)
{
LogUtils
.
d
(
permissionsGranted
)
grantedListener
?.
onPermissionGranted
()
}
override
fun
onDenied
(
permissionsDeniedForever
:
List
<
String
>,
permissionsDenied
:
List
<
String
>)
{
LogUtils
.
d
(
permissionsDeniedForever
,
permissionsDenied
)
if
(!
permissionsDeniedForever
.
isEmpty
())
{
DialogHelper
.
showOpenAppSettingDialog
(
context
)
return
}
deniedListener
?.
onPermissionDenied
()
}
})
.
request
()
}
interface
OnPermissionGrantedListener
{
fun
onPermissionGranted
()
}
interface
OnPermissionDeniedListener
{
fun
onPermissionDenied
()
}
}
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt
浏览文件 @
e3842d2a
...
...
@@ -47,6 +47,7 @@ import com.blankj.utilcode.pkg.feature.toast.ToastActivity
import
com.blankj.utilcode.pkg.feature.uiMessage.UiMessageActivity
import
com.blankj.utilcode.pkg.feature.vibrate.VibrateActivity
import
com.blankj.utilcode.util.CollectionUtils
import
com.blankj.utilcode.util.LogUtils
import
com.blankj.utilcode.util.UtilsTransActivity
/**
...
...
@@ -200,4 +201,9 @@ class CoreUtilActivity : CommonActivity() {
}
)
}
override
fun
onActivityResult
(
requestCode
:
Int
,
resultCode
:
Int
,
data
:
Intent
?)
{
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
)
LogUtils
.
e
(
requestCode
,
requestCode
)
}
}
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt
浏览文件 @
e3842d2a
...
...
@@ -3,13 +3,14 @@ package com.blankj.utilcode.pkg.feature.app
import
android.content.Context
import
android.content.Intent
import
com.blankj.common.activity.CommonActivity
import
com.blankj.common.helper.PermissionHelper
import
com.blankj.common.item.CommonItem
import
com.blankj.common.item.CommonItemClick
import
com.blankj.common.item.CommonItemImage
import
com.blankj.common.item.CommonItemTitle
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.pkg.Config
import
com.blankj.utilcode.pkg.R
import
com.blankj.utilcode.pkg.helper.PermissionHelper
import
com.blankj.utilcode.util.*
/**
...
...
@@ -24,16 +25,15 @@ class AppActivity : CommonActivity() {
companion
object
{
fun
start
(
context
:
Context
)
{
PermissionHelper
.
request
Storage
(
context
,
object
:
PermissionHelper
.
OnPermissionGrantedListener
{
override
fun
on
Permission
Granted
()
{
PermissionHelper
.
request
(
context
,
object
:
PermissionUtils
.
SimpleCallback
{
override
fun
onGranted
()
{
val
starter
=
Intent
(
context
,
AppActivity
::
class
.
java
)
context
.
startActivity
(
starter
)
}
},
object
:
PermissionHelper
.
OnPermissionDeniedListener
{
override
fun
onPermissionDenied
()
{
start
(
context
)
override
fun
onDenied
()
{
}
})
}
,
PermissionConstants
.
STORAGE
)
}
}
...
...
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt
浏览文件 @
e3842d2a
...
...
@@ -3,15 +3,13 @@ package com.blankj.utilcode.pkg.feature.flashlight
import
android.content.Context
import
android.content.Intent
import
com.blankj.common.activity.CommonActivity
import
com.blankj.common.helper.PermissionHelper
import
com.blankj.common.item.CommonItem
import
com.blankj.common.item.CommonItemSwitch
import
com.blankj.common.item.CommonItemTitle
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.pkg.R
import
com.blankj.utilcode.pkg.helper.PermissionHelper
import
com.blankj.utilcode.util.CollectionUtils
import
com.blankj.utilcode.util.FlashlightUtils
import
com.blankj.utilcode.util.ToastUtils
import
com.blankj.utilcode.util.Utils
import
com.blankj.utilcode.util.*
/**
* ```
...
...
@@ -29,16 +27,16 @@ class FlashlightActivity : CommonActivity() {
ToastUtils
.
showLong
(
"Didn't support flashlight."
)
return
}
PermissionHelper
.
request
Camera
(
context
,
object
:
PermissionHelper
.
OnPermissionGrantedListener
{
override
fun
on
Permission
Granted
()
{
PermissionHelper
.
request
(
context
,
object
:
PermissionUtils
.
SimpleCallback
{
override
fun
onGranted
()
{
val
starter
=
Intent
(
context
,
FlashlightActivity
::
class
.
java
)
context
.
startActivity
(
starter
)
}
},
object
:
PermissionHelper
.
OnPermissionDeniedListener
{
override
fun
on
Permission
Denied
()
{
start
(
context
)
override
fun
onDenied
()
{
LogUtils
.
e
(
"permission denied"
)
}
})
}
,
PermissionConstants
.
CAMERA
)
}
}
...
...
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
浏览文件 @
e3842d2a
...
...
@@ -8,13 +8,16 @@ import android.os.Build
import
android.os.Bundle
import
android.view.View
import
com.blankj.common.activity.CommonActivity
import
com.blankj.common.helper.PermissionHelper
import
com.blankj.common.item.CommonItem
import
com.blankj.common.item.CommonItemClick
import
com.blankj.common.item.CommonItemImage
import
com.blankj.common.item.CommonItemTitle
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.pkg.Config
import
com.blankj.utilcode.pkg.R
import
com.blankj.utilcode.util.*
import
java.io.File
import
java.util.*
/**
...
...
@@ -32,8 +35,15 @@ class ImageActivity : CommonActivity() {
companion
object
{
fun
start
(
context
:
Context
)
{
val
starter
=
Intent
(
context
,
ImageActivity
::
class
.
java
)
context
.
startActivity
(
starter
)
PermissionHelper
.
request
(
context
,
object
:
PermissionUtils
.
SimpleCallback
{
override
fun
onGranted
()
{
val
starter
=
Intent
(
context
,
ImageActivity
::
class
.
java
)
context
.
startActivity
(
starter
)
}
override
fun
onDenied
()
{
}
},
PermissionConstants
.
STORAGE
)
}
}
...
...
@@ -79,10 +89,31 @@ class ImageActivity : CommonActivity() {
.
apply
{
if
(
result
)
{
setMessage
(
"save successful."
)
.
showSuccess
()
.
showSuccess
(
true
)
}
else
{
setMessage
(
"save failed."
)
.
showError
(
true
)
}
}
}
})
})
add
(
CommonItemClick
(
"Save to Album"
)
{
ThreadUtils
.
executeBySingle
(
object
:
ThreadUtils
.
SimpleTask
<
File
?
>()
{
override
fun
doInBackground
():
File
?
{
return
ImageUtils
.
save2Album
(
src
,
Bitmap
.
CompressFormat
.
JPEG
)
}
override
fun
onSuccess
(
result
:
File
?)
{
SnackbarUtils
.
with
(
mContentView
)
.
setDuration
(
SnackbarUtils
.
LENGTH_LONG
)
.
apply
{
if
(
result
!=
null
)
{
setMessage
(
"save successful."
)
.
showSuccess
(
true
)
}
else
{
setMessage
(
"save failed."
)
.
showError
()
.
showError
(
true
)
}
}
}
...
...
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt
浏览文件 @
e3842d2a
...
...
@@ -65,6 +65,7 @@ class NetworkActivity : CommonActivity(), NetworkUtils.OnNetworkStatusChangedLis
CommonItemTitle
(
"getGatewayByWifi"
,
NetworkUtils
.
getGatewayByWifi
()),
CommonItemTitle
(
"getNetMaskByWifi"
,
NetworkUtils
.
getNetMaskByWifi
()),
CommonItemTitle
(
"getServerAddressByWifi"
,
NetworkUtils
.
getServerAddressByWifi
()),
CommonItemTitle
(
"getSSID"
,
NetworkUtils
.
getSSID
()),
CommonItemTitle
(
"getIPv4Address"
,
NetworkUtils
.
getIPAddress
(
true
)),
CommonItemTitle
(
"getIPv6Address"
,
NetworkUtils
.
getIPAddress
(
false
)),
...
...
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt
浏览文件 @
e3842d2a
...
...
@@ -5,13 +5,13 @@ import android.content.Context
import
android.content.Intent
import
android.os.Build
import
com.blankj.common.activity.CommonActivity
import
com.blankj.common.helper.PermissionHelper
import
com.blankj.common.item.CommonItem
import
com.blankj.common.item.CommonItemClick
import
com.blankj.common.item.CommonItemSwitch
import
com.blankj.common.item.CommonItemTitle
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.pkg.R
import
com.blankj.utilcode.pkg.helper.DialogHelper
import
com.blankj.utilcode.util.*
/**
...
...
@@ -106,7 +106,7 @@ class PermissionActivity : CommonActivity() {
private
fun
requestCalendar
()
{
PermissionUtils
.
permission
(
PermissionConstants
.
CALENDAR
)
.
rationale
{
activity
,
shouldRequest
->
Dialog
Helper
.
showRationaleDialog
(
activity
,
shouldRequest
)
}
.
rationale
{
activity
,
shouldRequest
->
Permission
Helper
.
showRationaleDialog
(
activity
,
shouldRequest
)
}
.
callback
(
object
:
PermissionUtils
.
FullCallback
{
override
fun
onGranted
(
permissionsGranted
:
List
<
String
>)
{
LogUtils
.
d
(
permissionsGranted
)
...
...
@@ -131,7 +131,7 @@ class PermissionActivity : CommonActivity() {
private
fun
requestRecordAudio
()
{
PermissionUtils
.
permission
(
PermissionConstants
.
MICROPHONE
)
.
rationale
{
activity
,
shouldRequest
->
Dialog
Helper
.
showRationaleDialog
(
activity
,
shouldRequest
)
}
.
rationale
{
activity
,
shouldRequest
->
Permission
Helper
.
showRationaleDialog
(
activity
,
shouldRequest
)
}
.
callback
(
object
:
PermissionUtils
.
FullCallback
{
override
fun
onGranted
(
permissionsGranted
:
List
<
String
>)
{
LogUtils
.
d
(
permissionsGranted
)
...
...
@@ -155,7 +155,7 @@ class PermissionActivity : CommonActivity() {
private
fun
requestCalendarAndRecordAudio
()
{
PermissionUtils
.
permission
(
PermissionConstants
.
CALENDAR
,
PermissionConstants
.
MICROPHONE
)
.
rationale
{
activity
,
shouldRequest
->
Dialog
Helper
.
showRationaleDialog
(
activity
,
shouldRequest
)
}
.
rationale
{
activity
,
shouldRequest
->
Permission
Helper
.
showRationaleDialog
(
activity
,
shouldRequest
)
}
.
callback
(
object
:
PermissionUtils
.
FullCallback
{
override
fun
onGranted
(
permissionsGranted
:
List
<
String
>)
{
LogUtils
.
d
(
permissionsGranted
)
...
...
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt
浏览文件 @
e3842d2a
...
...
@@ -3,12 +3,14 @@ package com.blankj.utilcode.pkg.feature.phone
import
android.content.Context
import
android.content.Intent
import
com.blankj.common.activity.CommonActivity
import
com.blankj.common.helper.PermissionHelper
import
com.blankj.common.item.CommonItem
import
com.blankj.common.item.CommonItemClick
import
com.blankj.common.item.CommonItemTitle
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.pkg.R
import
com.blankj.utilcode.pkg.helper.PermissionHelper
import
com.blankj.utilcode.util.CollectionUtils
import
com.blankj.utilcode.util.PermissionUtils
import
com.blankj.utilcode.util.PhoneUtils
/**
...
...
@@ -23,16 +25,15 @@ class PhoneActivity : CommonActivity() {
companion
object
{
fun
start
(
context
:
Context
)
{
PermissionHelper
.
request
Phone
(
context
,
object
:
PermissionHelper
.
OnPermissionGrantedListener
{
override
fun
on
Permission
Granted
()
{
PermissionHelper
.
request
(
context
,
object
:
PermissionUtils
.
SimpleCallback
{
override
fun
onGranted
()
{
val
starter
=
Intent
(
context
,
PhoneActivity
::
class
.
java
)
context
.
startActivity
(
starter
)
}
},
object
:
PermissionHelper
.
OnPermissionDeniedListener
{
override
fun
onPermissionDenied
()
{
start
(
context
)
override
fun
onDenied
()
{
}
})
}
,
PermissionConstants
.
PHONE
)
}
}
...
...
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
浏览文件 @
e3842d2a
...
...
@@ -6,7 +6,6 @@ import android.graphics.Bitmap
import
android.graphics.drawable.ColorDrawable
import
android.support.v4.app.FragmentActivity
import
android.text.method.ScrollingMovementMethod
import
android.util.Pair
import
android.view.Gravity
import
android.view.View
import
android.view.Window
...
...
@@ -16,9 +15,11 @@ import android.widget.ImageView
import
android.widget.TextView
import
com.blankj.base.dialog.BaseDialogFragment
import
com.blankj.base.dialog.DialogLayoutCallback
import
com.blankj.common.dialog.CommonDialogContent
import
com.blankj.utilcode.pkg.R
import
com.blankj.utilcode.util.*
import
com.blankj.utilcode.util.ActivityUtils
import
com.blankj.utilcode.util.KeyboardUtils
import
com.blankj.utilcode.util.ScreenUtils
import
com.blankj.utilcode.util.ToastUtils
/**
* ```
...
...
@@ -30,30 +31,6 @@ import com.blankj.utilcode.util.*
*/
object
DialogHelper
{
fun
showRationaleDialog
(
context
:
Context
,
shouldRequest
:
PermissionUtils
.
OnRationaleListener
.
ShouldRequest
)
{
CommonDialogContent
().
init
(
context
,
StringUtils
.
getString
(
android
.
R
.
string
.
dialog_alert_title
),
StringUtils
.
getString
(
R
.
string
.
permission_rationale_message
),
Pair
(
StringUtils
.
getString
(
android
.
R
.
string
.
ok
),
View
.
OnClickListener
{
shouldRequest
.
again
(
true
)
}),
Pair
(
StringUtils
.
getString
(
android
.
R
.
string
.
cancel
),
View
.
OnClickListener
{
shouldRequest
.
again
(
false
)
})).
show
()
}
fun
showOpenAppSettingDialog
(
context
:
Context
)
{
CommonDialogContent
().
init
(
context
,
StringUtils
.
getString
(
android
.
R
.
string
.
dialog_alert_title
),
StringUtils
.
getString
(
R
.
string
.
permission_denied_forever_message
),
Pair
(
StringUtils
.
getString
(
android
.
R
.
string
.
ok
),
View
.
OnClickListener
{
PermissionUtils
.
launchAppDetailsSettings
()
}),
Pair
(
StringUtils
.
getString
(
android
.
R
.
string
.
cancel
),
View
.
OnClickListener
{
}))
.
show
()
}
fun
showKeyboardDialog
(
context
:
Context
)
{
BaseDialogFragment
().
init
(
context
,
object
:
DialogLayoutCallback
{
override
fun
bindTheme
():
Int
{
...
...
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/PermissionHelper.kt
已删除
100644 → 0
浏览文件 @
0c5a6149
package
com.blankj.utilcode.pkg.helper
import
android.content.Context
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.util.LogUtils
import
com.blankj.utilcode.util.PermissionUtils
/**
* ```
* author: Blankj
* blog : http://blankj.com
* time : 2018/01/06
* desc : helper about permission
* ```
*/
object
PermissionHelper
{
fun
requestCamera
(
context
:
Context
,
listener
:
OnPermissionGrantedListener
,
deniedListener
:
OnPermissionDeniedListener
)
{
request
(
context
,
listener
,
deniedListener
,
PermissionConstants
.
CAMERA
)
}
fun
requestStorage
(
context
:
Context
,
listener
:
OnPermissionGrantedListener
,
deniedListener
:
OnPermissionDeniedListener
)
{
request
(
context
,
listener
,
deniedListener
,
PermissionConstants
.
STORAGE
)
}
fun
requestPhone
(
context
:
Context
,
listener
:
OnPermissionGrantedListener
,
deniedListener
:
OnPermissionDeniedListener
)
{
request
(
context
,
listener
,
deniedListener
,
PermissionConstants
.
PHONE
)
}
private
fun
request
(
context
:
Context
,
grantedListener
:
OnPermissionGrantedListener
,
deniedListener
:
OnPermissionDeniedListener
,
@PermissionConstants
.
Permission
vararg
permissions
:
String
)
{
PermissionUtils
.
permission
(*
permissions
)
.
rationale
{
activity
,
shouldRequest
->
DialogHelper
.
showRationaleDialog
(
activity
,
shouldRequest
)
}
.
callback
(
object
:
PermissionUtils
.
FullCallback
{
override
fun
onGranted
(
permissionsGranted
:
List
<
String
>)
{
LogUtils
.
d
(
permissionsGranted
)
grantedListener
.
onPermissionGranted
()
}
override
fun
onDenied
(
permissionsDeniedForever
:
List
<
String
>,
permissionsDenied
:
List
<
String
>)
{
LogUtils
.
d
(
permissionsDeniedForever
,
permissionsDenied
)
if
(!
permissionsDeniedForever
.
isEmpty
())
{
DialogHelper
.
showOpenAppSettingDialog
(
context
)
return
}
deniedListener
.
onPermissionDenied
()
}
})
.
request
()
}
interface
OnPermissionGrantedListener
{
fun
onPermissionGranted
()
}
interface
OnPermissionDeniedListener
{
fun
onPermissionDenied
()
}
}
feature/utilcode/pkg/src/main/res/drawable/bar_status_custom.xml
浏览文件 @
e3842d2a
...
...
@@ -2,8 +2,9 @@
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<gradient
android:centerColor=
"@color/colorPrimary"
android:endColor=
"@android:color/transparent"
android:startColor=
"@android:color/transparent"
/>
android:angle=
"180"
android:centerColor=
"@android:color/transparent"
android:endColor=
"@color/colorPrimary"
android:startColor=
"@color/colorPrimary"
/>
</shape>
\ No newline at end of file
feature/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/Dialog
Helper.kt
→
lib/common/src/main/java/com/blankj/common/helper/Permission
Helper.kt
浏览文件 @
e3842d2a
package
com.blankj.
subutil.pkg
.helper
package
com.blankj.
common
.helper
import
android.content.Context
import
android.util.Pair
import
android.view.View
import
com.blankj.common.R
import
com.blankj.common.dialog.CommonDialogContent
import
com.blankj.subutil.pkg.R
import
com.blankj.utilcode.util.PermissionUtils
import
com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldRequest
import
com.blankj.utilcode.util.StringUtils
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.util.*
/**
* ```
* author: Blankj
* blog : http://blankj.com
* time : 2018/01/
10
* desc : helper about
dialog
* time : 2018/01/
06
* desc : helper about
permission
* ```
*/
object
Dialog
Helper
{
object
Permission
Helper
{
fun
showRationaleDialog
(
context
:
Context
,
shouldRequest
:
ShouldRequest
)
{
fun
request
(
context
:
Context
,
callback
:
PermissionUtils
.
SimpleCallback
,
@PermissionConstants
.
Permission
vararg
permissions
:
String
)
{
PermissionUtils
.
permission
(*
permissions
)
.
rationale
{
activity
,
shouldRequest
->
showRationaleDialog
(
activity
,
shouldRequest
)
}
.
callback
(
object
:
PermissionUtils
.
SingleCallback
{
override
fun
callback
(
isAllGranted
:
Boolean
,
granted
:
MutableList
<
String
>,
deniedForever
:
MutableList
<
String
>,
denied
:
MutableList
<
String
>)
{
LogUtils
.
d
(
isAllGranted
,
granted
,
deniedForever
,
denied
)
if
(
isAllGranted
)
{
callback
.
onGranted
()
return
}
if
(
deniedForever
.
isNotEmpty
())
{
showOpenAppSettingDialog
(
context
)
return
}
val
activity
=
ActivityUtils
.
getActivityByContext
(
context
)
if
(
activity
!=
null
)
{
SnackbarUtils
.
with
(
activity
.
findViewById
(
android
.
R
.
id
.
content
))
.
setMessage
(
"Permission denied: ${permissions2String(denied)}"
)
.
showError
(
true
)
}
callback
.
onDenied
()
}
fun
permissions2String
(
permissions
:
MutableList
<
String
>):
String
{
if
(
permissions
.
isEmpty
())
return
"[]"
val
sb
:
StringBuilder
=
StringBuilder
()
for
(
permission
in
permissions
)
{
sb
.
append
(
", "
+
permission
.
substring
(
permission
.
lastIndexOf
(
'.'
)
+
1
))
}
return
"[${sb.substring(2)}]"
}
})
.
request
()
}
fun
showRationaleDialog
(
context
:
Context
,
shouldRequest
:
PermissionUtils
.
OnRationaleListener
.
ShouldRequest
)
{
CommonDialogContent
().
init
(
context
,
StringUtils
.
getString
(
android
.
R
.
string
.
dialog_alert_title
),
StringUtils
.
getString
(
R
.
string
.
permission_rationale_message
),
...
...
@@ -43,4 +79,4 @@ object DialogHelper {
}))
.
show
()
}
}
}
\ No newline at end of file
lib/utilcode/README-CN.md
浏览文件 @
e3842d2a
...
...
@@ -2,10 +2,10 @@
Gradle:
```
groovy
implementation
'com.blankj:utilcode:1.28.
4
'
implementation
'com.blankj:utilcode:1.28.
5
'
// if u use AndroidX, use the following
implementation
'com.blankj:utilcodex:1.28.
4
'
implementation
'com.blankj:utilcodex:1.28.
5
'
```
...
...
@@ -1160,7 +1160,7 @@ removeListener: 移除消息监听器
res2Uri : res 转 uri
file2Uri : file 转 uri
uri2File : uri 转 file
uri2
InputStream: uri 转 InputStream
uri2
Bytes : uri 转 bytes
```
*
### UtilsTransActivity ->
[
UtilsTransActivity.java
][
trans.java
]
...
...
lib/utilcode/README.md
浏览文件 @
e3842d2a
...
...
@@ -2,10 +2,10 @@
Gradle:
```
groovy
implementation
'com.blankj:utilcode:1.28.
4
'
implementation
'com.blankj:utilcode:1.28.
5
'
// if u use AndroidX, use the following
implementation
'com.blankj:utilcodex:1.28.
4
'
implementation
'com.blankj:utilcodex:1.28.
5
'
```
...
...
lib/utilcode/src/main/AndroidManifest.xml
浏览文件 @
e3842d2a
...
...
@@ -3,6 +3,12 @@
<application>
<activity
android:name=
"com.blankj.utilcode.util.UtilsTransActivity4MainProcess"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:theme=
"@style/ActivityTranslucent"
android:windowSoftInputMode=
"stateHidden|stateAlwaysHidden"
/>
<activity
android:name=
"com.blankj.utilcode.util.UtilsTransActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java
浏览文件 @
e3842d2a
package
com.blankj.utilcode.util
;
import
android.annotation.SuppressLint
;
import
android.app.Activity
;
import
android.app.ActivityManager
;
import
android.content.Context
;
import
android.content.Intent
;
...
...
@@ -9,8 +10,6 @@ import android.content.pm.PackageInfo;
import
android.content.pm.PackageManager
;
import
android.content.pm.Signature
;
import
android.graphics.drawable.Drawable
;
import
android.net.Uri
;
import
android.provider.Settings
;
import
android.support.annotation.NonNull
;
import
android.util.Log
;
...
...
@@ -278,13 +277,37 @@ public final class AppUtils {
/**
* Launch the application's details settings.
*
* @param p
ackage
Name The name of the package.
* @param p
kg
Name The name of the package.
*/
public
static
void
launchAppDetailsSettings
(
final
String
packageName
)
{
if
(
UtilsBridge
.
isSpace
(
packageName
))
return
;
Intent
intent
=
new
Intent
(
Settings
.
ACTION_APPLICATION_DETAILS_SETTINGS
);
intent
.
setData
(
Uri
.
parse
(
"package:"
+
packageName
));
Utils
.
getApp
().
startActivity
(
intent
.
addFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
));
public
static
void
launchAppDetailsSettings
(
final
String
pkgName
)
{
if
(
UtilsBridge
.
isSpace
(
pkgName
))
return
;
Intent
intent
=
UtilsBridge
.
getLaunchAppDetailsSettingsIntent
(
pkgName
,
true
);
if
(!
UtilsBridge
.
isIntentAvailable
(
intent
))
return
;
Utils
.
getApp
().
startActivity
(
intent
);
}
/**
* Launch the application's details settings.
*
* @param activity The activity.
* @param requestCode The requestCode.
*/
public
static
void
launchAppDetailsSettings
(
final
Activity
activity
,
final
int
requestCode
)
{
launchAppDetailsSettings
(
activity
,
requestCode
,
Utils
.
getApp
().
getPackageName
());
}
/**
* Launch the application's details settings.
*
* @param activity The activity.
* @param requestCode The requestCode.
* @param pkgName The name of the package.
*/
public
static
void
launchAppDetailsSettings
(
final
Activity
activity
,
final
int
requestCode
,
final
String
pkgName
)
{
if
(
activity
==
null
||
UtilsBridge
.
isSpace
(
pkgName
))
return
;
Intent
intent
=
UtilsBridge
.
getLaunchAppDetailsSettingsIntent
(
pkgName
,
false
);
if
(!
UtilsBridge
.
isIntentAvailable
(
intent
))
return
;
activity
.
startActivityForResult
(
intent
,
requestCode
);
}
/**
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/FileIOUtils.java
浏览文件 @
e3842d2a
...
...
@@ -376,7 +376,11 @@ public final class FileIOUtils {
final
byte
[]
bytes
,
final
boolean
append
,
final
boolean
isForce
)
{
if
(
bytes
==
null
||
!
UtilsBridge
.
createOrExistsFile
(
file
))
{
if
(
bytes
==
null
)
{
Log
.
e
(
"FileIOUtils"
,
"bytes is null."
);
return
false
;
}
if
(!
UtilsBridge
.
createOrExistsFile
(
file
))
{
Log
.
e
(
"FileIOUtils"
,
"create file <"
+
file
+
"> failed."
);
return
false
;
}
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/FileUtils.java
浏览文件 @
e3842d2a
...
...
@@ -430,12 +430,14 @@ public final class FileUtils {
if
(!
srcDir
.
exists
()
||
!
srcDir
.
isDirectory
())
return
false
;
if
(!
createOrExistsDir
(
destDir
))
return
false
;
File
[]
files
=
srcDir
.
listFiles
();
for
(
File
file
:
files
)
{
File
oneDestFile
=
new
File
(
destPath
+
file
.
getName
());
if
(
file
.
isFile
())
{
if
(!
copyOrMoveFile
(
file
,
oneDestFile
,
listener
,
isMove
))
return
false
;
}
else
if
(
file
.
isDirectory
())
{
if
(!
copyOrMoveDir
(
file
,
oneDestFile
,
listener
,
isMove
))
return
false
;
if
(
files
!=
null
&&
files
.
length
>
0
)
{
for
(
File
file
:
files
)
{
File
oneDestFile
=
new
File
(
destPath
+
file
.
getName
());
if
(
file
.
isFile
())
{
if
(!
copyOrMoveFile
(
file
,
oneDestFile
,
listener
,
isMove
))
return
false
;
}
else
if
(
file
.
isDirectory
())
{
if
(!
copyOrMoveDir
(
file
,
oneDestFile
,
listener
,
isMove
))
return
false
;
}
}
}
return
!
isMove
||
deleteDir
(
srcDir
);
...
...
@@ -506,7 +508,7 @@ public final class FileUtils {
// dir isn't a directory then return false
if
(!
dir
.
isDirectory
())
return
false
;
File
[]
files
=
dir
.
listFiles
();
if
(
files
!=
null
&&
files
.
length
!=
0
)
{
if
(
files
!=
null
&&
files
.
length
>
0
)
{
for
(
File
file
:
files
)
{
if
(
file
.
isFile
())
{
if
(!
file
.
delete
())
return
false
;
...
...
@@ -846,7 +848,7 @@ public final class FileUtils {
List
<
File
>
list
=
new
ArrayList
<>();
if
(!
isDir
(
dir
))
return
list
;
File
[]
files
=
dir
.
listFiles
();
if
(
files
!=
null
&&
files
.
length
!=
0
)
{
if
(
files
!=
null
&&
files
.
length
>
0
)
{
for
(
File
file
:
files
)
{
if
(
filter
.
accept
(
file
))
{
list
.
add
(
file
);
...
...
@@ -1169,7 +1171,7 @@ public final class FileUtils {
if
(!
isDir
(
dir
))
return
-
1
;
long
len
=
0
;
File
[]
files
=
dir
.
listFiles
();
if
(
files
!=
null
&&
files
.
length
!=
0
)
{
if
(
files
!=
null
&&
files
.
length
>
0
)
{
for
(
File
file
:
files
)
{
if
(
file
.
isDirectory
())
{
len
+=
getDirLength
(
file
);
...
...
@@ -1398,8 +1400,7 @@ public final class FileUtils {
public
static
void
notifySystemToScan
(
final
File
file
)
{
if
(
file
==
null
||
!
file
.
exists
())
return
;
Intent
intent
=
new
Intent
(
Intent
.
ACTION_MEDIA_SCANNER_SCAN_FILE
);
Uri
uri
=
Uri
.
fromFile
(
file
);
intent
.
setData
(
uri
);
intent
.
setData
(
Uri
.
parse
(
"file://"
+
file
.
getAbsolutePath
()));
Utils
.
getApp
().
sendBroadcast
(
intent
);
}
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java
浏览文件 @
e3842d2a
package
com.blankj.utilcode.util
;
import
android.Manifest
;
import
android.content.ContentValues
;
import
android.content.res.Resources
;
import
android.graphics.Bitmap
;
import
android.graphics.Bitmap.CompressFormat
;
...
...
@@ -22,7 +24,10 @@ import android.graphics.Shader;
import
android.graphics.drawable.BitmapDrawable
;
import
android.graphics.drawable.Drawable
;
import
android.media.ExifInterface
;
import
android.net.Uri
;
import
android.os.Build
;
import
android.os.Environment
;
import
android.provider.MediaStore
;
import
android.renderscript.Allocation
;
import
android.renderscript.Element
;
import
android.renderscript.RenderScript
;
...
...
@@ -32,6 +37,7 @@ import android.support.annotation.DrawableRes;
import
android.support.annotation.FloatRange
;
import
android.support.annotation.IntRange
;
import
android.support.annotation.NonNull
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.RequiresApi
;
import
android.support.v4.content.ContextCompat
;
import
android.util.Log
;
...
...
@@ -1501,7 +1507,7 @@ public final class ImageUtils {
public
static
boolean
save
(
final
Bitmap
src
,
final
String
filePath
,
final
CompressFormat
format
)
{
return
save
(
src
,
UtilsBridge
.
getFileByPath
(
filePath
),
format
,
false
);
return
save
(
src
,
filePath
,
format
,
100
,
false
);
}
/**
...
...
@@ -1513,7 +1519,7 @@ public final class ImageUtils {
* @return {@code true}: success<br>{@code false}: fail
*/
public
static
boolean
save
(
final
Bitmap
src
,
final
File
file
,
final
CompressFormat
format
)
{
return
save
(
src
,
file
,
format
,
false
);
return
save
(
src
,
file
,
format
,
100
,
false
);
}
/**
...
...
@@ -1529,7 +1535,7 @@ public final class ImageUtils {
final
String
filePath
,
final
CompressFormat
format
,
final
boolean
recycle
)
{
return
save
(
src
,
UtilsBridge
.
getFileByPath
(
filePath
),
format
,
recycle
);
return
save
(
src
,
filePath
,
format
,
100
,
recycle
);
}
/**
...
...
@@ -1545,7 +1551,91 @@ public final class ImageUtils {
final
File
file
,
final
CompressFormat
format
,
final
boolean
recycle
)
{
if
(
isEmptyBitmap
(
src
)
||
!
UtilsBridge
.
createFileByDeleteOldFile
(
file
))
{
return
save
(
src
,
file
,
format
,
100
,
recycle
);
}
/**
* Save the bitmap.
*
* @param src The source of bitmap.
* @param filePath The path of file.
* @param format The format of the image.
* @param quality Hint to the compressor, 0-100. 0 meaning compress for
* small size, 100 meaning compress for max quality. Some
* formats, like PNG which is lossless, will ignore the
* quality setting
* @return {@code true}: success<br>{@code false}: fail
*/
public
static
boolean
save
(
final
Bitmap
src
,
final
String
filePath
,
final
CompressFormat
format
,
final
int
quality
)
{
return
save
(
src
,
UtilsBridge
.
getFileByPath
(
filePath
),
format
,
quality
,
false
);
}
/**
* Save the bitmap.
*
* @param src The source of bitmap.
* @param file The file.
* @param format The format of the image.
* @return {@code true}: success<br>{@code false}: fail
*/
public
static
boolean
save
(
final
Bitmap
src
,
final
File
file
,
final
CompressFormat
format
,
final
int
quality
)
{
return
save
(
src
,
file
,
format
,
quality
,
false
);
}
/**
* Save the bitmap.
*
* @param src The source of bitmap.
* @param filePath The path of file.
* @param format The format of the image.
* @param quality Hint to the compressor, 0-100. 0 meaning compress for
* small size, 100 meaning compress for max quality. Some
* formats, like PNG which is lossless, will ignore the
* quality setting
* @param recycle True to recycle the source of bitmap, false otherwise.
* @return {@code true}: success<br>{@code false}: fail
*/
public
static
boolean
save
(
final
Bitmap
src
,
final
String
filePath
,
final
CompressFormat
format
,
final
int
quality
,
final
boolean
recycle
)
{
return
save
(
src
,
UtilsBridge
.
getFileByPath
(
filePath
),
format
,
quality
,
recycle
);
}
/**
* Save the bitmap.
*
* @param src The source of bitmap.
* @param file The file.
* @param format The format of the image.
* @param quality Hint to the compressor, 0-100. 0 meaning compress for
* small size, 100 meaning compress for max quality. Some
* formats, like PNG which is lossless, will ignore the
* quality setting
* @param recycle True to recycle the source of bitmap, false otherwise.
* @return {@code true}: success<br>{@code false}: fail
*/
public
static
boolean
save
(
final
Bitmap
src
,
final
File
file
,
final
CompressFormat
format
,
final
int
quality
,
final
boolean
recycle
)
{
if
(
isEmptyBitmap
(
src
))
{
Log
.
e
(
"ImageUtils"
,
"bitmap is empty."
);
return
false
;
}
if
(
src
.
isRecycled
())
{
Log
.
e
(
"ImageUtils"
,
"bitmap is recycled."
);
return
false
;
}
if
(!
UtilsBridge
.
createFileByDeleteOldFile
(
file
))
{
Log
.
e
(
"ImageUtils"
,
"create or delete file <"
+
file
+
"> failed."
);
return
false
;
}
...
...
@@ -1553,7 +1643,7 @@ public final class ImageUtils {
boolean
ret
=
false
;
try
{
os
=
new
BufferedOutputStream
(
new
FileOutputStream
(
file
));
ret
=
src
.
compress
(
format
,
100
,
os
);
ret
=
src
.
compress
(
format
,
quality
,
os
);
if
(
recycle
&&
!
src
.
isRecycled
())
src
.
recycle
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
...
...
@@ -1569,6 +1659,80 @@ public final class ImageUtils {
return
ret
;
}
@Nullable
public
static
File
save2Album
(
final
Bitmap
src
,
final
CompressFormat
format
)
{
return
save2Album
(
src
,
format
,
100
,
false
);
}
@Nullable
public
static
File
save2Album
(
final
Bitmap
src
,
final
CompressFormat
format
,
final
boolean
recycle
)
{
return
save2Album
(
src
,
format
,
100
,
recycle
);
}
@Nullable
public
static
File
save2Album
(
final
Bitmap
src
,
final
CompressFormat
format
,
final
int
quality
)
{
return
save2Album
(
src
,
format
,
quality
,
false
);
}
@Nullable
public
static
File
save2Album
(
final
Bitmap
src
,
final
CompressFormat
format
,
final
int
quality
,
final
boolean
recycle
)
{
String
suffix
=
CompressFormat
.
JPEG
.
equals
(
format
)
?
"JPG"
:
format
.
name
();
String
fileName
=
System
.
currentTimeMillis
()
+
"_"
+
quality
+
"."
+
suffix
;
if
(
Build
.
VERSION
.
SDK_INT
<
Build
.
VERSION_CODES
.
Q
)
{
if
(!
UtilsBridge
.
isGranted
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
))
{
Log
.
e
(
"ImageUtils"
,
"save to album need storage permission"
);
return
null
;
}
File
picDir
=
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DCIM
);
File
destFile
=
new
File
(
picDir
,
Utils
.
getApp
().
getPackageName
()
+
"/"
+
fileName
);
if
(!
save
(
src
,
destFile
,
format
,
quality
,
recycle
))
{
return
null
;
}
UtilsBridge
.
notifySystemToScan
(
destFile
);
return
destFile
;
}
else
{
ContentValues
contentValues
=
new
ContentValues
();
contentValues
.
put
(
MediaStore
.
Images
.
Media
.
DISPLAY_NAME
,
fileName
);
contentValues
.
put
(
MediaStore
.
Images
.
Media
.
MIME_TYPE
,
"image/*"
);
Uri
contentUri
;
if
(
Environment
.
getExternalStorageState
().
equals
(
Environment
.
MEDIA_MOUNTED
))
{
contentUri
=
MediaStore
.
Images
.
Media
.
EXTERNAL_CONTENT_URI
;
}
else
{
contentUri
=
MediaStore
.
Images
.
Media
.
INTERNAL_CONTENT_URI
;
}
contentValues
.
put
(
MediaStore
.
Images
.
Media
.
RELATIVE_PATH
,
Environment
.
DIRECTORY_DCIM
+
"/"
+
Utils
.
getApp
().
getPackageName
());
Uri
uri
=
Utils
.
getApp
().
getContentResolver
().
insert
(
contentUri
,
contentValues
);
if
(
uri
==
null
)
{
return
null
;
}
OutputStream
os
=
null
;
try
{
os
=
Utils
.
getApp
().
getContentResolver
().
openOutputStream
(
uri
);
src
.
compress
(
format
,
quality
,
os
);
return
UtilsBridge
.
uri2File
(
uri
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
finally
{
try
{
if
(
os
!=
null
)
{
os
.
close
();
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
}
/**
* Return whether it is a image according to the file name.
*
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java
浏览文件 @
e3842d2a
...
...
@@ -117,9 +117,19 @@ public final class IntentUtils {
* @return the intent of launch app details settings
*/
public
static
Intent
getLaunchAppDetailsSettingsIntent
(
final
String
pkgName
)
{
return
getLaunchAppDetailsSettingsIntent
(
pkgName
,
false
);
}
/**
* Return the intent of launch app details settings.
*
* @param pkgName The name of the package.
* @return the intent of launch app details settings
*/
public
static
Intent
getLaunchAppDetailsSettingsIntent
(
final
String
pkgName
,
final
boolean
isNewTask
)
{
Intent
intent
=
new
Intent
(
Settings
.
ACTION_APPLICATION_DETAILS_SETTINGS
);
intent
.
setData
(
Uri
.
parse
(
"package:"
+
pkgName
));
return
getIntent
(
intent
,
true
);
return
getIntent
(
intent
,
isNewTask
);
}
/**
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
浏览文件 @
e3842d2a
...
...
@@ -7,6 +7,7 @@ import android.content.Intent;
import
android.content.IntentFilter
;
import
android.net.ConnectivityManager
;
import
android.net.NetworkInfo
;
import
android.net.wifi.WifiInfo
;
import
android.net.wifi.WifiManager
;
import
android.os.Build
;
import
android.support.annotation.NonNull
;
...
...
@@ -660,6 +661,27 @@ public final class NetworkUtils {
return
Formatter
.
formatIpAddress
(
wm
.
getDhcpInfo
().
serverAddress
);
}
/**
* Return the ssid.
*
* @return the ssid.
*/
@RequiresPermission
(
ACCESS_WIFI_STATE
)
public
static
String
getSSID
()
{
WifiManager
wm
=
(
WifiManager
)
Utils
.
getApp
().
getApplicationContext
().
getSystemService
(
WIFI_SERVICE
);
if
(
wm
==
null
)
return
""
;
WifiInfo
wi
=
wm
.
getConnectionInfo
();
if
(
wi
==
null
)
return
""
;
String
ssid
=
wi
.
getSSID
();
if
(
TextUtils
.
isEmpty
(
ssid
))
{
return
""
;
}
if
(
ssid
.
length
()
>
2
&&
ssid
.
charAt
(
0
)
==
'"'
&&
ssid
.
charAt
(
ssid
.
length
()
-
1
)
==
'"'
)
{
return
ssid
.
substring
(
1
,
ssid
.
length
()
-
1
);
}
return
ssid
;
}
/**
* Register the status of network changed listener.
*
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
浏览文件 @
e3842d2a
...
...
@@ -8,6 +8,7 @@ import android.net.Uri;
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
;
...
...
@@ -41,6 +42,7 @@ public final class PermissionUtils {
private
String
[]
mPermissionsParam
;
private
OnRationaleListener
mOnRationaleListener
;
private
SingleCallback
mSingleCallback
;
private
SimpleCallback
mSimpleCallback
;
private
FullCallback
mFullCallback
;
private
ThemeCallback
mThemeCallback
;
...
...
@@ -167,10 +169,9 @@ public final class PermissionUtils {
* Launch the application's details settings.
*/
public
static
void
launchAppDetailsSettings
()
{
Intent
intent
=
new
Intent
(
Settings
.
ACTION_APPLICATION_DETAILS_SETTINGS
);
intent
.
setData
(
Uri
.
parse
(
"package:"
+
Utils
.
getApp
().
getPackageName
()));
Intent
intent
=
UtilsBridge
.
getLaunchAppDetailsSettingsIntent
(
Utils
.
getApp
().
getPackageName
(),
true
);
if
(!
UtilsBridge
.
isIntentAvailable
(
intent
))
return
;
Utils
.
getApp
().
startActivity
(
intent
.
addFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
)
);
Utils
.
getApp
().
startActivity
(
intent
);
}
/**
...
...
@@ -199,6 +200,17 @@ public final class PermissionUtils {
return
this
;
}
/**
* Set the simple call back.
*
* @param callback the single call back
* @return the single {@link PermissionUtils} instance
*/
public
PermissionUtils
callback
(
final
SingleCallback
callback
)
{
mSingleCallback
=
callback
;
return
this
;
}
/**
* Set the simple call back.
*
...
...
@@ -237,7 +249,7 @@ public final class PermissionUtils {
*/
public
void
request
()
{
if
(
mPermissionsParam
==
null
||
mPermissionsParam
.
length
<=
0
)
{
Log
.
e
(
"PermissionUtils"
,
"No permissions to request."
);
Log
.
w
(
"PermissionUtils"
,
"No permissions to request."
);
return
;
}
...
...
@@ -333,6 +345,11 @@ public final class PermissionUtils {
}
private
void
requestCallback
()
{
if
(
mSingleCallback
!=
null
)
{
mSingleCallback
.
callback
(
mPermissionsDenied
.
isEmpty
(),
mPermissionsGranted
,
mPermissionsDeniedForever
,
mPermissionsDenied
);
mSingleCallback
=
null
;
}
if
(
mSimpleCallback
!=
null
)
{
if
(
mPermissionsDenied
.
isEmpty
())
{
mSimpleCallback
.
onGranted
();
...
...
@@ -493,6 +510,12 @@ public final class PermissionUtils {
}
}
public
interface
SingleCallback
{
void
callback
(
boolean
isAllGranted
,
@NonNull
List
<
String
>
granted
,
@NonNull
List
<
String
>
deniedForever
,
@NonNull
List
<
String
>
denied
);
}
public
interface
SimpleCallback
{
void
onGranted
();
...
...
@@ -500,9 +523,9 @@ public final class PermissionUtils {
}
public
interface
FullCallback
{
void
onGranted
(
List
<
String
>
permissionsG
ranted
);
void
onGranted
(
@NonNull
List
<
String
>
g
ranted
);
void
onDenied
(
List
<
String
>
permissionsDeniedForever
,
List
<
String
>
permissionsD
enied
);
void
onDenied
(
@NonNull
List
<
String
>
deniedForever
,
@NonNull
List
<
String
>
d
enied
);
}
public
interface
ThemeCallback
{
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java
浏览文件 @
e3842d2a
...
...
@@ -349,14 +349,22 @@ public final class ToastUtils {
static
IToast
makeToast
(
Context
context
,
CharSequence
text
,
int
duration
)
{
if
(
NotificationManagerCompat
.
from
(
context
).
areNotificationsEnabled
())
{
return
new
SystemToast
(
makeNormalToast
(
context
,
text
,
duration
));
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
if
(!
UtilsBridge
.
isGrantedDrawOverlays
())
{
return
new
SystemToast
(
makeNormalToast
(
context
,
text
,
duration
));
}
}
}
return
new
ToastWithoutNotification
(
makeNormalToast
(
context
,
text
,
duration
));
}
static
IToast
newToast
(
Context
context
)
{
if
(
NotificationManagerCompat
.
from
(
context
).
areNotificationsEnabled
())
{
return
new
SystemToast
(
new
Toast
(
context
));
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
if
(!
UtilsBridge
.
isGrantedDrawOverlays
())
{
return
new
SystemToast
(
new
Toast
(
context
));
}
}
}
return
new
ToastWithoutNotification
(
new
Toast
(
context
));
}
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/UriUtils.java
浏览文件 @
e3842d2a
...
...
@@ -87,17 +87,36 @@ public final class UriUtils {
String
scheme
=
uri
.
getScheme
();
String
path
=
uri
.
getPath
();
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
N
&&
path
!=
null
)
{
String
[]
externals
=
new
String
[]{
"/external"
,
"/external_path"
};
String
[]
externals
=
new
String
[]{
"/external/"
,
"/external_path/"
};
File
file
=
null
;
for
(
String
external
:
externals
)
{
if
(
path
.
startsWith
(
external
+
"/"
))
{
File
file
=
new
File
(
Environment
.
getExternalStorageDirectory
().
getAbsolutePath
()
+
path
.
replace
(
external
,
""
));
if
(
path
.
startsWith
(
external
))
{
file
=
new
File
(
Environment
.
getExternalStorageDirectory
().
getAbsolutePath
()
+
path
.
replace
(
external
,
"
/
"
));
if
(
file
.
exists
())
{
Log
.
d
(
"UriUtils"
,
uri
.
toString
()
+
" -> "
+
external
);
return
file
;
}
}
}
file
=
null
;
if
(
path
.
startsWith
(
"/files_path/"
))
{
file
=
new
File
(
Utils
.
getApp
().
getFilesDir
().
getAbsolutePath
()
+
path
.
replace
(
"/files_path/"
,
"/"
));
}
else
if
(
path
.
startsWith
(
"/cache_path/"
))
{
file
=
new
File
(
Utils
.
getApp
().
getCacheDir
().
getAbsolutePath
()
+
path
.
replace
(
"/cache_path/"
,
"/"
));
}
else
if
(
path
.
startsWith
(
"/external_files_path/"
))
{
file
=
new
File
(
Utils
.
getApp
().
getExternalFilesDir
(
null
).
getAbsolutePath
()
+
path
.
replace
(
"/external_files_path/"
,
"/"
));
}
else
if
(
path
.
startsWith
(
"/external_cache_path/"
))
{
file
=
new
File
(
Utils
.
getApp
().
getExternalCacheDir
().
getAbsolutePath
()
+
path
.
replace
(
"/external_cache_path/"
,
"/"
));
}
if
(
file
!=
null
&&
file
.
exists
())
{
Log
.
d
(
"UriUtils"
,
uri
.
toString
()
+
" -> "
+
path
);
return
file
;
}
}
if
(
ContentResolver
.
SCHEME_FILE
.
equals
(
scheme
))
{
if
(
path
!=
null
)
return
new
File
(
path
);
...
...
@@ -277,10 +296,24 @@ public final class UriUtils {
private
static
File
copyUri2Cache
(
Uri
uri
)
{
Log
.
d
(
"UriUtils"
,
"copyUri2Cache() called"
);
InputStream
is
=
uri2InputStream
(
uri
);
File
file
=
new
File
(
Utils
.
getApp
().
getCacheDir
(),
""
+
System
.
currentTimeMillis
());
UtilsBridge
.
writeFileFromIS
(
file
.
getAbsolutePath
(),
is
);
return
file
;
InputStream
is
=
null
;
try
{
is
=
Utils
.
getApp
().
getContentResolver
().
openInputStream
(
uri
);
File
file
=
new
File
(
Utils
.
getApp
().
getCacheDir
(),
""
+
System
.
currentTimeMillis
());
UtilsBridge
.
writeFileFromIS
(
file
.
getAbsolutePath
(),
is
);
return
file
;
}
catch
(
FileNotFoundException
e
)
{
e
.
printStackTrace
();
return
null
;
}
finally
{
if
(
is
!=
null
)
{
try
{
is
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
}
/**
...
...
@@ -289,14 +322,14 @@ public final class UriUtils {
* @param uri The uri.
* @return the input stream
*/
public
static
InputStream
uri2InputStream
(
Uri
uri
)
{
StringBuilder
stringBuilder
=
new
StringBuilder
();
public
static
byte
[]
uri2Bytes
(
Uri
uri
)
{
InputStream
is
=
null
;
try
{
is
=
Utils
.
getApp
().
getContentResolver
().
openInputStream
(
uri
);
return
is
;
return
UtilsBridge
.
inputStream2Bytes
(
is
)
;
}
catch
(
FileNotFoundException
e
)
{
e
.
printStackTrace
();
Log
.
d
(
"UriUtils"
,
"uri to bytes failed."
);
return
null
;
}
finally
{
if
(
is
!=
null
)
{
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsBridge.java
浏览文件 @
e3842d2a
...
...
@@ -19,6 +19,7 @@ import com.google.gson.Gson;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
java.io.InputStream
;
import
java.io.Serializable
;
...
...
@@ -216,6 +217,10 @@ class UtilsBridge {
return
ConvertUtils
.
inputStream2Bytes
(
is
);
}
static
ByteArrayOutputStream
input2OutputStream
(
final
InputStream
is
)
{
return
ConvertUtils
.
input2OutputStream
(
is
);
}
static
List
<
String
>
inputStream2Lines
(
final
InputStream
is
,
final
String
charsetName
)
{
return
ConvertUtils
.
inputStream2Lines
(
is
,
charsetName
);
}
...
...
@@ -293,6 +298,10 @@ class UtilsBridge {
return
FileUtils
.
getFsAvailableSize
(
path
);
}
static
void
notifySystemToScan
(
File
file
)
{
FileUtils
.
notifySystemToScan
(
file
);
}
///////////////////////////////////////////////////////////////////////////
// GsonUtils
///////////////////////////////////////////////////////////////////////////
...
...
@@ -379,6 +388,10 @@ class UtilsBridge {
return
IntentUtils
.
getSendSmsIntent
(
phoneNumber
,
content
);
}
static
Intent
getLaunchAppDetailsSettingsIntent
(
final
String
pkgName
,
final
boolean
isNewTask
)
{
return
IntentUtils
.
getLaunchAppDetailsSettingsIntent
(
pkgName
,
isNewTask
);
}
///////////////////////////////////////////////////////////////////////////
// JsonUtils
...
...
@@ -404,6 +417,10 @@ class UtilsBridge {
///////////////////////////////////////////////////////////////////////////
// PermissionUtils
///////////////////////////////////////////////////////////////////////////
static
boolean
isGranted
(
final
String
...
permissions
)
{
return
PermissionUtils
.
isGranted
(
permissions
);
}
@RequiresApi
(
api
=
Build
.
VERSION_CODES
.
M
)
static
boolean
isGrantedDrawOverlays
()
{
return
PermissionUtils
.
isGrantedDrawOverlays
();
...
...
@@ -540,4 +557,8 @@ class UtilsBridge {
static
Uri
file2Uri
(
final
File
file
)
{
return
UriUtils
.
file2Uri
(
file
);
}
static
File
uri2File
(
final
Uri
uri
)
{
return
UriUtils
.
uri2File
(
uri
);
}
}
lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsTransActivity.java
浏览文件 @
e3842d2a
...
...
@@ -8,6 +8,7 @@ import android.support.annotation.Nullable;
import
android.support.v7.app.AppCompatActivity
;
import
android.view.MotionEvent
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.Map
;
...
...
@@ -22,27 +23,36 @@ import java.util.Map;
public
class
UtilsTransActivity
extends
AppCompatActivity
{
private
static
final
Map
<
UtilsTransActivity
,
TransActivityDelegate
>
CALLBACK_MAP
=
new
HashMap
<>();
private
static
TransActivityDelegate
sDelegate
;
protected
static
final
String
EXTRA_DELEGATE
=
"extra_delegate"
;
public
static
void
start
(
final
TransActivityDelegate
delegate
)
{
start
(
null
,
null
,
delegate
);
start
(
null
,
null
,
delegate
,
UtilsTransActivity
.
class
);
}
public
static
void
start
(
final
Utils
.
Consumer
<
Intent
>
consumer
,
final
TransActivityDelegate
delegate
)
{
start
(
null
,
consumer
,
delegate
);
start
(
null
,
consumer
,
delegate
,
UtilsTransActivity
.
class
);
}
public
static
void
start
(
final
Activity
activity
,
final
TransActivityDelegate
delegate
)
{
start
(
activity
,
null
,
delegate
);
start
(
activity
,
null
,
delegate
,
UtilsTransActivity
.
class
);
}
public
static
void
start
(
final
Activity
activity
,
final
Utils
.
Consumer
<
Intent
>
consumer
,
final
TransActivityDelegate
delegate
)
{
start
(
activity
,
consumer
,
delegate
,
UtilsTransActivity
.
class
);
}
protected
static
void
start
(
final
Activity
activity
,
final
Utils
.
Consumer
<
Intent
>
consumer
,
final
TransActivityDelegate
delegate
,
final
Class
<?>
cls
)
{
if
(
delegate
==
null
)
return
;
Intent
starter
=
new
Intent
(
Utils
.
getApp
(),
UtilsTransActivity
.
class
);
Intent
starter
=
new
Intent
(
Utils
.
getApp
(),
cls
);
starter
.
putExtra
(
EXTRA_DELEGATE
,
delegate
);
if
(
consumer
!=
null
)
{
consumer
.
accept
(
starter
);
}
...
...
@@ -52,22 +62,22 @@ public class UtilsTransActivity extends AppCompatActivity {
}
else
{
activity
.
startActivity
(
starter
);
}
sDelegate
=
delegate
;
}
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
overridePendingTransition
(
0
,
0
);
if
(
sDelegate
==
null
)
{
Serializable
extra
=
getIntent
().
getSerializableExtra
(
EXTRA_DELEGATE
);
if
(!(
extra
instanceof
TransActivityDelegate
))
{
super
.
onCreate
(
savedInstanceState
);
finish
();
return
;
}
CALLBACK_MAP
.
put
(
this
,
sDelegate
);
sDelegate
.
onCreateBefore
(
this
,
savedInstanceState
);
TransActivityDelegate
delegate
=
(
TransActivityDelegate
)
extra
;
CALLBACK_MAP
.
put
(
this
,
delegate
);
delegate
.
onCreateBefore
(
this
,
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
sDelegate
.
onCreated
(
this
,
savedInstanceState
);
sDelegate
=
null
;
delegate
.
onCreated
(
this
,
savedInstanceState
);
}
@Override
...
...
@@ -146,7 +156,7 @@ public class UtilsTransActivity extends AppCompatActivity {
return
super
.
dispatchTouchEvent
(
ev
);
}
public
abstract
static
class
TransActivityDelegate
{
public
abstract
static
class
TransActivityDelegate
implements
Serializable
{
public
void
onCreateBefore
(
@NonNull
UtilsTransActivity
activity
,
@Nullable
Bundle
savedInstanceState
)
{
/**/
}
public
void
onCreated
(
@NonNull
UtilsTransActivity
activity
,
@Nullable
Bundle
savedInstanceState
)
{
/**/
}
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsTransActivity4MainProcess.java
0 → 100644
浏览文件 @
e3842d2a
package
com.blankj.utilcode.util
;
import
android.app.Activity
;
import
android.content.Intent
;
/**
* <pre>
* author: blankj
* blog : http://blankj.com
* time : 2020/03/19
* desc :
* </pre>
*/
public
class
UtilsTransActivity4MainProcess
extends
UtilsTransActivity
{
public
static
void
start
(
final
TransActivityDelegate
delegate
)
{
start
(
null
,
null
,
delegate
,
UtilsTransActivity4MainProcess
.
class
);
}
public
static
void
start
(
final
Utils
.
Consumer
<
Intent
>
consumer
,
final
TransActivityDelegate
delegate
)
{
start
(
null
,
consumer
,
delegate
,
UtilsTransActivity4MainProcess
.
class
);
}
public
static
void
start
(
final
Activity
activity
,
final
TransActivityDelegate
delegate
)
{
start
(
activity
,
null
,
delegate
,
UtilsTransActivity4MainProcess
.
class
);
}
public
static
void
start
(
final
Activity
activity
,
final
Utils
.
Consumer
<
Intent
>
consumer
,
final
TransActivityDelegate
delegate
)
{
start
(
activity
,
consumer
,
delegate
,
UtilsTransActivity4MainProcess
.
class
);
}
}
plugin/api-gradle-plugin/CHANGELOG.md
浏览文件 @
e3842d2a
# Change Log
## v1.4(2020/05/19)
重新发布,因为上个版本从阿里云仓库拉取是有问题的
## v1.3(2020/04/29)
重构使用 base-transform
...
...
plugin/api-gradle-plugin/README.md
浏览文件 @
e3842d2a
...
...
@@ -30,7 +30,7 @@
buildscript
{
dependencies
{
...
classpath
'com.blankj:api-gradle-plugin:1.
2
'
classpath
'com.blankj:api-gradle-plugin:1.
4
'
}
}
```
...
...
plugin/api-gradle-plugin/build.gradle
浏览文件 @
e3842d2a
...
...
@@ -40,5 +40,5 @@ publish {
website
=
"https://github.com/Blankj/AndroidUtilCode"
}
//./gradlew clean
plugin
:plugin_api-gradle-plugin:mavenLocal // 上传到本地 mavenLocal
//./gradlew clean
plugin
:plugin_api-gradle-plugin:bintrayUpload // 上传到 jcenter
//./gradlew clean :plugin_api-gradle-plugin:mavenLocal // 上传到本地 mavenLocal
//./gradlew clean :plugin_api-gradle-plugin:bintrayUpload // 上传到 jcenter
plugin/bus-gradle-plugin/CHANGELOG.md
浏览文件 @
e3842d2a
# Change Log
## v2.6(2020/05/19)
重新发布,因为上个版本从阿里云仓库拉取是有问题的
## v2.5(2020/04/29)
重构使用 base-transform
...
...
plugin/bus-gradle-plugin/README.md
浏览文件 @
e3842d2a
...
...
@@ -19,7 +19,7 @@
buildscript
{
dependencies
{
...
classpath
'com.blankj:bus-gradle-plugin:2.
4
'
classpath
'com.blankj:bus-gradle-plugin:2.
6
'
}
}
```
...
...
plugin/bus-gradle-plugin/build.gradle
浏览文件 @
e3842d2a
...
...
@@ -40,5 +40,5 @@ publish {
website
=
"https://github.com/Blankj/AndroidUtilCode"
}
//./gradlew clean plugin:plugin_bus-gradle-plugin:mavenLocal // 上传到本地 mavenLocal
//./gradlew clean plugin:plugin_bus-gradle-plugin:bintrayUpload // 上传到 jcenter
\ No newline at end of file
//./gradlew clean :plugin_bus-gradle-plugin:mavenLocal // 上传到本地 mavenLocal
//./gradlew clean :plugin_bus-gradle-plugin:bintrayUpload // 上传到 jcenter
\ No newline at end of file
settings.gradle
浏览文件 @
e3842d2a
...
...
@@ -27,8 +27,9 @@ for (def pro in config.proConfig) {
}
if
(
pro
.
useLocal
&&
pro
.
isApply
)
{
include
pro
.
localPath
project
(
pro
.
localPath
).
name
=
pro
.
localPath
.
substring
(
1
).
replace
(
":"
,
"_"
)
def
projectPath
=
":"
+
localPath
.
substring
(
1
).
replace
(
":"
,
"_"
)
include
projectPath
project
(
projectPath
).
projectDir
=
file
(
localPath
.
substring
(
1
).
replace
(
":"
,
"/"
))
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录