Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiaoxuan_i809
AndroidUtilCode
提交
27cf719c
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 搜索 >>
提交
27cf719c
编写于
11月 13, 2020
作者:
B
Blankj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
see 11/13 log
上级
e6ec42f7
变更
16
隐藏空白更改
内联
并排
Showing
16 changed file
with
372 addition
and
71 deletion
+372
-71
CHANGELOG.md
CHANGELOG.md
+1
-0
buildSrc/src/main/groovy/Config.groovy
buildSrc/src/main/groovy/Config.groovy
+3
-3
feature/utilcode/pkg/src/main/AndroidManifest.xml
feature/utilcode/pkg/src/main/AndroidManifest.xml
+1
-0
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt
...om/blankj/utilcode/pkg/feature/network/NetworkActivity.kt
+38
-3
lib/subutil/src/main/java/com/blankj/subutil/util/BatteryUtils.java
...l/src/main/java/com/blankj/subutil/util/BatteryUtils.java
+0
-2
lib/utilcode/README-CN.md
lib/utilcode/README-CN.md
+5
-2
lib/utilcode/README.md
lib/utilcode/README.md
+5
-2
lib/utilcode/src/main/java/com/blankj/utilcode/util/CrashUtils.java
...de/src/main/java/com/blankj/utilcode/util/CrashUtils.java
+0
-1
lib/utilcode/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
...e/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
+5
-8
lib/utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
...src/main/java/com/blankj/utilcode/util/FragmentUtils.java
+74
-42
lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java
...rc/main/java/com/blankj/utilcode/util/MessengerUtils.java
+7
-0
lib/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
.../src/main/java/com/blankj/utilcode/util/NetworkUtils.java
+169
-2
lib/utilcode/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
...main/java/com/blankj/utilcode/util/NotificationUtils.java
+9
-4
lib/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java
...ode/src/main/java/com/blankj/utilcode/util/TimeUtils.java
+1
-1
lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsActivityLifecycleImpl.java
.../com/blankj/utilcode/util/UtilsActivityLifecycleImpl.java
+44
-1
lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsBridge.java
...e/src/main/java/com/blankj/utilcode/util/UtilsBridge.java
+10
-0
未找到文件。
CHANGELOG.md
浏览文件 @
27cf719c
*
`20/11/13`
[add] Fix MessengerUtils ANR. Add NetworkUtils#getWifiScanResult, [add|remove]OnWifiChangedConsumer. Publish v1.30.5.
*
`20/10/29`
[add] Fix MessengerUtils startService IllegalStateException. Publish v1.30.4.
*
`20/10/28`
[add] Fix BusUtils ConcurrentModificationException. Publish v1.30.3.
*
`20/10/27`
[add] Fix AppUtils#getAppSignatures. Add DeviceUtils#isDevelopmentSettingsEnabled. Publish v1.30.2.
...
...
buildSrc/src/main/groovy/Config.groovy
浏览文件 @
27cf719c
...
...
@@ -14,8 +14,8 @@ class Config {
static
compileSdkVersion
=
29
static
minSdkVersion
=
14
static
targetSdkVersion
=
29
static
versionCode
=
1
_030_00
4
static
versionName
=
'1.30.
4
'
// E.g. 1.9.72 => 1,009,072
static
versionCode
=
1
_030_00
5
static
versionName
=
'1.30.
5
'
// E.g. 1.9.72 => 1,009,072
// lib version
static
gradlePluginVersion
=
'3.5.0'
...
...
@@ -53,7 +53,7 @@ class Config {
// 上传新版本插件更新 pluginPath 中的版本号,并设置 isApply = false
// 通过 mavenLocal 上传本地版本,设置 isApply = true 即可应用插件来调试,最后通过 bintrayUpload 来发布插件
plugin_api
:
new
DepConfig
(
isApply:
true
,
useLocal:
false
,
pluginPath:
"com.blankj:api-gradle-plugin:
latest.release
"
,
pluginId:
"com.blankj.api"
),
plugin_api
:
new
DepConfig
(
isApply:
true
,
useLocal:
false
,
pluginPath:
"com.blankj:api-gradle-plugin:
1.5
"
,
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"
),
...
...
feature/utilcode/pkg/src/main/AndroidManifest.xml
浏览文件 @
27cf719c
...
...
@@ -18,6 +18,7 @@
<uses-permission
android:name=
"android.permission.FLASHLIGHT"
/>
<!-- network -->
<uses-permission
android:name=
"android.permission.ACCESS_COARSE_LOCATION"
/>
<uses-permission
android:name=
"android.permission.ACCESS_WIFI_STATE"
/>
<uses-permission
android:name=
"android.permission.CHANGE_WIFI_STATE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
...
...
feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt
浏览文件 @
27cf719c
...
...
@@ -2,13 +2,17 @@ package com.blankj.utilcode.pkg.feature.network
import
android.content.Context
import
android.content.Intent
import
android.net.wifi.ScanResult
import
android.net.wifi.WifiManager
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.CommonItemSwitch
import
com.blankj.common.item.CommonItemTitle
import
com.blankj.utilcode.constant.PermissionConstants
import
com.blankj.utilcode.pkg.R
import
com.blankj.utilcode.util.*
...
...
@@ -24,12 +28,24 @@ class NetworkActivity : CommonActivity(), NetworkUtils.OnNetworkStatusChangedLis
companion
object
{
fun
start
(
context
:
Context
)
{
val
starter
=
Intent
(
context
,
NetworkActivity
::
class
.
java
)
context
.
startActivity
(
starter
)
PermissionHelper
.
request
(
context
,
object
:
PermissionUtils
.
SimpleCallback
{
override
fun
onGranted
()
{
val
starter
=
Intent
(
context
,
NetworkActivity
::
class
.
java
)
context
.
startActivity
(
starter
)
}
override
fun
onDenied
()
{
}
},
PermissionConstants
.
LOCATION
)
}
}
private
lateinit
var
itemsTask
:
ThreadUtils
.
SimpleTask
<
List
<
CommonItem
<
*
>>>
private
lateinit
var
wifiScanResultItem
:
CommonItemTitle
private
val
consumer
=
Utils
.
Consumer
<
NetworkUtils
.
WifiScanResults
>
{
t
->
wifiScanResultItem
.
setContent
(
scanResults2String
(
t
.
filterResults
))
wifiScanResultItem
.
update
()
}
override
fun
bindTitleRes
():
Int
{
return
R
.
string
.
demo_network
...
...
@@ -51,6 +67,7 @@ class NetworkActivity : CommonActivity(), NetworkUtils.OnNetworkStatusChangedLis
override
fun
bindItems
():
List
<
CommonItem
<
*
>>
{
if
(
ThreadUtils
.
isMainThread
())
return
arrayListOf
()
wifiScanResultItem
=
CommonItemTitle
(
"getWifiScanResult"
,
scanResults2String
(
NetworkUtils
.
getWifiScanResult
().
filterResults
))
return
CollectionUtils
.
newArrayList
(
CommonItemTitle
(
"isConnected"
,
NetworkUtils
.
isConnected
().
toString
()),
CommonItemTitle
(
"getMobileDataEnabled"
,
NetworkUtils
.
getMobileDataEnabled
().
toString
()),
...
...
@@ -72,10 +89,19 @@ class NetworkActivity : CommonActivity(), NetworkUtils.OnNetworkStatusChangedLis
CommonItemTitle
(
"isWifiAvailable"
,
NetworkUtils
.
isWifiAvailable
().
toString
()),
CommonItemTitle
(
"isAvailable"
,
NetworkUtils
.
isAvailable
().
toString
()),
CommonItemTitle
(
"getBaiduDomainAddress"
,
NetworkUtils
.
getDomainAddress
(
"baidu.com"
)),
wifiScanResultItem
,
CommonItemSwitch
(
R
.
string
.
network_wifi_enabled
,
{
NetworkUtils
.
getWifiEnabled
()
},
{
val
wifiEnabled
=
NetworkUtils
.
getWifiEnabled
()
if
(
wifiEnabled
)
{
NetworkUtils
.
addOnWifiChangedConsumer
(
consumer
)
}
else
{
NetworkUtils
.
removeOnWifiChangedConsumer
(
consumer
)
}
wifiEnabled
},
{
NetworkUtils
.
setWifiEnabled
(
it
)
ThreadUtils
.
executeByIo
(
getItemsTask
())
...
...
@@ -112,5 +138,14 @@ class NetworkActivity : CommonActivity(), NetworkUtils.OnNetworkStatusChangedLis
super
.
onDestroy
()
ThreadUtils
.
cancel
(
itemsTask
)
NetworkUtils
.
unregisterNetworkStatusChangedListener
(
this
)
NetworkUtils
.
removeOnWifiChangedConsumer
(
consumer
)
}
private
fun
scanResults2String
(
results
:
List
<
ScanResult
>):
String
{
val
sb
:
StringBuilder
=
StringBuilder
()
for
(
result
in
results
)
{
sb
.
append
(
String
.
format
(
"${result.SSID}, Level: ${WifiManager.calculateSignalLevel(result.level, 4)}\n"
))
}
return
sb
.
toString
()
}
}
lib/subutil/src/main/java/com/blankj/subutil/util/BatteryUtils.java
浏览文件 @
27cf719c
...
...
@@ -76,7 +76,6 @@ public final class BatteryUtils {
void
registerListener
(
final
OnBatteryStatusChangedListener
listener
)
{
if
(
listener
==
null
)
return
;
ThreadUtils
.
runOnUiThread
(
new
Runnable
()
{
@SuppressLint
(
"MissingPermission"
)
@Override
public
void
run
()
{
int
preSize
=
mListeners
.
size
();
...
...
@@ -109,7 +108,6 @@ public final class BatteryUtils {
});
}
@SuppressLint
(
"MissingPermission"
)
@Override
public
void
onReceive
(
Context
context
,
final
Intent
intent
)
{
if
(
Intent
.
ACTION_BATTERY_CHANGED
.
equals
(
intent
.
getAction
()))
{
...
...
lib/utilcode/README-CN.md
浏览文件 @
27cf719c
...
...
@@ -2,10 +2,10 @@
Gradle:
```
groovy
implementation
'com.blankj:utilcode:1.30.
4
'
implementation
'com.blankj:utilcode:1.30.
5
'
// if u use AndroidX, use the following
implementation
'com.blankj:utilcodex:1.30.
4
'
implementation
'com.blankj:utilcodex:1.30.
5
'
```
...
...
@@ -721,6 +721,9 @@ getServerAddressByWifi : 根据 WiFi 获取服务端 IP 地址
registerNetworkStatusChangedListener : 注册网络状态改变监听器
isRegisteredNetworkStatusChangedListener: 判断是否注册网络状态改变监听器
unregisterNetworkStatusChangedListener : 注销网络状态改变监听器
getWifiScanResult : 获取 WIFI 列表
addOnWifiChangedConsumer : 增加 WIFI 改变监听
removeOnWifiChangedConsumer : 移除 WIFI 改变监听
```
*
### 通知相关 ->
[
NotificationUtils.java
][
notification.java
]
->
[
Demo
][
notification.demo
]
...
...
lib/utilcode/README.md
浏览文件 @
27cf719c
...
...
@@ -2,10 +2,10 @@
Gradle:
```
groovy
implementation
'com.blankj:utilcode:1.30.
4
'
implementation
'com.blankj:utilcode:1.30.
5
'
// if u use AndroidX, use the following
implementation
'com.blankj:utilcodex:1.30.
4
'
implementation
'com.blankj:utilcodex:1.30.
5
'
```
...
...
@@ -721,6 +721,9 @@ getServerAddressByWifi
registerNetworkStatusChangedListener
isRegisteredNetworkStatusChangedListener
unregisterNetworkStatusChangedListener
getWifiScanResult
addOnWifiChangedConsumer
removeOnWifiChangedConsumer
```
*
### About Notification ->
[
NotificationUtils.java
][
notification.java
]
->
[
Demo
][
notification.demo
]
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/CrashUtils.java
浏览文件 @
27cf719c
...
...
@@ -30,7 +30,6 @@ public final class CrashUtils {
/**
* Initialization.
*/
@SuppressLint
(
"MissingPermission"
)
public
static
void
init
()
{
init
(
""
);
}
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
浏览文件 @
27cf719c
...
...
@@ -113,7 +113,7 @@ public final class DeviceUtils {
*
* @return the MAC address
*/
@RequiresPermission
(
allOf
=
{
ACCESS_WIFI_STATE
,
INTERNET
,
CHANGE_WIFI_STATE
})
@RequiresPermission
(
allOf
=
{
ACCESS_WIFI_STATE
,
CHANGE_WIFI_STATE
})
public
static
String
getMacAddress
()
{
String
macAddress
=
getMacAddress
((
String
[])
null
);
if
(!
TextUtils
.
isEmpty
(
macAddress
)
||
getWifiEnabled
())
return
macAddress
;
...
...
@@ -151,7 +151,7 @@ public final class DeviceUtils {
*
* @return the MAC address
*/
@RequiresPermission
(
allOf
=
{
ACCESS_WIFI_STATE
,
INTERNET
})
@RequiresPermission
(
allOf
=
{
ACCESS_WIFI_STATE
})
public
static
String
getMacAddress
(
final
String
...
excepts
)
{
String
macAddress
=
getMacAddressByNetworkInterface
();
if
(
isAddressNotInExcepts
(
macAddress
,
excepts
))
{
...
...
@@ -190,7 +190,7 @@ public final class DeviceUtils {
return
true
;
}
@
SuppressLint
({
"MissingPermission"
,
"HardwareIds"
}
)
@
RequiresPermission
(
ACCESS_WIFI_STATE
)
private
static
String
getMacAddressByWifiInfo
()
{
try
{
final
WifiManager
wifi
=
(
WifiManager
)
Utils
.
getApp
()
...
...
@@ -198,6 +198,7 @@ public final class DeviceUtils {
if
(
wifi
!=
null
)
{
final
WifiInfo
info
=
wifi
.
getConnectionInfo
();
if
(
info
!=
null
)
{
@SuppressLint
(
"HardwareIds"
)
String
macAddress
=
info
.
getMacAddress
();
if
(!
TextUtils
.
isEmpty
(
macAddress
))
{
return
macAddress
;
...
...
@@ -412,7 +413,6 @@ public final class DeviceUtils {
*
* @return the unique device id
*/
@SuppressLint
({
"MissingPermission"
,
"HardwareIds"
})
public
static
String
getUniqueDeviceId
()
{
return
getUniqueDeviceId
(
""
,
true
);
}
...
...
@@ -426,7 +426,6 @@ public final class DeviceUtils {
* @param prefix The prefix of the unique device id.
* @return the unique device id
*/
@SuppressLint
({
"MissingPermission"
,
"HardwareIds"
})
public
static
String
getUniqueDeviceId
(
String
prefix
)
{
return
getUniqueDeviceId
(
prefix
,
true
);
}
...
...
@@ -440,7 +439,6 @@ public final class DeviceUtils {
* @param useCache True to use cache, false otherwise.
* @return the unique device id
*/
@SuppressLint
({
"MissingPermission"
,
"HardwareIds"
})
public
static
String
getUniqueDeviceId
(
boolean
useCache
)
{
return
getUniqueDeviceId
(
""
,
useCache
);
}
...
...
@@ -455,7 +453,6 @@ public final class DeviceUtils {
* @param useCache True to use cache, false otherwise.
* @return the unique device id
*/
@SuppressLint
({
"MissingPermission"
,
"HardwareIds"
})
public
static
String
getUniqueDeviceId
(
String
prefix
,
boolean
useCache
)
{
if
(!
useCache
)
{
return
getUniqueDeviceIdReal
(
prefix
);
...
...
@@ -486,7 +483,7 @@ public final class DeviceUtils {
return
saveUdid
(
prefix
+
9
,
""
);
}
@
SuppressLint
({
"MissingPermission"
,
"HardwareIds"
})
@
RequiresPermission
(
allOf
=
{
ACCESS_WIFI_STATE
,
INTERNET
,
CHANGE_WIFI_STATE
})
public
static
boolean
isSameDevice
(
final
String
uniqueDeviceId
)
{
// {prefix}{type}{32id}
if
(
TextUtils
.
isEmpty
(
uniqueDeviceId
)
&&
uniqueDeviceId
.
length
()
<
33
)
return
false
;
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
浏览文件 @
27cf719c
...
...
@@ -17,6 +17,7 @@ import android.util.Log;
import
android.view.View
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.List
;
...
...
@@ -301,7 +302,7 @@ public final class FragmentUtils {
final
boolean
isHide
,
final
boolean
isAddStack
)
{
putArgs
(
add
,
new
Args
(
containerId
,
tag
,
isHide
,
isAddStack
));
operateNoAnim
(
fm
,
TYPE_ADD_FRAGMENT
,
null
,
add
);
operateNoAnim
(
TYPE_ADD_FRAGMENT
,
fm
,
null
,
add
);
}
/**
...
...
@@ -489,7 +490,7 @@ public final class FragmentUtils {
putArgs
(
adds
[
i
],
new
Args
(
containerId
,
tags
[
i
],
showIndex
!=
i
,
false
));
}
}
operateNoAnim
(
fm
,
TYPE_ADD_FRAGMENT
,
null
,
adds
);
operateNoAnim
(
TYPE_ADD_FRAGMENT
,
fm
,
null
,
adds
);
}
/**
...
...
@@ -499,7 +500,7 @@ public final class FragmentUtils {
*/
public
static
void
show
(
@NonNull
final
Fragment
show
)
{
putArgs
(
show
,
false
);
operateNoAnim
(
show
.
getFragmentManager
(),
TYPE_SHOW_FRAGMENT
,
null
,
show
);
operateNoAnim
(
TYPE_SHOW_FRAGMENT
,
show
.
getFragmentManager
()
,
null
,
show
);
}
/**
...
...
@@ -512,11 +513,7 @@ public final class FragmentUtils {
for
(
Fragment
show
:
fragments
)
{
putArgs
(
show
,
false
);
}
operateNoAnim
(
fm
,
TYPE_SHOW_FRAGMENT
,
null
,
fragments
.
toArray
(
new
Fragment
[
0
])
);
operateNoAnim
(
TYPE_SHOW_FRAGMENT
,
fm
,
null
,
fragments
.
toArray
(
new
Fragment
[
0
]));
}
/**
...
...
@@ -526,7 +523,7 @@ public final class FragmentUtils {
*/
public
static
void
hide
(
@NonNull
final
Fragment
hide
)
{
putArgs
(
hide
,
true
);
operateNoAnim
(
hide
.
getFragmentManager
(),
TYPE_HIDE_FRAGMENT
,
null
,
hide
);
operateNoAnim
(
TYPE_HIDE_FRAGMENT
,
hide
.
getFragmentManager
()
,
null
,
hide
);
}
/**
...
...
@@ -539,21 +536,28 @@ public final class FragmentUtils {
for
(
Fragment
hide
:
fragments
)
{
putArgs
(
hide
,
true
);
}
operateNoAnim
(
fm
,
TYPE_HIDE_FRAGMENT
,
null
,
fragments
.
toArray
(
new
Fragment
[
0
])
);
operateNoAnim
(
TYPE_HIDE_FRAGMENT
,
fm
,
null
,
fragments
.
toArray
(
new
Fragment
[
0
]));
}
/**
* Show fragment then hide other fragment.
*
* @param show The fragment will be show.
* @param hide The fragment will be hide.
*/
public
static
void
showHide
(
@NonNull
final
Fragment
show
,
@NonNull
final
Fragment
hide
)
{
showHide
(
show
,
Collections
.
singletonList
(
hide
));
}
/**
* Show fragment then hide other fragment.
*
* @param showIndex The index of fragment will be shown.
* @param fragments The fragment
s
will be hide.
* @param fragments The fragment will be hide.
*/
public
static
void
showHide
(
final
int
showIndex
,
@NonNull
final
List
<
Fragment
>
fragments
)
{
showHide
(
fragments
.
get
(
showIndex
)
,
fragments
);
public
static
void
showHide
(
final
int
showIndex
,
@NonNull
final
Fragment
...
fragments
)
{
showHide
(
fragments
[
showIndex
]
,
fragments
);
}
/**
...
...
@@ -562,22 +566,18 @@ public final class FragmentUtils {
* @param show The fragment will be show.
* @param hide The fragment will be hide.
*/
public
static
void
showHide
(
@NonNull
final
Fragment
show
,
@NonNull
final
List
<
Fragment
>
hide
)
{
for
(
Fragment
fragment
:
hide
)
{
putArgs
(
fragment
,
fragment
!=
show
);
}
operateNoAnim
(
show
.
getFragmentManager
(),
TYPE_SHOW_HIDE_FRAGMENT
,
show
,
hide
.
toArray
(
new
Fragment
[
0
]));
public
static
void
showHide
(
@NonNull
final
Fragment
show
,
@NonNull
final
Fragment
...
hide
)
{
showHide
(
show
,
Arrays
.
asList
(
hide
));
}
/**
* Show fragment then hide other fragment.
*
* @param showIndex The index of fragment will be shown.
* @param fragments The fragment will be hide.
* @param fragments The fragment
s
will be hide.
*/
public
static
void
showHide
(
final
int
showIndex
,
@NonNull
final
Fragment
...
fragments
)
{
showHide
(
fragments
[
showIndex
]
,
fragments
);
public
static
void
showHide
(
final
int
showIndex
,
@NonNull
final
List
<
Fragment
>
fragments
)
{
showHide
(
fragments
.
get
(
showIndex
)
,
fragments
);
}
/**
...
...
@@ -586,13 +586,14 @@ public final class FragmentUtils {
* @param show The fragment will be show.
* @param hide The fragment will be hide.
*/
public
static
void
showHide
(
@NonNull
final
Fragment
show
,
@NonNull
final
Fragment
...
hide
)
{
public
static
void
showHide
(
@NonNull
final
Fragment
show
,
@NonNull
final
List
<
Fragment
>
hide
)
{
for
(
Fragment
fragment
:
hide
)
{
putArgs
(
fragment
,
fragment
!=
show
);
}
operateNoAnim
(
show
.
getFragmentManager
(),
TYPE_SHOW_HIDE_FRAGMENT
,
show
,
hide
);
operateNoAnim
(
TYPE_SHOW_HIDE_FRAGMENT
,
show
.
getFragmentManager
(),
show
,
hide
.
toArray
(
new
Fragment
[
0
])
);
}
/**
* Show fragment then hide other fragment.
*
...
...
@@ -600,10 +601,47 @@ public final class FragmentUtils {
* @param hide The fragment will be hide.
*/
public
static
void
showHide
(
@NonNull
final
Fragment
show
,
@NonNull
final
Fragment
hide
)
{
putArgs
(
show
,
false
);
putArgs
(
hide
,
true
);
operateNoAnim
(
show
.
getFragmentManager
(),
TYPE_SHOW_HIDE_FRAGMENT
,
show
,
hide
);
@NonNull
final
Fragment
hide
,
@AnimatorRes
@AnimRes
final
int
enterAnim
,
@AnimatorRes
@AnimRes
final
int
exitAnim
,
@AnimatorRes
@AnimRes
final
int
popEnterAnim
,
@AnimatorRes
@AnimRes
final
int
popExitAnim
)
{
showHide
(
show
,
Collections
.
singletonList
(
hide
),
enterAnim
,
exitAnim
,
popEnterAnim
,
popExitAnim
);
}
/**
* Show fragment then hide other fragment.
*
* @param showIndex The index of fragment will be shown.
* @param fragments The fragments will be hide.
*/
public
static
void
showHide
(
final
int
showIndex
,
@NonNull
final
List
<
Fragment
>
fragments
,
@AnimatorRes
@AnimRes
final
int
enterAnim
,
@AnimatorRes
@AnimRes
final
int
exitAnim
,
@AnimatorRes
@AnimRes
final
int
popEnterAnim
,
@AnimatorRes
@AnimRes
final
int
popExitAnim
)
{
showHide
(
fragments
.
get
(
showIndex
),
fragments
,
enterAnim
,
exitAnim
,
popEnterAnim
,
popExitAnim
);
}
/**
* Show fragment then hide other fragment.
*
* @param show The fragment will be show.
* @param hide The fragment will be hide.
*/
public
static
void
showHide
(
@NonNull
final
Fragment
show
,
@NonNull
final
List
<
Fragment
>
hide
,
@AnimatorRes
@AnimRes
final
int
enterAnim
,
@AnimatorRes
@AnimRes
final
int
exitAnim
,
@AnimatorRes
@AnimRes
final
int
popEnterAnim
,
@AnimatorRes
@AnimRes
final
int
popExitAnim
)
{
for
(
Fragment
fragment
:
hide
)
{
putArgs
(
fragment
,
fragment
!=
show
);
}
FragmentManager
fm
=
show
.
getFragmentManager
();
if
(
fm
!=
null
)
{
FragmentTransaction
ft
=
fm
.
beginTransaction
();
addAnim
(
ft
,
enterAnim
,
exitAnim
,
popEnterAnim
,
popExitAnim
);
operate
(
TYPE_SHOW_HIDE_FRAGMENT
,
fm
,
ft
,
show
,
hide
.
toArray
(
new
Fragment
[
0
]));
}
}
/**
...
...
@@ -1357,7 +1395,7 @@ public final class FragmentUtils {
* @param remove The fragment will be removed.
*/
public
static
void
remove
(
@NonNull
final
Fragment
remove
)
{
operateNoAnim
(
remove
.
getFragmentManager
(),
TYPE_REMOVE_FRAGMENT
,
null
,
remove
);
operateNoAnim
(
TYPE_REMOVE_FRAGMENT
,
remove
.
getFragmentManager
()
,
null
,
remove
);
}
/**
...
...
@@ -1367,8 +1405,7 @@ public final class FragmentUtils {
* @param isIncludeSelf True to include the fragment, false otherwise.
*/
public
static
void
removeTo
(
@NonNull
final
Fragment
removeTo
,
final
boolean
isIncludeSelf
)
{
operateNoAnim
(
removeTo
.
getFragmentManager
(),
TYPE_REMOVE_TO_FRAGMENT
,
isIncludeSelf
?
removeTo
:
null
,
removeTo
);
operateNoAnim
(
TYPE_REMOVE_TO_FRAGMENT
,
removeTo
.
getFragmentManager
(),
isIncludeSelf
?
removeTo
:
null
,
removeTo
);
}
/**
...
...
@@ -1378,11 +1415,7 @@ public final class FragmentUtils {
*/
public
static
void
removeAll
(
@NonNull
final
FragmentManager
fm
)
{
List
<
Fragment
>
fragments
=
getFragments
(
fm
);
operateNoAnim
(
fm
,
TYPE_REMOVE_FRAGMENT
,
null
,
fragments
.
toArray
(
new
Fragment
[
0
])
);
operateNoAnim
(
TYPE_REMOVE_FRAGMENT
,
fm
,
null
,
fragments
.
toArray
(
new
Fragment
[
0
]));
}
private
static
void
putArgs
(
final
Fragment
fragment
,
final
Args
args
)
{
...
...
@@ -1414,8 +1447,7 @@ public final class FragmentUtils {
bundle
.
getBoolean
(
ARGS_IS_ADD_STACK
));
}
private
static
void
operateNoAnim
(
@Nullable
final
FragmentManager
fm
,
final
int
type
,
private
static
void
operateNoAnim
(
final
int
type
,
@Nullable
final
FragmentManager
fm
,
final
Fragment
src
,
Fragment
...
dest
)
{
if
(
fm
==
null
)
return
;
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java
浏览文件 @
27cf719c
package
com.blankj.utilcode.util
;
import
android.annotation.SuppressLint
;
import
android.app.Notification
;
import
android.app.Service
;
import
android.content.ComponentName
;
import
android.content.Context
;
...
...
@@ -296,6 +297,12 @@ public class MessengerUtils {
@Override
public
int
onStartCommand
(
Intent
intent
,
int
flags
,
int
startId
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
O
)
{
Notification
notification
=
UtilsBridge
.
getNotification
(
NotificationUtils
.
ChannelConfig
.
DEFAULT_CHANNEL_CONFIG
,
null
);
startForeground
(
1
,
notification
);
}
if
(
intent
!=
null
)
{
Bundle
extras
=
intent
.
getExtras
();
if
(
extras
!=
null
)
{
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
浏览文件 @
27cf719c
...
...
@@ -7,6 +7,7 @@ import android.content.Intent;
import
android.content.IntentFilter
;
import
android.net.ConnectivityManager
;
import
android.net.NetworkInfo
;
import
android.net.wifi.ScanResult
;
import
android.net.wifi.WifiInfo
;
import
android.net.wifi.WifiManager
;
import
android.os.Build
;
...
...
@@ -22,12 +23,18 @@ import java.net.InterfaceAddress;
import
java.net.NetworkInterface
;
import
java.net.SocketException
;
import
java.net.UnknownHostException
;
import
java.util.ArrayList
;
import
java.util.Enumeration
;
import
java.util.HashSet
;
import
java.util.LinkedHashMap
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.Timer
;
import
java.util.TimerTask
;
import
java.util.concurrent.CopyOnWriteArraySet
;
import
static
android
.
Manifest
.
permission
.
ACCESS_COARSE_LOCATION
;
import
static
android
.
Manifest
.
permission
.
ACCESS_NETWORK_STATE
;
import
static
android
.
Manifest
.
permission
.
ACCESS_WIFI_STATE
;
import
static
android
.
Manifest
.
permission
.
CHANGE_WIFI_STATE
;
...
...
@@ -686,6 +693,7 @@ public final class NetworkUtils {
*
* @param listener The status of network changed listener
*/
@RequiresPermission
(
ACCESS_NETWORK_STATE
)
public
static
void
registerNetworkStatusChangedListener
(
final
OnNetworkStatusChangedListener
listener
)
{
NetworkChangedReceiver
.
getInstance
().
registerListener
(
listener
);
}
...
...
@@ -709,6 +717,123 @@ public final class NetworkUtils {
NetworkChangedReceiver
.
getInstance
().
unregisterListener
(
listener
);
}
@RequiresPermission
(
allOf
=
{
ACCESS_WIFI_STATE
,
ACCESS_COARSE_LOCATION
})
public
static
WifiScanResults
getWifiScanResult
()
{
WifiScanResults
result
=
new
WifiScanResults
();
if
(!
getWifiEnabled
())
return
result
;
@SuppressLint
(
"WifiManagerLeak"
)
WifiManager
wm
=
(
WifiManager
)
Utils
.
getApp
().
getSystemService
(
WIFI_SERVICE
);
//noinspection ConstantConditions
List
<
ScanResult
>
results
=
wm
.
getScanResults
();
if
(
results
!=
null
)
{
result
.
setAllResults
(
results
);
}
return
result
;
}
private
static
final
long
SCAN_PERIOD_MILLIS
=
3000
;
private
static
final
Set
<
Utils
.
Consumer
<
WifiScanResults
>>
SCAN_RESULT_CONSUMERS
=
new
CopyOnWriteArraySet
<>();
private
static
Timer
sScanWifiTimer
;
private
static
WifiScanResults
sPreWifiScanResults
;
@RequiresPermission
(
allOf
=
{
ACCESS_WIFI_STATE
,
CHANGE_WIFI_STATE
,
ACCESS_COARSE_LOCATION
})
public
static
void
addOnWifiChangedConsumer
(
final
Utils
.
Consumer
<
WifiScanResults
>
consumer
)
{
if
(
consumer
==
null
)
return
;
UtilsBridge
.
runOnUiThread
(
new
Runnable
()
{
@Override
public
void
run
()
{
if
(
SCAN_RESULT_CONSUMERS
.
isEmpty
())
{
SCAN_RESULT_CONSUMERS
.
add
(
consumer
);
startScanWifi
();
return
;
}
consumer
.
accept
(
sPreWifiScanResults
);
SCAN_RESULT_CONSUMERS
.
add
(
consumer
);
}
});
}
private
static
void
startScanWifi
()
{
sPreWifiScanResults
=
new
WifiScanResults
();
sScanWifiTimer
=
new
Timer
();
sScanWifiTimer
.
schedule
(
new
TimerTask
()
{
@RequiresPermission
(
allOf
=
{
ACCESS_WIFI_STATE
,
CHANGE_WIFI_STATE
,
ACCESS_COARSE_LOCATION
})
@Override
public
void
run
()
{
startScanWifiIfEnabled
();
WifiScanResults
scanResults
=
getWifiScanResult
();
if
(
isSameScanResults
(
sPreWifiScanResults
.
allResults
,
scanResults
.
allResults
))
{
return
;
}
sPreWifiScanResults
=
scanResults
;
UtilsBridge
.
runOnUiThread
(
new
Runnable
()
{
@Override
public
void
run
()
{
for
(
Utils
.
Consumer
<
WifiScanResults
>
consumer
:
SCAN_RESULT_CONSUMERS
)
{
consumer
.
accept
(
sPreWifiScanResults
);
}
}
});
}
},
0
,
SCAN_PERIOD_MILLIS
);
}
@RequiresPermission
(
allOf
=
{
ACCESS_WIFI_STATE
,
CHANGE_WIFI_STATE
})
private
static
void
startScanWifiIfEnabled
()
{
if
(!
getWifiEnabled
())
return
;
@SuppressLint
(
"WifiManagerLeak"
)
WifiManager
wm
=
(
WifiManager
)
Utils
.
getApp
().
getSystemService
(
WIFI_SERVICE
);
//noinspection ConstantConditions
wm
.
startScan
();
}
public
static
void
removeOnWifiChangedConsumer
(
final
Utils
.
Consumer
<
WifiScanResults
>
consumer
)
{
if
(
consumer
==
null
)
return
;
UtilsBridge
.
runOnUiThread
(
new
Runnable
()
{
@Override
public
void
run
()
{
SCAN_RESULT_CONSUMERS
.
remove
(
consumer
);
if
(
SCAN_RESULT_CONSUMERS
.
isEmpty
())
{
stopScanWifi
();
}
}
});
}
private
static
void
stopScanWifi
()
{
if
(
sScanWifiTimer
!=
null
)
{
sScanWifiTimer
.
cancel
();
sScanWifiTimer
=
null
;
}
}
private
static
boolean
isSameScanResults
(
List
<
ScanResult
>
l1
,
List
<
ScanResult
>
l2
)
{
if
(
l1
==
null
&&
l2
==
null
)
{
return
true
;
}
if
(
l1
==
null
||
l2
==
null
)
{
return
false
;
}
if
(
l1
.
size
()
!=
l2
.
size
())
{
return
false
;
}
for
(
int
i
=
0
;
i
<
l1
.
size
();
i
++)
{
ScanResult
r1
=
l1
.
get
(
i
);
ScanResult
r2
=
l2
.
get
(
i
);
if
(!
isSameScanResultContent
(
r1
,
r2
))
{
return
false
;
}
}
return
true
;
}
private
static
boolean
isSameScanResultContent
(
ScanResult
r1
,
ScanResult
r2
)
{
return
r1
!=
null
&&
r2
!=
null
&&
UtilsBridge
.
equals
(
r1
.
BSSID
,
r2
.
BSSID
)
&&
UtilsBridge
.
equals
(
r1
.
SSID
,
r2
.
SSID
)
&&
UtilsBridge
.
equals
(
r1
.
capabilities
,
r2
.
capabilities
)
&&
r1
.
level
==
r2
.
level
;
}
public
static
final
class
NetworkChangedReceiver
extends
BroadcastReceiver
{
private
static
NetworkChangedReceiver
getInstance
()
{
...
...
@@ -718,11 +843,12 @@ public final class NetworkUtils {
private
NetworkType
mType
;
private
Set
<
OnNetworkStatusChangedListener
>
mListeners
=
new
HashSet
<>();
@RequiresPermission
(
ACCESS_NETWORK_STATE
)
void
registerListener
(
final
OnNetworkStatusChangedListener
listener
)
{
if
(
listener
==
null
)
return
;
UtilsBridge
.
runOnUiThread
(
new
Runnable
()
{
@SuppressLint
(
"MissingPermission"
)
@Override
@RequiresPermission
(
ACCESS_NETWORK_STATE
)
public
void
run
()
{
int
preSize
=
mListeners
.
size
();
mListeners
.
add
(
listener
);
...
...
@@ -754,13 +880,13 @@ public final class NetworkUtils {
});
}
@SuppressLint
(
"MissingPermission"
)
@Override
public
void
onReceive
(
Context
context
,
Intent
intent
)
{
if
(
ConnectivityManager
.
CONNECTIVITY_ACTION
.
equals
(
intent
.
getAction
()))
{
// debouncing
UtilsBridge
.
runOnUiThreadDelayed
(
new
Runnable
()
{
@Override
@RequiresPermission
(
ACCESS_NETWORK_STATE
)
public
void
run
()
{
NetworkType
networkType
=
NetworkUtils
.
getNetworkType
();
if
(
mType
==
networkType
)
return
;
...
...
@@ -863,4 +989,45 @@ public final class NetworkUtils {
void
onConnected
(
NetworkType
networkType
);
}
public
static
final
class
WifiScanResults
{
private
List
<
ScanResult
>
allResults
=
new
ArrayList
<>();
private
List
<
ScanResult
>
filterResults
=
new
ArrayList
<>();
public
WifiScanResults
()
{
}
public
List
<
ScanResult
>
getAllResults
()
{
return
allResults
;
}
public
List
<
ScanResult
>
getFilterResults
()
{
return
filterResults
;
}
public
void
setAllResults
(
List
<
ScanResult
>
allResults
)
{
this
.
allResults
=
allResults
;
filterResults
=
filterScanResult
(
allResults
);
}
private
static
List
<
ScanResult
>
filterScanResult
(
final
List
<
ScanResult
>
results
)
{
if
(
results
==
null
||
results
.
isEmpty
())
{
return
new
ArrayList
<>();
}
LinkedHashMap
<
String
,
ScanResult
>
map
=
new
LinkedHashMap
<>(
results
.
size
());
for
(
ScanResult
result
:
results
)
{
if
(
TextUtils
.
isEmpty
(
result
.
SSID
))
{
continue
;
}
ScanResult
resultInMap
=
map
.
get
(
result
.
SSID
);
if
(
resultInMap
!=
null
&&
resultInMap
.
level
>=
result
.
level
)
{
continue
;
}
map
.
put
(
result
.
SSID
,
result
);
}
return
new
ArrayList
<>(
map
.
values
());
}
}
}
lib/utilcode/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
浏览文件 @
27cf719c
...
...
@@ -91,21 +91,26 @@ public class NotificationUtils {
* @param consumer The consumer of create the builder of notification.
*/
public
static
void
notify
(
String
tag
,
int
id
,
ChannelConfig
channelConfig
,
Utils
.
Consumer
<
NotificationCompat
.
Builder
>
consumer
)
{
NotificationManagerCompat
.
from
(
Utils
.
getApp
()).
notify
(
tag
,
id
,
getNotification
(
channelConfig
,
consumer
));
}
public
static
Notification
getNotification
(
ChannelConfig
channelConfig
,
Utils
.
Consumer
<
NotificationCompat
.
Builder
>
consumer
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
O
)
{
NotificationManager
nm
=
(
NotificationManager
)
Utils
.
getApp
().
getSystemService
(
Context
.
NOTIFICATION_SERVICE
);
//noinspection ConstantConditions
nm
.
createNotificationChannel
(
channelConfig
.
getNotificationChannel
());
}
NotificationManagerCompat
nmc
=
NotificationManagerCompat
.
from
(
Utils
.
getApp
());
NotificationCompat
.
Builder
builder
=
new
NotificationCompat
.
Builder
(
Utils
.
getApp
());
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
O
)
{
builder
.
setChannelId
(
channelConfig
.
mNotificationChannel
.
getId
());
}
consumer
.
accept
(
builder
);
if
(
consumer
!=
null
)
{
consumer
.
accept
(
builder
);
}
nmc
.
notify
(
tag
,
id
,
builder
.
build
()
);
return
builder
.
build
(
);
}
/**
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java
浏览文件 @
27cf719c
...
...
@@ -1525,7 +1525,7 @@ public final class TimeUtils {
private
static
final
int
[]
ZODIAC_FLAGS
=
{
20
,
19
,
21
,
21
,
21
,
22
,
23
,
23
,
23
,
24
,
23
,
22
};
private
static
final
String
[]
ZODIAC
=
{
"水瓶座"
,
"双鱼座"
,
"白羊座"
,
"金牛座"
,
"双子座"
,
"巨蟹座"
,
"狮子座"
,
"处女座"
,
"天秤座"
,
"天蝎座"
,
"射手座"
,
"
魔
羯座"
"狮子座"
,
"处女座"
,
"天秤座"
,
"天蝎座"
,
"射手座"
,
"
摩
羯座"
};
/**
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsActivityLifecycleImpl.java
浏览文件 @
27cf719c
...
...
@@ -7,6 +7,7 @@ import android.arch.lifecycle.Lifecycle;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.support.annotation.NonNull
;
import
android.support.annotation.Nullable
;
import
android.util.Log
;
import
android.view.Window
;
import
android.view.WindowManager
;
...
...
@@ -195,6 +196,9 @@ final class UtilsActivityLifecycleImpl implements Application.ActivityLifecycleC
///////////////////////////////////////////////////////////////////////////
// lifecycle start
///////////////////////////////////////////////////////////////////////////
@Override
public
void
onActivityPreCreated
(
@NonNull
Activity
activity
,
@Nullable
Bundle
savedInstanceState
)
{
/**/
}
@Override
public
void
onActivityCreated
(
@NonNull
Activity
activity
,
Bundle
savedInstanceState
)
{
LanguageUtils
.
applyLanguage
(
activity
);
...
...
@@ -203,6 +207,12 @@ final class UtilsActivityLifecycleImpl implements Application.ActivityLifecycleC
consumeActivityLifecycleCallbacks
(
activity
,
Lifecycle
.
Event
.
ON_CREATE
);
}
@Override
public
void
onActivityPostCreated
(
@NonNull
Activity
activity
,
@Nullable
Bundle
savedInstanceState
)
{
/**/
}
@Override
public
void
onActivityPreStarted
(
@NonNull
Activity
activity
)
{
/**/
}
@Override
public
void
onActivityStarted
(
@NonNull
Activity
activity
)
{
if
(!
mIsBackground
)
{
...
...
@@ -216,6 +226,12 @@ final class UtilsActivityLifecycleImpl implements Application.ActivityLifecycleC
consumeActivityLifecycleCallbacks
(
activity
,
Lifecycle
.
Event
.
ON_START
);
}
@Override
public
void
onActivityPostStarted
(
@NonNull
Activity
activity
)
{
/**/
}
@Override
public
void
onActivityPreResumed
(
@NonNull
Activity
activity
)
{
/**/
}
@Override
public
void
onActivityResumed
(
@NonNull
final
Activity
activity
)
{
setTopActivity
(
activity
);
...
...
@@ -227,11 +243,23 @@ final class UtilsActivityLifecycleImpl implements Application.ActivityLifecycleC
consumeActivityLifecycleCallbacks
(
activity
,
Lifecycle
.
Event
.
ON_RESUME
);
}
@Override
public
void
onActivityPostResumed
(
@NonNull
Activity
activity
)
{
/**/
}
@Override
public
void
onActivityPrePaused
(
@NonNull
Activity
activity
)
{
/**/
}
@Override
public
void
onActivityPaused
(
@NonNull
Activity
activity
)
{
consumeActivityLifecycleCallbacks
(
activity
,
Lifecycle
.
Event
.
ON_PAUSE
);
}
@Override
public
void
onActivityPostPaused
(
@NonNull
Activity
activity
)
{
/**/
}
@Override
public
void
onActivityPreStopped
(
@NonNull
Activity
activity
)
{
/**/
}
@Override
public
void
onActivityStopped
(
Activity
activity
)
{
if
(
activity
.
isChangingConfigurations
())
{
...
...
@@ -248,7 +276,19 @@ final class UtilsActivityLifecycleImpl implements Application.ActivityLifecycleC
}
@Override
public
void
onActivitySaveInstanceState
(
@NonNull
Activity
activity
,
Bundle
outState
)
{
/**/
}
public
void
onActivityPostStopped
(
@NonNull
Activity
activity
)
{
/**/
}
@Override
public
void
onActivityPreSaveInstanceState
(
@NonNull
Activity
activity
,
@NonNull
Bundle
outState
)
{
/**/
}
@Override
public
void
onActivitySaveInstanceState
(
@NonNull
Activity
activity
,
@NonNull
Bundle
outState
)
{
/**/
}
@Override
public
void
onActivityPostSaveInstanceState
(
@NonNull
Activity
activity
,
@NonNull
Bundle
outState
)
{
/**/
}
@Override
public
void
onActivityPreDestroyed
(
@NonNull
Activity
activity
)
{
/**/
}
@Override
public
void
onActivityDestroyed
(
@NonNull
Activity
activity
)
{
...
...
@@ -256,6 +296,9 @@ final class UtilsActivityLifecycleImpl implements Application.ActivityLifecycleC
UtilsBridge
.
fixSoftInputLeaks
(
activity
);
consumeActivityLifecycleCallbacks
(
activity
,
Lifecycle
.
Event
.
ON_DESTROY
);
}
@Override
public
void
onActivityPostDestroyed
(
@NonNull
Activity
activity
)
{
/**/
}
///////////////////////////////////////////////////////////////////////////
// lifecycle end
///////////////////////////////////////////////////////////////////////////
...
...
lib/utilcode/src/main/java/com/blankj/utilcode/util/UtilsBridge.java
浏览文件 @
27cf719c
...
...
@@ -2,6 +2,7 @@ package com.blankj.utilcode.util;
import
android.app.Activity
;
import
android.app.Application
;
import
android.app.Notification
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.graphics.Bitmap
;
...
...
@@ -14,6 +15,7 @@ import android.support.annotation.NonNull;
import
android.support.annotation.RequiresApi
;
import
android.support.annotation.RequiresPermission
;
import
android.support.annotation.StringRes
;
import
android.support.v4.app.NotificationCompat
;
import
android.text.TextUtils
;
import
android.view.View
;
...
...
@@ -418,6 +420,14 @@ class UtilsBridge {
KeyboardUtils
.
fixSoftInputLeaks
(
activity
);
}
///////////////////////////////////////////////////////////////////////////
// NotificationUtils
///////////////////////////////////////////////////////////////////////////
static
Notification
getNotification
(
NotificationUtils
.
ChannelConfig
channelConfig
,
Utils
.
Consumer
<
NotificationCompat
.
Builder
>
consumer
)
{
return
NotificationUtils
.
getNotification
(
channelConfig
,
consumer
);
}
///////////////////////////////////////////////////////////////////////////
// PermissionUtils
///////////////////////////////////////////////////////////////////////////
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录