Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mmm-rain
AndroidUtilCode
提交
bfc0a678
A
AndroidUtilCode
项目概览
mmm-rain
/
AndroidUtilCode
与 Fork 源项目一致
从无法访问的项目Fork
通知
4
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,发现更多精彩内容 >>
提交
bfc0a678
编写于
8月 25, 2019
作者:
B
Blankj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
see 08/25 log
上级
c80cdc9c
变更
32
隐藏空白更改
内联
并排
Showing
32 changed file
with
228 addition
and
99 deletion
+228
-99
CHANGELOG.md
CHANGELOG.md
+4
-0
README-CN.md
README-CN.md
+1
-1
README.md
README.md
+1
-1
buildSrc/src/main/groovy/Config.groovy
buildSrc/src/main/groovy/Config.groovy
+2
-2
buildSrc/src/main/groovy/GitUtils.java
buildSrc/src/main/groovy/GitUtils.java
+0
-12
gradle.properties
gradle.properties
+2
-1
gradle/wrapper/gradle-wrapper.properties
gradle/wrapper/gradle-wrapper.properties
+1
-1
lib/utilcode/README-CN.md
lib/utilcode/README-CN.md
+13
-2
lib/utilcode/README.md
lib/utilcode/README.md
+14
-3
lib/utilcode/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
...ava/com/blankj/utilcode/constant/PermissionConstants.java
+1
-1
lib/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java
...code/src/main/java/com/blankj/utilcode/util/AppUtils.java
+1
-1
lib/utilcode/src/main/java/com/blankj/utilcode/util/ConvertUtils.java
.../src/main/java/com/blankj/utilcode/util/ConvertUtils.java
+5
-5
lib/utilcode/src/main/java/com/blankj/utilcode/util/CrashUtils.java
...de/src/main/java/com/blankj/utilcode/util/CrashUtils.java
+1
-1
lib/utilcode/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
...e/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
+17
-20
lib/utilcode/src/main/java/com/blankj/utilcode/util/EncryptUtils.java
.../src/main/java/com/blankj/utilcode/util/EncryptUtils.java
+1
-1
lib/utilcode/src/main/java/com/blankj/utilcode/util/FileUtils.java
...ode/src/main/java/com/blankj/utilcode/util/FileUtils.java
+1
-1
lib/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java
...de/src/main/java/com/blankj/utilcode/util/ImageUtils.java
+71
-22
lib/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
...src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
+1
-9
lib/utilcode/src/main/java/com/blankj/utilcode/util/LogUtils.java
...code/src/main/java/com/blankj/utilcode/util/LogUtils.java
+23
-1
lib/utilcode/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
...de/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
+9
-4
lib/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
...e/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
+2
-2
lib/utilcode/src/main/java/com/blankj/utilcode/util/SizeUtils.java
...ode/src/main/java/com/blankj/utilcode/util/SizeUtils.java
+5
-5
lib/utilcode/src/main/java/com/blankj/utilcode/util/ViewUtils.java
...ode/src/main/java/com/blankj/utilcode/util/ViewUtils.java
+24
-3
lib/utilcode/src/test/java/com/blankj/utilcode/util/ImageUtilsTest.java
...rc/test/java/com/blankj/utilcode/util/ImageUtilsTest.java
+26
-0
lib/utilcode/src/test/java/com/blankj/utilcode/util/TestConfig.java
...de/src/test/java/com/blankj/utilcode/util/TestConfig.java
+2
-0
lib/utilcode/src/test/res/image/ic_launcher.bmp
lib/utilcode/src/test/res/image/ic_launcher.bmp
+0
-0
lib/utilcode/src/test/res/image/ic_launcher.gif
lib/utilcode/src/test/res/image/ic_launcher.gif
+0
-0
lib/utilcode/src/test/res/image/ic_launcher.ico
lib/utilcode/src/test/res/image/ic_launcher.ico
+0
-0
lib/utilcode/src/test/res/image/ic_launcher.jpg
lib/utilcode/src/test/res/image/ic_launcher.jpg
+0
-0
lib/utilcode/src/test/res/image/ic_launcher.png
lib/utilcode/src/test/res/image/ic_launcher.png
+0
-0
lib/utilcode/src/test/res/image/ic_launcher.tif
lib/utilcode/src/test/res/image/ic_launcher.tif
+0
-0
lib/utilcode/src/test/res/image/ic_launcher.webp
lib/utilcode/src/test/res/image/ic_launcher.webp
+0
-0
未找到文件。
CHANGELOG.md
浏览文件 @
bfc0a678
*
`19/08/25`
[upd] ImageUtils#getImageType. [add] LogUtils# Publish v1.25.9.
*
`19/08/24`
[fix] PhoneUtils#getIMEI crash on SDK 29.
*
`19/08/23`
[add] ViewUtils#isLayoutRtl.
*
`19/08/22`
[add] LogUtils#getLogFiles.
*
`19/08/13`
[add] MapUtils and MapUtilsTest. Publish v1.25.8.
*
`19/08/12`
[add] CollectionUtils and CollectionUtilsTest.
*
`19/08/11`
[add] ArrayUtils and ArrayUtilsTest.
...
...
README-CN.md
浏览文件 @
bfc0a678
...
...
@@ -51,7 +51,7 @@
[
frame
]:
https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/auc_frame_cn.png
[
aucSvg
]:
https://img.shields.io/badge/AndroidUtilCode-v1.25.
8
-brightgreen.svg
[
aucSvg
]:
https://img.shields.io/badge/AndroidUtilCode-v1.25.
9
-brightgreen.svg
[
auc
]:
https://github.com/Blankj/AndroidUtilCode
[
apiSvg
]:
https://img.shields.io/badge/API-14+-brightgreen.svg
...
...
README.md
浏览文件 @
bfc0a678
...
...
@@ -51,7 +51,7 @@ If this project helps you a lot and you want to support the project's developmen
[
frame
]:
https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/auc_frame.png
[
aucSvg
]:
https://img.shields.io/badge/AndroidUtilCode-v1.25.
8
-brightgreen.svg
[
aucSvg
]:
https://img.shields.io/badge/AndroidUtilCode-v1.25.
9
-brightgreen.svg
[
auc
]:
https://github.com/Blankj/AndroidUtilCode
[
apiSvg
]:
https://img.shields.io/badge/API-14+-brightgreen.svg
...
...
buildSrc/src/main/groovy/Config.groovy
浏览文件 @
bfc0a678
...
...
@@ -14,8 +14,8 @@ class Config {
static
compileSdkVersion
=
28
static
minSdkVersion
=
14
static
targetSdkVersion
=
28
static
versionCode
=
1
_025_00
8
static
versionName
=
'1.25.
8-alpha1
'
// E.g. 1.9.72 => 1,009,072
static
versionCode
=
1
_025_00
9
static
versionName
=
'1.25.
9
'
// E.g. 1.9.72 => 1,009,072
// lib version
static
kotlin_version
=
'1.3.10'
...
...
buildSrc/src/main/groovy/GitUtils.java
已删除
100644 → 0
浏览文件 @
c80cdc9c
package
PACKAGE_NAME
;
/**
* <pre>
* author: blankj
* blog : http://blankj.com
* time : 2019/08/16
* desc :
* </pre>
*/
public
class
GitUtils
{
}
gradle.properties
浏览文件 @
bfc0a678
...
...
@@ -16,6 +16,7 @@
org.gradle.jvmargs
=
-Xmx8192m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -XX:-UseGCOverheadLimit -Dfile.encoding=UTF-8
org.gradle.daemon
=
true
#org.gradle.configureondemand=true
#org.gradle.parallel=true
org.gradle.parallel
=
true
org.gradle.caching
=
true
#
-Dorg.gradle.debug
=
true --no-daemon
\ No newline at end of file
gradle/wrapper/gradle-wrapper.properties
浏览文件 @
bfc0a678
...
...
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath
=
wrapper/dists
zipStoreBase
=
GRADLE_USER_HOME
zipStorePath
=
wrapper/dists
distributionUrl
=
https
\:
//services.gradle.org/distributions/gradle-5.
1
.1-all.zip
distributionUrl
=
https
\:
//services.gradle.org/distributions/gradle-5.
4
.1-all.zip
lib/utilcode/README-CN.md
浏览文件 @
bfc0a678
...
...
@@ -2,10 +2,10 @@
Gradle:
```
groovy
implementation
'com.blankj:utilcode:1.25.
8
'
implementation
'com.blankj:utilcode:1.25.
9
'
// if u use AndroidX, use the following
implementation
'com.blankj:utilcodex:1.25.
8
'
implementation
'com.blankj:utilcodex:1.25.
9
'
```
...
...
@@ -1069,6 +1069,15 @@ vibrate: 震动
cancel : 取消
```
*
### 视图相关 ->
[
ViewUtils.java
][
view.java
]
```
setViewEnabled : 设置视图是否可用
runOnUiThread : 在 UI 线程运行
runOnUiThreadDelayed: 在 UI 线程延迟运行
isLayoutRtl : 布局是否从右到左
fixScrollViewTopping: 修复 ScrollView 置顶问题
```
*
### 压缩相关 ->
[
ZipUtils.java
][
zip.java
]
->
[
Test
][
zip.test
]
```
zipFiles : 批量压缩文件
...
...
@@ -1262,5 +1271,7 @@ getComments : 获取压缩文件中的注释链表
[
vibrate.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
[
vibrate.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt
[
view.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/main/java/com/blankj/utilcode/util/ViewUtils.java
[
zip.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/main/java/com/blankj/utilcode/util/ZipUtils.java
[
zip.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java
lib/utilcode/README.md
浏览文件 @
bfc0a678
...
...
@@ -2,10 +2,10 @@
Gradle:
```
groovy
implementation
'com.blankj:utilcode:1.25.
8
'
implementation
'com.blankj:utilcode:1.25.
9
'
// if u use AndroidX, use the following
implementation
'com.blankj:utilcodex:1.25.
8
'
implementation
'com.blankj:utilcodex:1.25.
9
'
```
...
...
@@ -1069,6 +1069,15 @@ vibrate
cancel
```
*
### About View ->
[
ViewUtils.java
][
view.java
]
```
setViewEnabled
runOnUiThread
runOnUiThreadDelayed
isLayoutRtl
fixScrollViewTopping
```
*
### About Zip ->
[
ZipUtils.java
][
zip.java
]
->
[
Test
][
zip.test
]
```
zipFiles
...
...
@@ -1187,7 +1196,7 @@ getComments
[
log.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt
[
map.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/main/java/com/blankj/utilcode/util/MapUtils.java
[
map.
demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/test/java/com/blankj/utilcode/util/MapUtilsTest.java
[
map.
test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/test/java/com/blankj/utilcode/util/MapUtilsTest.java
[
metaData.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
[
metaData.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt
...
...
@@ -1262,5 +1271,7 @@ getComments
[
vibrate.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
[
vibrate.demo
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt
[
view.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/main/java/com/blankj/utilcode/util/ViewUtils.java
[
zip.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/main/java/com/blankj/utilcode/util/ZipUtils.java
[
zip.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java
lib/utilcode/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
浏览文件 @
bfc0a678
...
...
@@ -64,7 +64,7 @@ public final class PermissionConstants {
permission
.
RECEIVE_WAP_PUSH
,
permission
.
RECEIVE_MMS
,
};
private
static
final
String
[]
GROUP_STORAGE
=
{
permission
.
READ_EXTERNAL_STORAGE
,
permission
.
WRITE_EXTERNAL_STORAGE
permission
.
READ_EXTERNAL_STORAGE
,
permission
.
WRITE_EXTERNAL_STORAGE
,
};
@StringDef
({
CALENDAR
,
CAMERA
,
CONTACTS
,
LOCATION
,
MICROPHONE
,
PHONE
,
SENSORS
,
SMS
,
STORAGE
,})
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java
浏览文件 @
bfc0a678
...
...
@@ -865,7 +865,7 @@ public final class AppUtils {
return
true
;
}
private
static
final
char
HEX_DIGITS
[]
=
private
static
final
char
[]
HEX_DIGITS
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
private
static
byte
[]
hashTemplate
(
final
byte
[]
data
,
final
String
algorithm
)
{
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/ConvertUtils.java
浏览文件 @
bfc0a678
...
...
@@ -35,7 +35,7 @@ public final class ConvertUtils {
throw
new
UnsupportedOperationException
(
"u can't instantiate me..."
);
}
private
static
final
char
hexDigits
[]
=
private
static
final
char
[]
hexDigits
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
/**
...
...
@@ -581,7 +581,7 @@ public final class ConvertUtils {
* @return value of px
*/
public
static
int
dp2px
(
final
float
dpValue
)
{
final
float
scale
=
Resources
.
getSystem
().
getDisplayMetrics
().
density
;
final
float
scale
=
Utils
.
getApp
().
getResources
().
getDisplayMetrics
().
density
;
return
(
int
)
(
dpValue
*
scale
+
0.5f
);
}
...
...
@@ -592,7 +592,7 @@ public final class ConvertUtils {
* @return value of dp
*/
public
static
int
px2dp
(
final
float
pxValue
)
{
final
float
scale
=
Resources
.
getSystem
().
getDisplayMetrics
().
density
;
final
float
scale
=
Utils
.
getApp
().
getResources
().
getDisplayMetrics
().
density
;
return
(
int
)
(
pxValue
/
scale
+
0.5f
);
}
...
...
@@ -603,7 +603,7 @@ public final class ConvertUtils {
* @return value of px
*/
public
static
int
sp2px
(
final
float
spValue
)
{
final
float
fontScale
=
Resources
.
getSystem
().
getDisplayMetrics
().
scaledDensity
;
final
float
fontScale
=
Utils
.
getApp
().
getResources
().
getDisplayMetrics
().
scaledDensity
;
return
(
int
)
(
spValue
*
fontScale
+
0.5f
);
}
...
...
@@ -614,7 +614,7 @@ public final class ConvertUtils {
* @return value of sp
*/
public
static
int
px2sp
(
final
float
pxValue
)
{
final
float
fontScale
=
Resources
.
getSystem
().
getDisplayMetrics
().
scaledDensity
;
final
float
fontScale
=
Utils
.
getApp
().
getResources
().
getDisplayMetrics
().
scaledDensity
;
return
(
int
)
(
pxValue
/
fontScale
+
0.5f
);
}
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/CrashUtils.java
浏览文件 @
bfc0a678
...
...
@@ -41,7 +41,7 @@ public final class CrashUtils {
private
static
final
String
FILE_SEP
=
System
.
getProperty
(
"file.separator"
);
@SuppressLint
(
"SimpleDateFormat"
)
private
static
final
Format
FORMAT
=
new
SimpleDateFormat
(
"MM-dd
HH-mm-ss"
);
private
static
final
Format
FORMAT
=
new
SimpleDateFormat
(
"MM-dd
_
HH-mm-ss"
);
private
static
final
UncaughtExceptionHandler
DEFAULT_UNCAUGHT_EXCEPTION_HANDLER
;
private
static
final
UncaughtExceptionHandler
UNCAUGHT_EXCEPTION_HANDLER
;
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
浏览文件 @
bfc0a678
...
...
@@ -22,6 +22,7 @@ import java.util.Enumeration;
import
java.util.UUID
;
import
static
android
.
Manifest
.
permission
.
ACCESS_WIFI_STATE
;
import
static
android
.
Manifest
.
permission
.
CHANGE_WIFI_STATE
;
import
static
android
.
Manifest
.
permission
.
INTERNET
;
import
static
android
.
content
.
Context
.
WIFI_SERVICE
;
...
...
@@ -106,11 +107,12 @@ public final class DeviceUtils {
/**
* Return the MAC address.
* <p>Must hold {@code <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />},
* {@code <uses-permission android:name="android.permission.INTERNET" />}</p>
* {@code <uses-permission android:name="android.permission.INTERNET" />},
* {@code <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />}</p>
*
* @return the MAC address
*/
@RequiresPermission
(
allOf
=
{
ACCESS_WIFI_STATE
,
INTERNET
})
@RequiresPermission
(
allOf
=
{
ACCESS_WIFI_STATE
,
INTERNET
,
CHANGE_WIFI_STATE
})
public
static
String
getMacAddress
()
{
String
macAddress
=
getMacAddress
((
String
[])
null
);
if
(!
macAddress
.
equals
(
""
)
||
getWifiEnabled
())
return
macAddress
;
...
...
@@ -126,10 +128,18 @@ public final class DeviceUtils {
return
manager
.
isWifiEnabled
();
}
/**
* Enable or disable wifi.
* <p>Must hold {@code <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />}</p>
*
* @param enabled True to enabled, false otherwise.
*/
@RequiresPermission
(
CHANGE_WIFI_STATE
)
private
static
void
setWifiEnabled
(
final
boolean
enabled
)
{
@SuppressLint
(
"WifiManagerLeak"
)
WifiManager
manager
=
(
WifiManager
)
Utils
.
getApp
().
getSystemService
(
WIFI_SERVICE
);
if
(
manager
==
null
)
return
;
if
(
enabled
==
manager
.
isWifiEnabled
())
return
;
manager
.
setWifiEnabled
(
enabled
);
}
...
...
@@ -372,9 +382,8 @@ public final class DeviceUtils {
/**
* Return the unique device id.
* <pre>{1}{UUID(macAddress)}</pre>
* <pre>{2}{UUID(deviceId )}</pre>
* <pre>{3}{UUID(androidId )}</pre>
* <pre>{4}{UUID(random )}</pre>
* <pre>{2}{UUID(androidId )}</pre>
* <pre>{9}{UUID(random )}</pre>
*
* @return the unique device id
*/
...
...
@@ -386,9 +395,8 @@ public final class DeviceUtils {
/**
* Return the unique device id.
* <pre>{prefix}{1}{UUID(macAddress)}</pre>
* <pre>{prefix}{2}{UUID(deviceId )}</pre>
* <pre>{prefix}{3}{UUID(androidId )}</pre>
* <pre>{prefix}{4}{UUID(random )}</pre>
* <pre>{prefix}{2}{UUID(androidId )}</pre>
* <pre>{prefix}{9}{UUID(random )}</pre>
*
* @param prefix The prefix of the unique device id.
* @return the unique device id
...
...
@@ -414,13 +422,8 @@ public final class DeviceUtils {
return
saveUdid
(
prefix
+
2
,
androidId
);
}
final
String
deviceId
=
((
TelephonyManager
)
Utils
.
getApp
().
getSystemService
(
Context
.
TELEPHONY_SERVICE
)).
getDeviceId
();
if
(!
TextUtils
.
isEmpty
(
deviceId
))
{
return
saveUdid
(
prefix
+
3
,
deviceId
);
}
}
catch
(
Exception
ignore
)
{
/**/
}
return
saveUdid
(
prefix
+
4
,
""
);
return
saveUdid
(
prefix
+
9
,
""
);
}
}
}
...
...
@@ -448,12 +451,6 @@ public final class DeviceUtils {
return
false
;
}
return
uniqueDeviceId
.
substring
(
st
+
1
).
equals
(
getUdid
(
""
,
androidId
));
}
else
if
(
type
.
startsWith
(
"3"
))
{
final
String
deviceId
=
((
TelephonyManager
)
Utils
.
getApp
().
getSystemService
(
Context
.
TELEPHONY_SERVICE
)).
getDeviceId
();
if
(
TextUtils
.
isEmpty
(
deviceId
))
{
return
false
;
}
return
uniqueDeviceId
.
substring
(
st
+
1
).
equals
(
getUdid
(
""
,
deviceId
));
}
return
false
;
}
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/EncryptUtils.java
浏览文件 @
bfc0a678
...
...
@@ -1152,7 +1152,7 @@ public final class EncryptUtils {
return
ret
;
}
private
static
final
char
HEX_DIGITS
[]
=
private
static
final
char
[]
HEX_DIGITS
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
private
static
String
bytes2HexString
(
final
byte
[]
bytes
)
{
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/FileUtils.java
浏览文件 @
bfc0a678
...
...
@@ -1221,7 +1221,7 @@ public final class FileUtils {
// other utils methods
///////////////////////////////////////////////////////////////////////////
private
static
final
char
HEX_DIGITS
[]
=
private
static
final
char
[]
HEX_DIGITS
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
private
static
String
bytes2HexString
(
final
byte
[]
bytes
)
{
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java
浏览文件 @
bfc0a678
...
...
@@ -1562,7 +1562,7 @@ public final class ImageUtils {
* @param filePath The path of file.
* @return the type of image
*/
public
static
String
getImageType
(
final
String
filePath
)
{
public
static
ImageType
getImageType
(
final
String
filePath
)
{
return
getImageType
(
getFileByPath
(
filePath
));
}
...
...
@@ -1572,12 +1572,12 @@ public final class ImageUtils {
* @param file The file.
* @return the type of image
*/
public
static
String
getImageType
(
final
File
file
)
{
if
(
file
==
null
)
return
""
;
public
static
ImageType
getImageType
(
final
File
file
)
{
if
(
file
==
null
)
return
null
;
InputStream
is
=
null
;
try
{
is
=
new
FileInputStream
(
file
);
String
type
=
getImageType
(
is
);
ImageType
type
=
getImageType
(
is
);
if
(
type
!=
null
)
{
return
type
;
}
...
...
@@ -1592,36 +1592,57 @@ public final class ImageUtils {
e
.
printStackTrace
();
}
}
return
getFileExtension
(
file
.
getAbsolutePath
()).
toUpperCase
();
}
private
static
String
getFileExtension
(
final
String
filePath
)
{
if
(
isSpace
(
filePath
))
return
filePath
;
int
lastPoi
=
filePath
.
lastIndexOf
(
'.'
);
int
lastSep
=
filePath
.
lastIndexOf
(
File
.
separator
);
if
(
lastPoi
==
-
1
||
lastSep
>=
lastPoi
)
return
""
;
return
filePath
.
substring
(
lastPoi
+
1
);
return
null
;
}
private
static
String
getImageType
(
final
InputStream
is
)
{
private
static
ImageType
getImageType
(
final
InputStream
is
)
{
if
(
is
==
null
)
return
null
;
try
{
byte
[]
bytes
=
new
byte
[
8
];
return
is
.
read
(
bytes
,
0
,
8
)
!=
-
1
?
getImageType
(
bytes
)
:
null
;
byte
[]
bytes
=
new
byte
[
12
];
return
is
.
read
(
bytes
)
!=
-
1
?
getImageType
(
bytes
)
:
null
;
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
private
static
String
getImageType
(
final
byte
[]
bytes
)
{
if
(
isJPEG
(
bytes
))
return
"JPEG"
;
if
(
isGIF
(
bytes
))
return
"GIF"
;
if
(
isPNG
(
bytes
))
return
"PNG"
;
if
(
isBMP
(
bytes
))
return
"BMP"
;
return
null
;
private
static
ImageType
getImageType
(
final
byte
[]
bytes
)
{
String
type
=
bytes2HexString
(
bytes
).
toUpperCase
();
if
(
type
.
contains
(
"FFD8FF"
))
{
return
ImageType
.
TYPE_JPG
;
}
else
if
(
type
.
contains
(
"89504E47"
))
{
return
ImageType
.
TYPE_PNG
;
}
else
if
(
type
.
contains
(
"47494638"
))
{
return
ImageType
.
TYPE_GIF
;
}
else
if
(
type
.
contains
(
"49492A00"
)
||
type
.
contains
(
"4D4D002A"
))
{
return
ImageType
.
TYPE_TIFF
;
}
else
if
(
type
.
contains
(
"424D"
))
{
return
ImageType
.
TYPE_BMP
;
}
else
if
(
type
.
startsWith
(
"52494646"
)
&&
type
.
endsWith
(
"57454250"
))
{
//524946461c57000057454250-12个字节
return
ImageType
.
TYPE_WEBP
;
}
else
if
(
type
.
contains
(
"00000100"
)
||
type
.
contains
(
"00000200"
))
{
return
ImageType
.
TYPE_ICO
;
}
else
{
return
ImageType
.
TYPE_UNKNOWN
;
}
}
private
static
final
char
[]
hexDigits
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
private
static
String
bytes2HexString
(
final
byte
[]
bytes
)
{
if
(
bytes
==
null
)
return
""
;
int
len
=
bytes
.
length
;
if
(
len
<=
0
)
return
""
;
char
[]
ret
=
new
char
[
len
<<
1
];
for
(
int
i
=
0
,
j
=
0
;
i
<
len
;
i
++)
{
ret
[
j
++]
=
hexDigits
[
bytes
[
i
]
>>
4
&
0x0f
];
ret
[
j
++]
=
hexDigits
[
bytes
[
i
]
&
0x0f
];
}
return
new
String
(
ret
);
}
private
static
boolean
isJPEG
(
final
byte
[]
b
)
{
return
b
.
length
>=
2
&&
(
b
[
0
]
==
(
byte
)
0xFF
)
&&
(
b
[
1
]
==
(
byte
)
0xD8
);
...
...
@@ -1982,4 +2003,32 @@ public final class ImageUtils {
}
}
}
public
enum
ImageType
{
TYPE_JPG
(
"jpg"
),
TYPE_PNG
(
"png"
),
TYPE_GIF
(
"gif"
),
TYPE_TIFF
(
"tiff"
),
TYPE_BMP
(
"bmp"
),
TYPE_WEBP
(
"webp"
),
TYPE_ICO
(
"ico"
),
TYPE_UNKNOWN
(
"unknown"
);
String
value
;
ImageType
(
String
value
)
{
this
.
value
=
value
;
}
public
String
getValue
()
{
return
value
;
}
}
}
lib/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
浏览文件 @
bfc0a678
...
...
@@ -108,15 +108,7 @@ public final class KeyboardUtils {
InputMethodManager
imm
=
(
InputMethodManager
)
Utils
.
getApp
().
getSystemService
(
Context
.
INPUT_METHOD_SERVICE
);
if
(
imm
==
null
)
return
;
imm
.
hideSoftInputFromWindow
(
view
.
getWindowToken
(),
0
,
new
ResultReceiver
(
new
Handler
())
{
@Override
protected
void
onReceiveResult
(
int
resultCode
,
Bundle
resultData
)
{
if
(
resultCode
==
InputMethodManager
.
RESULT_UNCHANGED_SHOWN
||
resultCode
==
InputMethodManager
.
RESULT_SHOWN
)
{
toggleSoftInput
();
}
}
});
imm
.
hideSoftInputFromWindow
(
view
.
getWindowToken
(),
0
);
}
/**
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/LogUtils.java
浏览文件 @
bfc0a678
...
...
@@ -36,10 +36,13 @@ import java.lang.reflect.ParameterizedType;
import
java.lang.reflect.Type
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.Date
;
import
java.util.Formatter
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Locale
;
import
java.util.Set
;
import
java.util.concurrent.ExecutorService
;
...
...
@@ -233,6 +236,21 @@ public final class LogUtils {
}
}
public
static
List
<
File
>
getLogFiles
()
{
String
dir
=
CONFIG
.
getDir
();
File
logDir
=
new
File
(
dir
);
if
(!
logDir
.
exists
())
return
new
ArrayList
<>();
File
[]
files
=
logDir
.
listFiles
(
new
FilenameFilter
()
{
@Override
public
boolean
accept
(
File
dir
,
String
name
)
{
return
isMatchLogFileName
(
name
);
}
});
List
<
File
>
list
=
new
ArrayList
<>();
Collections
.
addAll
(
list
,
files
);
return
list
;
}
private
static
TagHead
processTagAndHead
(
String
tag
)
{
if
(!
CONFIG
.
mTagIsSpace
&&
!
CONFIG
.
isLogHeadSwitch
())
{
tag
=
CONFIG
.
getGlobalTag
();
...
...
@@ -527,7 +545,7 @@ public final class LogUtils {
File
[]
files
=
parentFile
.
listFiles
(
new
FilenameFilter
()
{
@Override
public
boolean
accept
(
File
dir
,
String
name
)
{
return
name
.
matches
(
"^"
+
CONFIG
.
getFilePrefix
()
+
"_[0-9]{4}_[0-9]{2}_[0-9]{2}_.*$"
);
return
isMatchLogFileName
(
name
);
}
});
if
(
files
==
null
||
files
.
length
<=
0
)
return
;
...
...
@@ -555,6 +573,10 @@ public final class LogUtils {
}
}
private
static
boolean
isMatchLogFileName
(
String
name
)
{
return
name
.
matches
(
"^"
+
CONFIG
.
getFilePrefix
()
+
"_[0-9]{4}_[0-9]{2}_[0-9]{2}_.*$"
);
}
private
static
String
findDate
(
String
str
)
{
Pattern
pattern
=
Pattern
.
compile
(
"[0-9]{4}_[0-9]{2}_[0-9]{2}"
);
Matcher
matcher
=
pattern
.
matcher
(
str
);
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
浏览文件 @
bfc0a678
package
com.blankj.utilcode.util
;
import
android.annotation.SuppressLint
;
import
android.app.PendingIntent
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.pm.PackageManager
;
import
android.net.Uri
;
import
android.os.Build
;
import
android.support.annotation.RequiresPermission
;
import
android.telephony.SmsManager
;
import
android.telephony.TelephonyManager
;
import
android.text.TextUtils
;
import
java.lang.reflect.InvocationTargetException
;
import
java.lang.reflect.Method
;
import
java.util.List
;
import
static
android
.
Manifest
.
permission
.
CALL_PHONE
;
import
static
android
.
Manifest
.
permission
.
READ_PHONE_STATE
;
import
static
android
.
Manifest
.
permission
.
SEND_SMS
;
/**
* <pre>
...
...
@@ -46,6 +42,7 @@ public final class PhoneUtils {
/**
* Return the unique device id.
* <p>If the version of SDK is greater than 28, it will return an empty string.</p>
* <p>Must hold {@code <uses-permission android:name="android.permission.READ_PHONE_STATE" />}</p>
*
* @return the unique device id
...
...
@@ -53,6 +50,9 @@ public final class PhoneUtils {
@SuppressLint
(
"HardwareIds"
)
@RequiresPermission
(
READ_PHONE_STATE
)
public
static
String
getDeviceId
()
{
if
(
Build
.
VERSION
.
SDK_INT
>=
29
)
{
return
""
;
}
TelephonyManager
tm
=
getTelephonyManager
();
String
deviceId
=
tm
.
getDeviceId
();
if
(!
TextUtils
.
isEmpty
(
deviceId
))
return
deviceId
;
...
...
@@ -78,6 +78,7 @@ public final class PhoneUtils {
/**
* Return the IMEI.
* <p>If the version of SDK is greater than 28, it will return an empty string.</p>
* <p>Must hold {@code <uses-permission android:name="android.permission.READ_PHONE_STATE" />}</p>
*
* @return the IMEI
...
...
@@ -89,6 +90,7 @@ public final class PhoneUtils {
/**
* Return the MEID.
* <p>If the version of SDK is greater than 28, it will return an empty string.</p>
* <p>Must hold {@code <uses-permission android:name="android.permission.READ_PHONE_STATE" />}</p>
*
* @return the MEID
...
...
@@ -101,6 +103,9 @@ public final class PhoneUtils {
@SuppressLint
(
"HardwareIds"
)
@RequiresPermission
(
READ_PHONE_STATE
)
public
static
String
getImeiOrMeid
(
boolean
isImei
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
29
)
{
return
""
;
}
TelephonyManager
tm
=
getTelephonyManager
();
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
O
)
{
if
(
isImei
)
{
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
浏览文件 @
bfc0a678
...
...
@@ -100,7 +100,7 @@ public final class ScreenUtils {
* @return the density of screen
*/
public
static
float
getScreenDensity
()
{
return
Resources
.
getSystem
().
getDisplayMetrics
().
density
;
return
Utils
.
getApp
().
getResources
().
getDisplayMetrics
().
density
;
}
/**
...
...
@@ -109,7 +109,7 @@ public final class ScreenUtils {
* @return the screen density expressed as dots-per-inch
*/
public
static
int
getScreenDensityDpi
()
{
return
Resources
.
getSystem
().
getDisplayMetrics
().
densityDpi
;
return
Utils
.
getApp
().
getResources
().
getDisplayMetrics
().
densityDpi
;
}
/**
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/SizeUtils.java
浏览文件 @
bfc0a678
...
...
@@ -27,7 +27,7 @@ public final class SizeUtils {
* @return value of px
*/
public
static
int
dp2px
(
final
float
dpValue
)
{
final
float
scale
=
Resources
.
getSystem
().
getDisplayMetrics
().
density
;
final
float
scale
=
Utils
.
getApp
().
getResources
().
getDisplayMetrics
().
density
;
return
(
int
)
(
dpValue
*
scale
+
0.5f
);
}
...
...
@@ -38,7 +38,7 @@ public final class SizeUtils {
* @return value of dp
*/
public
static
int
px2dp
(
final
float
pxValue
)
{
final
float
scale
=
Resources
.
getSystem
().
getDisplayMetrics
().
density
;
final
float
scale
=
Utils
.
getApp
().
getResources
().
getDisplayMetrics
().
density
;
return
(
int
)
(
pxValue
/
scale
+
0.5f
);
}
...
...
@@ -49,7 +49,7 @@ public final class SizeUtils {
* @return value of px
*/
public
static
int
sp2px
(
final
float
spValue
)
{
final
float
fontScale
=
Resources
.
getSystem
().
getDisplayMetrics
().
scaledDensity
;
final
float
fontScale
=
Utils
.
getApp
().
getResources
().
getDisplayMetrics
().
scaledDensity
;
return
(
int
)
(
spValue
*
fontScale
+
0.5f
);
}
...
...
@@ -60,7 +60,7 @@ public final class SizeUtils {
* @return value of sp
*/
public
static
int
px2sp
(
final
float
pxValue
)
{
final
float
fontScale
=
Resources
.
getSystem
().
getDisplayMetrics
().
scaledDensity
;
final
float
fontScale
=
Utils
.
getApp
().
getResources
().
getDisplayMetrics
().
scaledDensity
;
return
(
int
)
(
pxValue
/
fontScale
+
0.5f
);
}
...
...
@@ -75,7 +75,7 @@ public final class SizeUtils {
* metrics depending on its unit.
*/
public
static
float
applyDimension
(
final
float
value
,
final
int
unit
)
{
DisplayMetrics
metrics
=
Resources
.
getSystem
().
getDisplayMetrics
();
DisplayMetrics
metrics
=
Utils
.
getApp
().
getResources
().
getDisplayMetrics
();
switch
(
unit
)
{
case
TypedValue
.
COMPLEX_UNIT_PX
:
return
value
;
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/ViewUtils.java
浏览文件 @
bfc0a678
package
com.blankj.utilcode.util
;
import
android.os.Build
;
import
android.text.TextUtils
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
java.util.Locale
;
/**
* <pre>
* author: Blankj
...
...
@@ -63,9 +67,27 @@ public class ViewUtils {
}
/**
*
用于解决ScrollView嵌套ListView/GridView/WebView/RecyclerView等无法置顶问题
*
Return whether horizontal layout direction of views are from Right to Left.
*
* @param view ScrollView嵌套的跟视图
* @return {@code true}: yes<br>{@code false}: no
*/
public
static
boolean
isLayoutRtl
()
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
)
{
Locale
primaryLocale
;
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
N
)
{
primaryLocale
=
Utils
.
getApp
().
getResources
().
getConfiguration
().
getLocales
().
get
(
0
);
}
else
{
primaryLocale
=
Utils
.
getApp
().
getResources
().
getConfiguration
().
locale
;
}
return
TextUtils
.
getLayoutDirectionFromLocale
(
primaryLocale
)
==
View
.
LAYOUT_DIRECTION_RTL
;
}
return
false
;
}
/**
* Fix the problem of topping the ScrollView nested ListView/GridView/WebView/RecyclerView.
*
* @param view The root view inner of ScrollView.
*/
public
static
void
fixScrollViewTopping
(
View
view
)
{
view
.
setFocusable
(
false
);
...
...
@@ -84,5 +106,4 @@ public class ViewUtils {
}
}
}
}
\ No newline at end of file
lib/utilcode/src/test/java/com/blankj/utilcode/util/ImageUtilsTest.java
0 → 100644
浏览文件 @
bfc0a678
package
com.blankj.utilcode.util
;
import
org.junit.Assert
;
import
org.junit.Test
;
/**
* <pre>
* author: blankj
* blog : http://blankj.com
* time : 2019/08/25
* desc : test ImageUtils
* </pre>
*/
public
class
ImageUtilsTest
extends
BaseTest
{
@Test
public
void
getImageType
()
{
Assert
.
assertEquals
(
ImageUtils
.
ImageType
.
TYPE_JPG
,
ImageUtils
.
getImageType
(
TestConfig
.
PATH_IMAGE
+
"ic_launcher.jpg"
));
Assert
.
assertEquals
(
ImageUtils
.
ImageType
.
TYPE_PNG
,
ImageUtils
.
getImageType
(
TestConfig
.
PATH_IMAGE
+
"ic_launcher.png"
));
Assert
.
assertEquals
(
ImageUtils
.
ImageType
.
TYPE_GIF
,
ImageUtils
.
getImageType
(
TestConfig
.
PATH_IMAGE
+
"ic_launcher.gif"
));
Assert
.
assertEquals
(
ImageUtils
.
ImageType
.
TYPE_TIFF
,
ImageUtils
.
getImageType
(
TestConfig
.
PATH_IMAGE
+
"ic_launcher.tif"
));
Assert
.
assertEquals
(
ImageUtils
.
ImageType
.
TYPE_BMP
,
ImageUtils
.
getImageType
(
TestConfig
.
PATH_IMAGE
+
"ic_launcher.bmp"
));
Assert
.
assertEquals
(
ImageUtils
.
ImageType
.
TYPE_WEBP
,
ImageUtils
.
getImageType
(
TestConfig
.
PATH_IMAGE
+
"ic_launcher.webp"
));
Assert
.
assertEquals
(
ImageUtils
.
ImageType
.
TYPE_ICO
,
ImageUtils
.
getImageType
(
TestConfig
.
PATH_IMAGE
+
"ic_launcher.ico"
));
}
}
lib/utilcode/src/test/java/com/blankj/utilcode/util/TestConfig.java
浏览文件 @
bfc0a678
...
...
@@ -32,5 +32,7 @@ public class TestConfig {
static
final
String
PATH_FILE
=
TEST_PATH
+
"file"
+
FILE_SEP
;
static
final
String
PATH_IMAGE
=
TEST_PATH
+
"image"
+
FILE_SEP
;
static
final
String
PATH_ZIP
=
TEST_PATH
+
"zip"
+
FILE_SEP
;
}
lib/utilcode/src/test/res/image/ic_launcher.bmp
0 → 100644
浏览文件 @
bfc0a678
48.1 KB
lib/utilcode/src/test/res/image/ic_launcher.gif
0 → 100644
浏览文件 @
bfc0a678
2.1 KB
lib/utilcode/src/test/res/image/ic_launcher.ico
0 → 100644
浏览文件 @
bfc0a678
1.1 KB
lib/utilcode/src/test/res/image/ic_launcher.jpg
0 → 100644
浏览文件 @
bfc0a678
14.4 KB
lib/utilcode/src/test/res/image/ic_launcher.png
0 → 100644
浏览文件 @
bfc0a678
2.7 KB
lib/utilcode/src/test/res/image/ic_launcher.tif
0 → 100644
浏览文件 @
bfc0a678
文件已添加
lib/utilcode/src/test/res/image/ic_launcher.webp
0 → 100644
浏览文件 @
bfc0a678
文件已添加
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录