Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mmm-rain
AndroidUtilCode
提交
0f566fd3
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,体验更适合开发者的 AI 搜索 >>
提交
0f566fd3
编写于
4月 08, 2018
作者:
B
Blankj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
see 04/08 log
上级
377f063e
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
223 addition
and
129 deletion
+223
-129
app/src/main/java/com/blankj/androidutilcode/feature/core/activity/ActivityActivity.java
...droidutilcode/feature/core/activity/ActivityActivity.java
+0
-1
subutil/README-CN.md
subutil/README-CN.md
+21
-0
subutil/README.md
subutil/README.md
+21
-0
subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java
...rc/main/java/com/blankj/subutil/util/CoordinateUtils.java
+5
-12
subutil/src/main/java/com/blankj/subutil/util/Utils.java
subutil/src/main/java/com/blankj/subutil/util/Utils.java
+29
-40
subutil/src/test/java/com/blankj/subutil/util/CloneUtilsTest.java
...src/test/java/com/blankj/subutil/util/CloneUtilsTest.java
+44
-0
subutil/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java
...est/java/com/blankj/subutil/util/CoordinateUtilsTest.java
+11
-11
subutil/src/test/java/com/blankj/subutil/util/GsonUtilsTest.java
.../src/test/java/com/blankj/subutil/util/GsonUtilsTest.java
+2
-2
subutil/src/test/java/com/blankj/subutil/util/TestConfig.java
...til/src/test/java/com/blankj/subutil/util/TestConfig.java
+1
-1
subutil/src/test/java/com/blankj/subutil/util/TestUtils.java
subutil/src/test/java/com/blankj/subutil/util/TestUtils.java
+1
-1
utilcode/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
...src/main/java/com/blankj/utilcode/util/ActivityUtils.java
+22
-44
utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java
...de/src/main/java/com/blankj/utilcode/util/ToastUtils.java
+3
-3
utilcode/src/main/java/com/blankj/utilcode/util/Utils.java
utilcode/src/main/java/com/blankj/utilcode/util/Utils.java
+63
-14
未找到文件。
app/src/main/java/com/blankj/androidutilcode/feature/core/activity/ActivityActivity.java
浏览文件 @
0f566fd3
...
...
@@ -96,7 +96,6 @@ public class ActivityActivity extends BaseBackActivity {
.
appendLine
(
"isActivityExists: "
+
ActivityUtils
.
isActivityExists
(
Config
.
PKG
,
SubActivityActivity
.
class
.
getName
()))
.
appendLine
(
"getLauncherActivity: "
+
ActivityUtils
.
getLauncherActivity
(
Config
.
PKG
))
.
appendLine
(
"getTopActivity: "
+
ActivityUtils
.
getTopActivity
())
.
appendLine
(
"getTopActivity: "
+
ActivityUtils
.
getTopActivity
())
.
appendLine
(
"isActivityExistsInStack: "
+
ActivityUtils
.
isActivityExistsInStack
(
CoreUtilActivity
.
class
))
.
append
(
"getActivityIcon: "
)
.
appendImage
(
ActivityUtils
.
getActivityIcon
(
ActivityActivity
.
class
),
SpanUtils
.
ALIGN_CENTER
)
...
...
subutil/README-CN.md
浏览文件 @
0f566fd3
...
...
@@ -25,6 +25,21 @@ copyIntent: 复制意图到剪贴板
getIntent : 获取剪贴板的意图
```
*
### 克隆相关 ->
[
CloneUtils.java
][
clone.java
]
->
[
Test
][
clone.test
]
```
deepClone: 深度克隆
```
*
### 坐标转换相关 ->
[
CoordinateUtils.java
][
coordinate.java
]
->
[
Test
][
coordinate.test
]
```
bd09ToGcj02 : BD09 坐标转 GCJ02 坐标
gcj02ToBd09 : GCJ02 坐标转 BD09 坐标
gcj02ToWGS84: GCJ02 坐标转 WGS84 坐标
wgs84ToGcj02: WGS84 坐标转 GCJ02 坐标
bd09ToWGS84 : BD09 坐标转 WGS84 坐标
wgs84ToBd09 : WGS84 坐标转 BD09 坐标
```
*
### Gson 相关 ->
[
GsonUtils.java
][
gson.java
]
->
[
Test
][
gson.test
]
```
getGson : 获取 Gson 对象
...
...
@@ -84,6 +99,12 @@ scheduleWithFixedDelay: 延迟并以固定休息时间循环执行命令
[
clipboard.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/ClipboardUtils.java
[
clipboard.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/test/java/com/blankj/subutil/util/ClipboardUtilsTest.java
[
clone.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/CloneUtils.java
[
clone.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/test/java/com/blankj/subutil/util/CloneUtilsTest.java
[
coordinate.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java
[
coordinate.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java
[
gson.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/GsonUtils.java
[
gson.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/test/java/com/blankj/subutil/util/GsonUtilsTest.java
...
...
subutil/README.md
浏览文件 @
0f566fd3
...
...
@@ -25,6 +25,21 @@ copyIntent
getIntent
```
*
### About Clone ->
[
CloneUtils.java
][
clone.java
]
->
[
Test
][
clone.test
]
```
deepClone
```
*
### About Coordinate ->
[
CoordinateUtils.java
][
coordinate.java
]
->
[
Test
][
coordinate.test
]
```
bd09ToGcj02
gcj02ToBd09
gcj02ToWGS84
wgs84ToGcj02
bd09ToWGS84
wgs84ToBd09
```
*
### About Gson ->
[
GsonUtils.java
][
gson.java
]
->
[
Test
][
gson.test
]
```
getGson
...
...
@@ -84,6 +99,12 @@ scheduleWithFixedDelay
[
clipboard.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/ClipboardUtils.java
[
clipboard.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/test/java/com/blankj/subutil/util/ClipboardUtilsTest.java
[
clone.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/CloneUtils.java
[
clone.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/test/java/com/blankj/subutil/util/CloneUtilsTest.java
[
coordinate.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java
[
coordinate.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java
[
gson.java
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/main/java/com/blankj/subutil/util/GsonUtils.java
[
gson.test
]:
https://github.com/Blankj/AndroidUtilCode/blob/master/subutil/src/test/java/com/blankj/subutil/util/GsonUtilsTest.java
...
...
subutil/src/main/java/com/blankj/subutil/util/Coordinate
Convert
Utils.java
→
subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java
浏览文件 @
0f566fd3
...
...
@@ -7,10 +7,10 @@ import static java.lang.Math.PI;
* author: Blankj
* blog : http://blankj.com
* time : 2018/03/21
* desc : 坐标
转换
工具类
* desc : 坐标
相关
工具类
* </pre>
*/
public
final
class
Coordinate
Convert
Utils
{
public
final
class
CoordinateUtils
{
private
final
static
double
X_PI
=
3.14159265358979324
*
3000.0
/
180.0
;
private
final
static
double
A
=
6378245.0
;
...
...
@@ -73,7 +73,7 @@ public final class CoordinateConvertUtils {
}
/**
* WGS84 坐标
转 GCJ02 坐标
* WGS84 坐标转 GCJ02 坐标
*
* @param lng WGS84 坐标经度
* @param lat WGS84 坐标纬度
...
...
@@ -97,7 +97,7 @@ public final class CoordinateConvertUtils {
}
/**
* BD09 坐标
转 WGS84 坐标
* BD09 坐标转 WGS84 坐标
*
* @param lng BD09 坐标经度
* @param lat BD09 坐标纬度
...
...
@@ -137,14 +137,7 @@ public final class CoordinateConvertUtils {
return
ret
;
}
/**
* 判断坐标是否不在国内
*
* @param lng 经度
* @param lat 纬度
* @return 坐标是否在国内
*/
public
static
boolean
outOfChina
(
double
lng
,
double
lat
)
{
private
static
boolean
outOfChina
(
double
lng
,
double
lat
)
{
return
lng
<
72.004
||
lng
>
137.8347
||
lat
<
0.8293
||
lat
>
55.8271
;
}
}
subutil/src/main/java/com/blankj/subutil/util/Utils.java
浏览文件 @
0f566fd3
...
...
@@ -2,49 +2,27 @@ package com.blankj.subutil.util;
import
android.annotation.SuppressLint
;
import
android.app.Application
;
import
android.content.Context
;
import
android.support.annotation.NonNull
;
/**
* <pre>
* author: Blankj
* author:
* ___ ___ ___ ___
* _____ / /\ /__/\ /__/| / /\
* / /::\ / /::\ \ \:\ | |:| / /:/
* / /:/\:\ ___ ___ / /:/\:\ \ \:\ | |:| /__/::\
* / /:/~/::\ /__/\ / /\ / /:/~/::\ _____\__\:\ __| |:| \__\/\:\
* /__/:/ /:/\:| \ \:\ / /:/ /__/:/ /:/\:\ /__/::::::::\ /__/\_|:|____ \ \:\
* \ \:\/:/~/:/ \ \:\ /:/ \ \:\/:/__\/ \ \:\~~\~~\/ \ \:\/:::::/ \__\:\
* \ \::/ /:/ \ \:\/:/ \ \::/ \ \:\ ~~~ \ \::/~~~~ / /:/
* \ \:\/:/ \ \::/ \ \:\ \ \:\ \ \:\ /__/:/
* \ \::/ \__\/ \ \:\ \ \:\ \ \:\ \__\/
* \__\/ \__\/ \__\/ \__\/
* blog : http://blankj.com
* time : 16/12/08
* desc :
Utils初始化相关
* desc :
utils about initialization
* </pre>
* 瓦瓦 十
* 十齱龠己 亅瓦車己
* 乙龍龠毋日丶 丶乙己毋毋丶
* 十龠馬鬼車瓦 己十瓦毋毋
* 鬼馬龠馬龠十 己己毋車毋瓦
* 毋龠龠龍龠鬼乙丶丶乙車乙毋鬼車己
* 乙龠龍龍鬼龍瓦 十瓦毋乙瓦龠瓦亅
* 馬齱龍馬鬼十丶日己己己毋車乙丶
* 己齱馬鬼車十十毋日乙己己乙乙
* 車馬齱齱日乙毋瓦己乙瓦日亅
* 亅車齺龖瓦乙車龖龍乙乙十
* 日龠龠十亅車龍毋十十
* 日毋己亅 己己十亅亅
* 丶己十十乙 丶丶丶丶丶
* 亅己十龍龖瓦 丶 丶 乙十
* 亅己十龠龖毋 丶丶 丶己鬼鬼瓦亅
* 十日十十日亅丶亅丶 丶十日毋鬼馬馬車乙
* 十日乙十亅亅亅丶 十乙己毋鬼鬼鬼龍齺馬乙
* 丶瓦己乙十十亅丶亅乙乙乙己毋鬼鬼鬼龍齱齺齺鬼十
* 乙乙十十十亅乙瓦瓦己日瓦毋鬼鬼龠齱齱龍龍齱齱毋丶
* 亅十十十十乙瓦車毋瓦瓦日車馬龠龍龍龍龍龍龠龠龠馬亅
* 十十十十己毋車瓦瓦瓦瓦鬼馬龠龍龠龠龍龠龠龠馬龠車
* 亅十十日毋瓦日日瓦鬼鬼鬼龠龠馬馬龠龍龍龠馬馬車
* 亅亅亅乙瓦瓦毋車車車馬龍龠鬼鬼馬龠龍龍龠馬馬鬼
* 丶丶乙亅亅乙車鬼鬼鬼毋車龍龍龠鬼馬馬龠龍齱齱龍馬鬼
* 亅己十十己十日鬼鬼車瓦毋龠龍龠馬馬龠龠龠齱齺齺齱龠鬼
* 亅乙乙乙十車馬車毋馬齱齱龍龠龠龠馬龠龍齱龍龠龠鬼瓦
* 丶毋龠鬼車瓦車馬龠龍龠龠龍齱齱龠馬馬鬼毋日
* 十乙己日十 丶己鬼龍齱齺齱龍馬馬馬車毋己
* 丶十己乙亅丶 亅瓦馬龠龍龠龠馬毋瓦乙
* 丶十十乙亅十 亅己瓦車馬龠鬼車瓦乙
* 丶十乙十十丶 丶丶亅十瓦鬼車瓦己
* 丶亅亅丶 亅日瓦日
* 丶
*/
public
final
class
Utils
{
...
...
@@ -56,18 +34,29 @@ public final class Utils {
}
/**
* 初始化工具类
* Init utils.
* <p>Init it in the class of Application.</p>
*
* @param app 应用
* @param context context
*/
public
static
void
init
(
@NonNull
final
Context
context
)
{
init
((
Application
)
context
.
getApplicationContext
());
}
/**
* Init utils.
* <p>Init it in the class of Application.</p>
*
* @param app application
*/
public
static
void
init
(
@NonNull
final
Application
app
)
{
Utils
.
sApplication
=
app
;
}
/**
*
获取 Application
*
Return the context of Application object.
*
* @return
Application
* @return
the context of Application object
*/
public
static
Application
getApp
()
{
if
(
sApplication
!=
null
)
return
sApplication
;
...
...
subutil/src/test/java/com/blankj/subutil/util/CloneUtilsTest.java
0 → 100644
浏览文件 @
0f566fd3
package
com.blankj.subutil.util
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
java.io.Serializable
;
/**
* <pre>
* author: Blankj
* blog : http://blankj.com
* time : 2018/04/08
* desc : test CloneUtils
* </pre>
*/
public
class
CloneUtilsTest
{
@Test
public
void
deepClone
()
throws
Exception
{
Person
person
=
new
Person
(
"Blankj"
);
Person
clonePerson
=
CloneUtils
.
deepClone
(
person
);
System
.
out
.
println
(
person
);
System
.
out
.
println
(
clonePerson
);
Assert
.
assertNotEquals
(
person
,
clonePerson
);
}
static
class
Person
implements
Serializable
{
String
name
;
int
gender
;
String
address
;
public
Person
(
String
name
)
{
this
.
name
=
name
;
this
.
gender
=
gender
;
this
.
address
=
address
;
}
@Override
public
String
toString
()
{
return
"{\"name\":"
+
name
+
",\"gender\":"
+
gender
+
",\"address\":"
+
address
+
"}"
;
}
}
}
\ No newline at end of file
subutil/src/test/java/com/blankj/subutil/util/Coordinate
Convert
UtilsTest.java
→
subutil/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java
浏览文件 @
0f566fd3
...
...
@@ -10,10 +10,10 @@ import static java.lang.Math.PI;
* author: Blankj
* blog : http://blankj.com
* time : 2018/03/22
* desc : Coordinate
Convert
Utils 单元测试
* desc : CoordinateUtils 单元测试
* </pre>
*/
public
class
Coordinate
Convert
UtilsTest
{
public
class
CoordinateUtilsTest
{
// 以下为各个坐标系的 天安门坐标
private
static
final
double
[]
locationWGS84
=
new
double
[]{
116.3912022800
,
39.9075017400
};
...
...
@@ -25,7 +25,7 @@ public class CoordinateConvertUtilsTest {
@Test
public
void
gcj2BD09
()
throws
Exception
{
double
[]
BD09
=
Coordinate
Convert
Utils
.
gcj02ToBd09
(
locationGCJ02
[
0
],
locationGCJ02
[
1
]);
double
[]
BD09
=
CoordinateUtils
.
gcj02ToBd09
(
locationGCJ02
[
0
],
locationGCJ02
[
1
]);
double
distance
=
distance
(
locationBD09
[
0
],
locationBD09
[
1
],
BD09
[
0
],
BD09
[
1
]);
System
.
out
.
println
(
"distance: "
+
distance
);
Assert
.
assertTrue
(
distance
<
10
);
...
...
@@ -33,7 +33,7 @@ public class CoordinateConvertUtilsTest {
@Test
public
void
bd092GCJ
()
{
double
[]
GCJ02
=
Coordinate
Convert
Utils
.
bd09ToGcj02
(
locationBD09
[
0
],
locationBD09
[
1
]);
double
[]
GCJ02
=
CoordinateUtils
.
bd09ToGcj02
(
locationBD09
[
0
],
locationBD09
[
1
]);
double
distance
=
distance
(
locationGCJ02
[
0
],
locationGCJ02
[
1
],
GCJ02
[
0
],
GCJ02
[
1
]);
System
.
out
.
println
(
"distance: "
+
distance
);
Assert
.
assertTrue
(
distance
<
10
);
...
...
@@ -41,7 +41,7 @@ public class CoordinateConvertUtilsTest {
@Test
public
void
bd092WGS
()
{
double
[]
WGS84
=
Coordinate
Convert
Utils
.
bd09ToWGS84
(
locationBD09
[
0
],
locationBD09
[
1
]);
double
[]
WGS84
=
CoordinateUtils
.
bd09ToWGS84
(
locationBD09
[
0
],
locationBD09
[
1
]);
double
distance
=
distance
(
locationWGS84
[
0
],
locationWGS84
[
1
],
WGS84
[
0
],
WGS84
[
1
]);
System
.
out
.
println
(
"distance: "
+
distance
);
Assert
.
assertTrue
(
distance
<
10
);
...
...
@@ -49,7 +49,7 @@ public class CoordinateConvertUtilsTest {
@Test
public
void
wgs2BD09
()
{
double
[]
BD09
=
Coordinate
Convert
Utils
.
wgs84ToBd09
(
locationWGS84
[
0
],
locationWGS84
[
1
]);
double
[]
BD09
=
CoordinateUtils
.
wgs84ToBd09
(
locationWGS84
[
0
],
locationWGS84
[
1
]);
double
distance
=
distance
(
locationBD09
[
0
],
locationBD09
[
1
],
BD09
[
0
],
BD09
[
1
]);
System
.
out
.
println
(
"distance: "
+
distance
);
Assert
.
assertTrue
(
distance
<
10
);
...
...
@@ -57,7 +57,7 @@ public class CoordinateConvertUtilsTest {
@Test
public
void
wgs2GCJ
()
{
double
[]
GCJ02
=
Coordinate
Convert
Utils
.
wgs84ToGcj02
(
locationWGS84
[
0
],
locationWGS84
[
1
]);
double
[]
GCJ02
=
CoordinateUtils
.
wgs84ToGcj02
(
locationWGS84
[
0
],
locationWGS84
[
1
]);
double
distance
=
distance
(
locationGCJ02
[
0
],
locationGCJ02
[
1
],
GCJ02
[
0
],
GCJ02
[
1
]);
System
.
out
.
println
(
"distance: "
+
distance
);
Assert
.
assertTrue
(
distance
<
10
);
...
...
@@ -65,7 +65,7 @@ public class CoordinateConvertUtilsTest {
@Test
public
void
gcj2WGS
()
{
double
[]
WGS84
=
Coordinate
Convert
Utils
.
gcj02ToWGS84
(
locationGCJ02
[
0
],
locationGCJ02
[
1
]);
double
[]
WGS84
=
CoordinateUtils
.
gcj02ToWGS84
(
locationGCJ02
[
0
],
locationGCJ02
[
1
]);
double
distance
=
distance
(
locationWGS84
[
0
],
locationWGS84
[
1
],
WGS84
[
0
],
WGS84
[
1
]);
System
.
out
.
println
(
"distance: "
+
distance
);
Assert
.
assertTrue
(
distance
<
10
);
...
...
@@ -73,7 +73,7 @@ public class CoordinateConvertUtilsTest {
@Test
public
void
gcj2WGSExactly
()
{
double
[]
WGS84
=
Coordinate
Convert
Utils
.
gcj02ToWGS84
(
locationGCJ02
[
0
],
locationGCJ02
[
1
]);
double
[]
WGS84
=
CoordinateUtils
.
gcj02ToWGS84
(
locationGCJ02
[
0
],
locationGCJ02
[
1
]);
double
distance
=
distance
(
locationWGS84
[
0
],
locationWGS84
[
1
],
WGS84
[
0
],
WGS84
[
1
]);
System
.
out
.
println
(
"distance: "
+
distance
);
Assert
.
assertTrue
(
distance
<
10
);
...
...
@@ -81,8 +81,8 @@ public class CoordinateConvertUtilsTest {
@Test
public
void
outOfChina
()
{
Assert
.
assertFalse
(
Coordinate
Convert
Utils
.
outOfChina
(
locationWGS84
[
0
],
locationWGS84
[
1
]));
Assert
.
assertTrue
(
Coordinate
Convert
Utils
.
outOfChina
(
newyorkWGS84
[
0
],
newyorkWGS84
[
1
]));
Assert
.
assertFalse
(
CoordinateUtils
.
outOfChina
(
locationWGS84
[
0
],
locationWGS84
[
1
]));
Assert
.
assertTrue
(
CoordinateUtils
.
outOfChina
(
newyorkWGS84
[
0
],
newyorkWGS84
[
1
]));
}
public
static
double
distance
(
double
lngA
,
double
latA
,
double
lngB
,
double
latB
)
{
...
...
subutil/src/test/java/com/blankj/subutil/util/GsonUtilsTest.java
浏览文件 @
0f566fd3
...
...
@@ -9,7 +9,7 @@ import org.junit.Test;
* author: Blankj
* blog : http://blankj.com
* time : 2016/09/26
* desc :
GsonUtils 单元测试
* desc :
test GsonUtils
* </pre>
*/
public
class
GsonUtilsTest
{
...
...
@@ -40,7 +40,7 @@ public class GsonUtilsTest {
);
}
class
Person
{
static
class
Person
{
String
name
;
int
gender
;
...
...
subutil/src/test/java/com/blankj/subutil/util/TestConfig.java
浏览文件 @
0f566fd3
...
...
@@ -5,7 +5,7 @@ package com.blankj.subutil.util;
* author: Blankj
* blog : http://blankj.com
* time : 2017/09/10
* desc :
* desc :
config of test
* </pre>
*/
public
class
TestConfig
{
...
...
subutil/src/test/java/com/blankj/subutil/util/TestUtils.java
浏览文件 @
0f566fd3
...
...
@@ -11,7 +11,7 @@ import org.robolectric.annotation.Config;
* author: Blankj
* blog : http://blankj.com
* time : 2016/08/21
* desc :
单元测试工具类
* desc :
utils about test
* </pre>
*/
@RunWith
(
RobolectricTestRunner
.
class
)
...
...
utilcode/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
浏览文件 @
0f566fd3
package
com.blankj.utilcode.util
;
import
android.annotation.SuppressLint
;
import
android.app.Activity
;
import
android.app.ActivityManager
;
import
android.content.ComponentName
;
import
android.content.Context
;
import
android.content.Intent
;
...
...
@@ -17,10 +17,7 @@ import android.support.v4.app.ActivityOptionsCompat;
import
android.support.v4.util.Pair
;
import
android.view.View
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.InvocationTargetException
;
import
java.util.List
;
import
java.util.Map
;
/**
* <pre>
...
...
@@ -739,43 +736,7 @@ public final class ActivityUtils {
* @return the top activity in activity's stack
*/
public
static
Activity
getTopActivity
()
{
final
Activity
topActivity
=
Utils
.
getActivityList
().
getLast
();
if
(
topActivity
!=
null
)
{
return
topActivity
;
}
// using reflect to get top activity
try
{
@SuppressLint
(
"PrivateApi"
)
Class
<?>
activityThreadClass
=
Class
.
forName
(
"android.app.ActivityThread"
);
Object
activityThread
=
activityThreadClass
.
getMethod
(
"currentActivityThread"
).
invoke
(
null
);
Field
activitiesField
=
activityThreadClass
.
getDeclaredField
(
"mActivities"
);
activitiesField
.
setAccessible
(
true
);
Map
activities
=
(
Map
)
activitiesField
.
get
(
activityThread
);
if
(
activities
==
null
)
return
null
;
for
(
Object
activityRecord
:
activities
.
values
())
{
Class
activityRecordClass
=
activityRecord
.
getClass
();
Field
pausedField
=
activityRecordClass
.
getDeclaredField
(
"paused"
);
pausedField
.
setAccessible
(
true
);
if
(!
pausedField
.
getBoolean
(
activityRecord
))
{
Field
activityField
=
activityRecordClass
.
getDeclaredField
(
"activity"
);
activityField
.
setAccessible
(
true
);
Activity
activity
=
(
Activity
)
activityField
.
get
(
activityRecord
);
Utils
.
setTopActivity
(
activity
);
return
activity
;
}
}
}
catch
(
ClassNotFoundException
e
)
{
e
.
printStackTrace
();
}
catch
(
IllegalAccessException
e
)
{
e
.
printStackTrace
();
}
catch
(
InvocationTargetException
e
)
{
e
.
printStackTrace
();
}
catch
(
NoSuchMethodException
e
)
{
e
.
printStackTrace
();
}
catch
(
NoSuchFieldException
e
)
{
e
.
printStackTrace
();
}
return
null
;
return
Utils
.
getTopActivity
();
}
/**
...
...
@@ -1200,10 +1161,27 @@ public final class ActivityUtils {
}
}
private
static
Context
getActivityOrApp
()
{
Activity
topActivity
=
getTopActivity
();
return
topActivity
==
null
?
Utils
.
getApp
()
:
topActivity
;
if
(
isAppForeground
())
{
Activity
topActivity
=
getTopActivity
();
return
topActivity
==
null
?
Utils
.
getApp
()
:
topActivity
;
}
else
{
return
Utils
.
getApp
();
}
}
private
static
boolean
isAppForeground
()
{
ActivityManager
am
=
(
ActivityManager
)
Utils
.
getApp
().
getSystemService
(
Context
.
ACTIVITY_SERVICE
);
if
(
am
==
null
)
return
false
;
List
<
ActivityManager
.
RunningAppProcessInfo
>
info
=
am
.
getRunningAppProcesses
();
if
(
info
==
null
||
info
.
size
()
==
0
)
return
false
;
for
(
ActivityManager
.
RunningAppProcessInfo
aInfo
:
info
)
{
if
(
aInfo
.
importance
==
ActivityManager
.
RunningAppProcessInfo
.
IMPORTANCE_FOREGROUND
)
{
return
aInfo
.
processName
.
equals
(
Utils
.
getApp
().
getPackageName
());
}
}
return
false
;
}
private
static
void
startActivity
(
final
Context
context
,
...
...
utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java
浏览文件 @
0f566fd3
...
...
@@ -222,8 +222,8 @@ public final class ToastUtils {
@Override
public
void
run
()
{
cancel
();
sToast
=
Toast
.
makeText
(
Utils
.
getApp
(),
text
,
duration
);
TextView
tvMessage
=
sToast
.
getView
().
findViewById
(
android
.
R
.
id
.
message
);
sToast
=
Toast
.
makeText
(
Utils
.
get
TopActivityOr
App
(),
text
,
duration
);
final
TextView
tvMessage
=
sToast
.
getView
().
findViewById
(
android
.
R
.
id
.
message
);
int
msgColor
=
tvMessage
.
getCurrentTextColor
();
//it solve the font of toast
TextViewCompat
.
setTextAppearance
(
tvMessage
,
android
.
R
.
style
.
TextAppearance
);
...
...
@@ -246,7 +246,7 @@ public final class ToastUtils {
@Override
public
void
run
()
{
cancel
();
sToast
=
new
Toast
(
Utils
.
getApp
());
sToast
=
new
Toast
(
Utils
.
get
TopActivityOr
App
());
sToast
.
setView
(
view
);
sToast
.
setDuration
(
duration
);
if
(
sGravity
!=
-
1
||
sXOffset
!=
-
1
||
sYOffset
!=
-
1
)
{
...
...
utilcode/src/main/java/com/blankj/utilcode/util/Utils.java
浏览文件 @
0f566fd3
...
...
@@ -8,7 +8,10 @@ import android.content.Context;
import
android.os.Bundle
;
import
android.support.annotation.NonNull
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.InvocationTargetException
;
import
java.util.LinkedList
;
import
java.util.Map
;
/**
* <pre>
...
...
@@ -34,7 +37,7 @@ public final class Utils {
@SuppressLint
(
"StaticFieldLeak"
)
private
static
Application
sApplication
;
private
static
LinkedList
<
Activity
>
sActivityList
=
new
LinkedList
<>();
private
static
final
LinkedList
<
Activity
>
ACTIVITY_LIST
=
new
LinkedList
<>();
private
static
ActivityLifecycleCallbacks
mCallbacks
=
new
ActivityLifecycleCallbacks
()
{
@Override
...
...
@@ -69,7 +72,7 @@ public final class Utils {
@Override
public
void
onActivityDestroyed
(
Activity
activity
)
{
sActivityList
.
remove
(
activity
);
ACTIVITY_LIST
.
remove
(
activity
);
}
};
...
...
@@ -84,18 +87,17 @@ public final class Utils {
* @param context context
*/
public
static
void
init
(
@NonNull
final
Context
context
)
{
Utils
.
sApplication
=
(
Application
)
context
.
getApplicationContext
();
Utils
.
sApplication
.
registerActivityLifecycleCallbacks
(
mCallbacks
);
init
((
Application
)
context
.
getApplicationContext
());
}
/**
* Init utils.
* <p>Init it in the class of Application.</p>
*
* @param app
lication
application
* @param app application
*/
public
static
void
init
(
@NonNull
final
Application
app
lication
)
{
Utils
.
sApplication
=
app
lication
;
public
static
void
init
(
@NonNull
final
Application
app
)
{
Utils
.
sApplication
=
app
;
Utils
.
sApplication
.
registerActivityLifecycleCallbacks
(
mCallbacks
);
}
...
...
@@ -111,17 +113,64 @@ public final class Utils {
static
void
setTopActivity
(
final
Activity
activity
)
{
if
(
activity
.
getClass
()
==
PermissionUtils
.
PermissionActivity
.
class
)
return
;
if
(
sActivityList
.
contains
(
activity
))
{
if
(!
sActivityList
.
getLast
().
equals
(
activity
))
{
sActivityList
.
remove
(
activity
);
sActivityList
.
addLast
(
activity
);
if
(
ACTIVITY_LIST
.
contains
(
activity
))
{
if
(!
ACTIVITY_LIST
.
getLast
().
equals
(
activity
))
{
ACTIVITY_LIST
.
remove
(
activity
);
ACTIVITY_LIST
.
addLast
(
activity
);
}
}
else
{
sActivityList
.
addLast
(
activity
);
ACTIVITY_LIST
.
addLast
(
activity
);
}
}
public
static
LinkedList
<
Activity
>
getActivityList
()
{
return
sActivityList
;
static
LinkedList
<
Activity
>
getActivityList
()
{
return
ACTIVITY_LIST
;
}
static
Context
getTopActivityOrApp
()
{
Activity
topActivity
=
getTopActivity
();
return
topActivity
==
null
?
Utils
.
getApp
()
:
topActivity
;
}
static
Activity
getTopActivity
()
{
if
(!
ACTIVITY_LIST
.
isEmpty
())
{
final
Activity
topActivity
=
ACTIVITY_LIST
.
getLast
();
if
(
topActivity
!=
null
)
{
return
topActivity
;
}
}
// using reflect to get top activity
try
{
@SuppressLint
(
"PrivateApi"
)
Class
<?>
activityThreadClass
=
Class
.
forName
(
"android.app.ActivityThread"
);
Object
activityThread
=
activityThreadClass
.
getMethod
(
"currentActivityThread"
).
invoke
(
null
);
Field
activitiesField
=
activityThreadClass
.
getDeclaredField
(
"mActivities"
);
activitiesField
.
setAccessible
(
true
);
Map
activities
=
(
Map
)
activitiesField
.
get
(
activityThread
);
if
(
activities
==
null
)
return
null
;
for
(
Object
activityRecord
:
activities
.
values
())
{
Class
activityRecordClass
=
activityRecord
.
getClass
();
Field
pausedField
=
activityRecordClass
.
getDeclaredField
(
"paused"
);
pausedField
.
setAccessible
(
true
);
if
(!
pausedField
.
getBoolean
(
activityRecord
))
{
Field
activityField
=
activityRecordClass
.
getDeclaredField
(
"activity"
);
activityField
.
setAccessible
(
true
);
Activity
activity
=
(
Activity
)
activityField
.
get
(
activityRecord
);
Utils
.
setTopActivity
(
activity
);
return
activity
;
}
}
}
catch
(
ClassNotFoundException
e
)
{
e
.
printStackTrace
();
}
catch
(
IllegalAccessException
e
)
{
e
.
printStackTrace
();
}
catch
(
InvocationTargetException
e
)
{
e
.
printStackTrace
();
}
catch
(
NoSuchMethodException
e
)
{
e
.
printStackTrace
();
}
catch
(
NoSuchFieldException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录