Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DiDi
DoraemonKit
提交
b3d5e1d5
D
DoraemonKit
项目概览
DiDi
/
DoraemonKit
10 个月 前同步成功
通知
166
Star
19623
Fork
3062
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
DoraemonKit
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b3d5e1d5
编写于
7月 08, 2021
作者:
囧jt
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify:
[Android]: 新增主机断开通知
上级
e3a88810
变更
26
展开全部
隐藏空白更改
内联
并排
Showing
26 changed file
with
848 addition
and
1024 deletion
+848
-1024
Android/java/app/src/debug/java/com/didichuxing/doraemondemo/dokit/DemoDokitView.kt
.../java/com/didichuxing/doraemondemo/dokit/DemoDokitView.kt
+1
-1
Android/java/doraemonkit-mc/src/main/java/com/didichuxing/doraemonkit/kit/mc/ability/DokitMcModuleProcessor.kt
...xing/doraemonkit/kit/mc/ability/DokitMcModuleProcessor.kt
+20
-4
Android/java/doraemonkit-mc/src/main/java/com/didichuxing/doraemonkit/kit/mc/all/ui/DoKitMcDatasFragment.kt
...chuxing/doraemonkit/kit/mc/all/ui/DoKitMcDatasFragment.kt
+3
-2
Android/java/doraemonkit-mc/src/main/java/com/didichuxing/doraemonkit/kit/mc/all/ui/DoKitMcMainFragment.kt
...ichuxing/doraemonkit/kit/mc/all/ui/DoKitMcMainFragment.kt
+23
-8
Android/java/doraemonkit-rpc-mc/src/main/java/com/didichuxing/doraemonkit/rpc/RpcMcExtension.kt
...in/java/com/didichuxing/doraemonkit/rpc/RpcMcExtension.kt
+84
-0
Android/java/doraemonkit-rpc-mc/src/main/java/com/didichuxing/doraemonkit/rpc/ability/RpcMcInterceptor.kt
...m/didichuxing/doraemonkit/rpc/ability/RpcMcInterceptor.kt
+0
-2
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/DoKitOrientationEventListener.kt
.../didichuxing/doraemonkit/DoKitOrientationEventListener.kt
+1
-1
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/DoKitReal.kt
...it/src/main/java/com/didichuxing/doraemonkit/DoKitReal.kt
+7
-11
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/constant/DoKitConstant.kt
...ava/com/didichuxing/doraemonkit/constant/DoKitConstant.kt
+28
-3
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/AbsDokitView.kt
...java/com/didichuxing/doraemonkit/kit/core/AbsDokitView.kt
+28
-24
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/AbsDokitViewManager.kt
...m/didichuxing/doraemonkit/kit/core/AbsDokitViewManager.kt
+19
-40
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/BaseFragment.kt
...java/com/didichuxing/doraemonkit/kit/core/BaseFragment.kt
+1
-1
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/DokitAbility.kt
...java/com/didichuxing/doraemonkit/kit/core/DokitAbility.kt
+3
-0
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/DokitViewManager.kt
.../com/didichuxing/doraemonkit/kit/core/DokitViewManager.kt
+151
-272
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/DokitViewManagerInterface.kt
...chuxing/doraemonkit/kit/core/DokitViewManagerInterface.kt
+23
-31
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/NormalDokitViewManager.kt
...idichuxing/doraemonkit/kit/core/NormalDokitViewManager.kt
+288
-406
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/SimpleDokitStarter.kt
...om/didichuxing/doraemonkit/kit/core/SimpleDokitStarter.kt
+2
-2
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/SystemDokitViewManager.kt
...idichuxing/doraemonkit/kit/core/SystemDokitViewManager.kt
+157
-207
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/h5_help/DokitJSI.kt
.../java/com/didichuxing/doraemonkit/kit/h5_help/DokitJSI.kt
+1
-1
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/h5_help/DokitWebViewClient.kt
...didichuxing/doraemonkit/kit/h5_help/DokitWebViewClient.kt
+1
-1
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/h5_help/DokitX5WebViewClient.kt
...dichuxing/doraemonkit/kit/h5_help/DokitX5WebViewClient.kt
+1
-1
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/h5_help/H5DokitView.kt
...va/com/didichuxing/doraemonkit/kit/h5_help/H5DokitView.kt
+1
-1
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/health/CountDownDokitView.kt
.../didichuxing/doraemonkit/kit/health/CountDownDokitView.kt
+2
-2
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/lbs/route/AMapRealNavMockView.kt
...ichuxing/doraemonkit/kit/lbs/route/AMapRealNavMockView.kt
+1
-1
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/toolpanel/ToolPanelAdapter.kt
...didichuxing/doraemonkit/kit/toolpanel/ToolPanelAdapter.kt
+1
-1
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/toolpanel/ToolPanelDokitView.kt
...dichuxing/doraemonkit/kit/toolpanel/ToolPanelDokitView.kt
+1
-1
未找到文件。
Android/java/app/src/debug/java/com/didichuxing/doraemondemo/dokit/DemoDokitView.kt
浏览文件 @
b3d5e1d5
...
...
@@ -31,7 +31,7 @@ class DemoDokitView : AbsDokitView() {
override
fun
onViewCreated
(
rootView
:
FrameLayout
)
{
val
tvClose
=
findViewById
<
TextView
>(
R
.
id
.
tv_close
)
tvClose
?.
setOnClickListener
{
DokitViewManager
.
getInstance
()
.
detach
(
this
@DemoDokitView
)
}
tvClose
?.
setOnClickListener
{
DokitViewManager
.
instance
.
detach
(
this
@DemoDokitView
)
}
}
...
...
Android/java/doraemonkit-mc/src/main/java/com/didichuxing/doraemonkit/kit/mc/ability/DokitMcModuleProcessor.kt
浏览文件 @
b3d5e1d5
package
com.didichuxing.doraemonkit.kit.mc.ability
import
com.didichuxing.doraemonkit.constant.DoKitConstant
import
com.didichuxing.doraemonkit.constant.WSMode
import
com.didichuxing.doraemonkit.kit.core.DokitAbility
import
com.didichuxing.doraemonkit.kit.core.DokitIntent
import
com.didichuxing.doraemonkit.kit.core.DokitViewManager
import
com.didichuxing.doraemonkit.kit.health.CountDownDokitView
import
com.didichuxing.doraemonkit.kit.core.SimpleDokitStarter
import
com.didichuxing.doraemonkit.kit.mc.all.McConstant
import
com.didichuxing.doraemonkit.kit.mc.client.ClientDokitView
import
com.didichuxing.doraemonkit.kit.mc.server.HostDokitView
import
com.google.auto.service.AutoService
import
com.didichuxing.doraemonkit.kit.mc.server.RecordingDokitView
import
com.didichuxing.doraemonkit.util.LogHelper
import
com.didichuxing.doraemonkit.util.SPUtils
/**
* ================================================
...
...
@@ -19,6 +24,7 @@ import com.google.auto.service.AutoService
*/
class
DokitMcModuleProcessor
:
DokitAbility
.
DokitModuleProcessor
{
override
fun
values
():
Map
<
String
,
Any
>
{
return
mapOf
(
"okhttp_interceptor"
to
DokitMcInterceptor
(),
...
...
@@ -32,12 +38,22 @@ class DokitMcModuleProcessor : DokitAbility.DokitModuleProcessor {
"launch_host_view"
->
{
val
dokitIntent
=
DokitIntent
(
HostDokitView
::
class
.
java
)
dokitIntent
.
mode
=
DokitIntent
.
MODE_ONCE
DokitViewManager
.
getInstance
()
.
attach
(
dokitIntent
)
DokitViewManager
.
instance
.
attach
(
dokitIntent
)
}
"launch_client_view"
->
{
val
dokitIntent
=
DokitIntent
(
ClientDokitView
::
class
.
java
)
dokitIntent
.
mode
=
DokitIntent
.
MODE_ONCE
DokitViewManager
.
getInstance
().
attach
(
dokitIntent
)
DokitViewManager
.
instance
.
attach
(
dokitIntent
)
}
"launch_recoding_view"
->
{
SimpleDokitStarter
.
startFloating
(
RecordingDokitView
::
class
.
java
)
DoKitConstant
.
IS_MC_RECODING
=
true
McConstant
.
MC_CASE_ID
=
SPUtils
.
getInstance
().
getString
(
DoKitConstant
.
MC_CASE_ID_KEY
)
DoKitConstant
.
WS_MODE
=
WSMode
.
RECORDING
//添加录制中的悬浮窗
LogHelper
.
i
(
TAG
,
"====launch_recoding_view==="
)
}
else
->
{
...
...
Android/java/doraemonkit-mc/src/main/java/com/didichuxing/doraemonkit/kit/mc/all/ui/DoKitMcDatasFragment.kt
浏览文件 @
b3d5e1d5
...
...
@@ -6,6 +6,7 @@ import android.widget.TextView
import
androidx.lifecycle.lifecycleScope
import
androidx.recyclerview.widget.LinearLayoutManager
import
androidx.recyclerview.widget.RecyclerView
import
com.didichuxing.doraemonkit.constant.DoKitConstant
import
com.didichuxing.doraemonkit.kit.core.BaseFragment
import
com.didichuxing.doraemonkit.kit.mc.ability.McHttpManager
import
com.didichuxing.doraemonkit.kit.mc.all.McConstant
...
...
@@ -75,12 +76,12 @@ class DoKitMcDatasFragment : BaseFragment() {
private
fun
saveCaseId
(
caseId
:
String
)
{
McConstant
.
MC_CASE_ID
=
caseId
SPUtils
.
getInstance
().
put
(
"mc_case_id"
,
caseId
)
SPUtils
.
getInstance
().
put
(
DoKitConstant
.
MC_CASE_ID_KEY
,
caseId
)
}
private
fun
loadCaseId
():
String
{
return
if
(
McConstant
.
MC_CASE_ID
.
isEmpty
())
{
val
caseId
=
SPUtils
.
getInstance
().
getString
(
"mc_case_id"
,
""
)
val
caseId
=
SPUtils
.
getInstance
().
getString
(
DoKitConstant
.
MC_CASE_ID_KEY
,
""
)
McConstant
.
MC_CASE_ID
=
caseId
McConstant
.
MC_CASE_ID
}
else
{
...
...
Android/java/doraemonkit-mc/src/main/java/com/didichuxing/doraemonkit/kit/mc/all/ui/DoKitMcMainFragment.kt
浏览文件 @
b3d5e1d5
...
...
@@ -13,6 +13,8 @@ import android.widget.Button
import
androidx.appcompat.app.AlertDialog
import
androidx.lifecycle.lifecycleScope
import
com.didichuxing.doraemonkit.constant.DoKitConstant
import
com.didichuxing.doraemonkit.constant.DoKitConstant.MC_CASE_ID_KEY
import
com.didichuxing.doraemonkit.constant.DoKitConstant.MC_CASE_RECODING_KEY
import
com.didichuxing.doraemonkit.constant.WSMode
import
com.didichuxing.doraemonkit.extension.isTrueWithCor
import
com.didichuxing.doraemonkit.util.GsonUtils
...
...
@@ -30,6 +32,7 @@ import com.didichuxing.doraemonkit.kit.mc.server.HostInfo
import
com.didichuxing.doraemonkit.kit.mc.server.RecordingDokitView
import
com.didichuxing.doraemonkit.mc.R
import
com.didichuxing.doraemonkit.util.LogHelper
import
com.didichuxing.doraemonkit.util.SPUtils
import
com.didichuxing.doraemonkit.widget.dialog.DialogListener
import
com.didichuxing.doraemonkit.widget.dialog.DialogProvider
import
com.didichuxing.doraemonkit.zxing.activity.CaptureActivity
...
...
@@ -50,6 +53,7 @@ import kotlin.coroutines.suspendCoroutine
* ================================================
*/
class
DoKitMcMainFragment
:
BaseFragment
()
{
private
val
REQUEST_CODE_CAMERA
=
0x100
private
val
REQUEST_CODE_SCAN
=
0x101
private
val
exceptionHandler
=
CoroutineExceptionHandler
{
_
,
throwable
->
...
...
@@ -132,13 +136,9 @@ class DoKitMcMainFragment : BaseFragment() {
ToastUtils
.
showShort
(
"取消用例采集"
)
})
{
try
{
val
resInfo
=
McHttpManager
.
mockStart
<
McCaseInfo
>()
if
(
resInfo
.
code
==
RESPONSE_OK
)
{
val
configInfo
=
resInfo
.
data
McConstant
.
MC_CASE_ID
=
configInfo
?.
caseId
?:
""
SimpleDokitStarter
.
startFloating
(
RecordingDokitView
::
class
.
java
)
DoKitConstant
.
WS_MODE
=
WSMode
.
RECORDING
ToastUtils
.
showShort
(
"开始用例采集"
)
val
caseInfo
=
McHttpManager
.
mockStart
<
McCaseInfo
>()
if
(
caseInfo
.
code
==
RESPONSE_OK
)
{
saveRecodingStatus
(
caseInfo
.
data
)
}
}
catch
(
e
:
Exception
)
{
LogHelper
.
e
(
TAG
,
"e===>${e.message}"
)
...
...
@@ -167,8 +167,8 @@ class DoKitMcMainFragment : BaseFragment() {
val
result
=
McHttpManager
.
mockStop
<
Any
>(
mcCaseInfoDialog
())
if
(
result
.
code
==
RESPONSE_OK
)
{
DoKitConstant
.
WS_MODE
=
WSMode
.
UNKNOW
SimpleDokitStarter
.
removeFloating
(
RecordingDokitView
::
class
.
java
)
SPUtils
.
getInstance
().
put
(
MC_CASE_RECODING_KEY
,
false
)
ToastUtils
.
showShort
(
"用例上传成功"
)
}
else
{
LogHelper
.
e
(
TAG
,
"error msg===>${result.msg}"
)
...
...
@@ -204,6 +204,21 @@ class DoKitMcMainFragment : BaseFragment() {
}
/**
* 持久化录制状态 方便重启继续录制
*/
private
fun
saveRecodingStatus
(
configInfo
:
McCaseInfo
?)
{
configInfo
?.
let
{
McConstant
.
MC_CASE_ID
=
it
.
caseId
SimpleDokitStarter
.
startFloating
(
RecordingDokitView
::
class
.
java
)
DoKitConstant
.
WS_MODE
=
WSMode
.
RECORDING
SPUtils
.
getInstance
().
put
(
MC_CASE_ID_KEY
,
McConstant
.
MC_CASE_ID
)
SPUtils
.
getInstance
().
put
(
MC_CASE_RECODING_KEY
,
true
)
ToastUtils
.
showShort
(
"开始用例采集"
)
}
}
/**
* 执行扫描
...
...
Android/java/doraemonkit-rpc-mc/src/main/java/com/didichuxing/doraemonkit/rpc/RpcMcExtension.kt
0 → 100644
浏览文件 @
b3d5e1d5
package
com.didichuxing.doraemonkit
import
com.didichuxing.doraemonkit.kit.network.room_db.DokitDbManager
import
com.didichuxing.doraemonkit.util.EncodeUtils
import
didihttp.RequestBody
import
okio.Buffer
import
java.util.*
/**
* ================================================
* 作 者:jint(金台)
* 版 本:1.0
* 创建日期:2021/2/8-10:42
* 描 述:
* 修订历史:
* ================================================
*/
/**
* a=aa&b=bb&c=cc
* query键值对字符串转成Map
*/
fun
String
.
toMap
():
MutableMap
<
String
,
String
>
{
val
map
=
mutableMapOf
<
String
,
String
>()
if
(
this
.
isBlank
())
{
return
map
}
val
params
=
this
.
split
(
"&"
)
params
.
forEach
{
kv
->
val
kvs
=
kv
.
split
(
"="
)
if
(
kvs
.
size
==
2
)
{
map
[
kvs
[
0
]]
=
kvs
[
1
]
}
}
return
map
}
/**
* queryBody转成Map
*/
fun
RequestBody
?.
toMap
():
MutableMap
<
String
,
String
>
{
val
map
=
mutableMapOf
<
String
,
String
>()
if
(
this
==
null
||
this
.
contentType
()
==
null
)
{
return
map
}
val
buffer
=
Buffer
()
this
.
writeTo
(
buffer
)
val
strBody
=
EncodeUtils
.
urlDecode
(
buffer
.
readUtf8
())
strBody
?.
let
{
val
contentType
=
this
.
contentType
().
toString
().
toLowerCase
(
Locale
.
ROOT
)
when
{
contentType
.
contains
(
DokitDbManager
.
MEDIA_TYPE_FORM
)
->
{
return
strBody
.
toMap
()
}
contentType
.
contains
(
DokitDbManager
.
MEDIA_TYPE_JSON
)
->
{
map
[
"json"
]
=
strBody
return
map
}
contentType
.
contains
(
DokitDbManager
.
MEDIA_TYPE_PLAIN
)
->
{
map
[
"plain"
]
=
strBody
return
map
}
else
->
{
map
[
"other"
]
=
strBody
return
map
}
}
}
return
map
}
/**
* 对map 针对key进行排序
*/
fun
MutableMap
<
String
,
String
>.
sortedByKey
():
Map
<
String
,
String
>
{
return
this
.
toList
().
sortedBy
{
(
key
,
_
)
->
key
}.
toMap
()
}
Android/java/doraemonkit-rpc-mc/src/main/java/com/didichuxing/doraemonkit/rpc/ability/RpcMcInterceptor.kt
浏览文件 @
b3d5e1d5
...
...
@@ -84,8 +84,6 @@ class RpcMcInterceptor : AbsDoKitRpcInterceptor() {
when
(
DoKitConstant
.
WS_MODE
)
{
WSMode
.
RECORDING
->
{
//数据采集
// val responseBody4Base64 = String(EncodeUtils.base64Encode(strResponseBody))
//todo: 实时发送网络请求
doKitGlobalScope
.
launch
{
val
httInfo
=
HttpUploadInfo
(
DoKitConstant
.
PRODUCT_ID
,
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/DoKitOrientationEventListener.kt
浏览文件 @
b3d5e1d5
...
...
@@ -46,7 +46,7 @@ class DoKitOrientationEventListener(context: Activity) : OrientationEventListene
if
(
lastOrientation
!=
innerOrientation
)
{
//针对dokitView的根布局进行旋转操作
//LogHelper.i(TAG, "innerOrientation===>$innerOrientation")
val
dokitView
=
DokitViewManager
.
getInstance
()
val
dokitView
=
DokitViewManager
.
instance
.
getDokitView
(
mActivity
,
MainIconDokitView
::
class
.
java
.
simpleName
)
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/DoKitReal.kt
浏览文件 @
b3d5e1d5
...
...
@@ -71,12 +71,8 @@ object DoKitReal {
}
//跨模块通信
val
doKitAbilities
=
ServiceLoader
.
load
(
DokitAbility
::
class
.
java
,
javaClass
.
classLoader
).
toList
()
doKitAbilities
.
forEach
{
it
.
init
()
DoKitConstant
.
DOKIT_MODULE_ABILITIES
[
it
.
moduleName
()]
=
it
.
getModuleProcessor
()
}
DoKitConstant
.
loadDoKitModuleAbilities
()
//解锁系统隐藏api限制权限以及hook Instrumentation
HandlerHooker
.
doHook
(
app
)
...
...
@@ -151,7 +147,7 @@ object DoKitReal {
//addSystemKitForTest(app)
//初始化悬浮窗管理类
DokitViewManager
.
getInstance
()
.
init
(
app
)
DokitViewManager
.
instance
.
init
(
app
)
//上传app基本信息便于统计
if
(
DoKitConstant
.
ENABLE_UPLOAD
)
{
try
{
...
...
@@ -426,7 +422,7 @@ object DoKitReal {
if
(!
DoKitConstant
.
AWAYS_SHOW_MAIN_ICON
)
{
return
}
DokitViewManager
.
getInstance
()
.
attachMainIcon
()
DokitViewManager
.
instance
.
attachMainIcon
()
DoKitConstant
.
MAIN_ICON_HAS_SHOW
=
true
}
...
...
@@ -441,17 +437,17 @@ object DoKitReal {
* 直接显示工具面板页面
*/
fun
showToolPanel
()
{
DokitViewManager
.
getInstance
()
.
attachToolPanel
()
DokitViewManager
.
instance
.
attachToolPanel
()
}
fun
hideToolPanel
()
{
DokitViewManager
.
getInstance
()
.
detachToolPanel
()
DokitViewManager
.
instance
.
detachToolPanel
()
}
fun
hide
()
{
DoKitConstant
.
MAIN_ICON_HAS_SHOW
=
false
DoKitConstant
.
AWAYS_SHOW_MAIN_ICON
=
false
DokitViewManager
.
getInstance
()
.
detachMainIcon
()
DokitViewManager
.
instance
.
detachMainIcon
()
}
/**
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/constant/DoKitConstant.kt
浏览文件 @
b3d5e1d5
package
com.didichuxing.doraemonkit.constant
import
com.didichuxing.doraemonkit.util.NetworkUtils
import
com.didichuxing.doraemonkit.util.PathUtils
import
com.didichuxing.doraemonkit.BuildConfig
import
com.didichuxing.doraemonkit.DoKitCallBack
import
com.didichuxing.doraemonkit.config.GlobalConfig
...
...
@@ -12,7 +10,11 @@ import com.didichuxing.doraemonkit.kit.network.room_db.DokitDbManager
import
com.didichuxing.doraemonkit.kit.toolpanel.KitWrapItem
import
com.didichuxing.doraemonkit.model.ActivityLifecycleInfo
import
com.didichuxing.doraemonkit.util.LogHelper
import
com.didichuxing.doraemonkit.util.NetworkUtils
import
com.didichuxing.doraemonkit.util.PathUtils
import
java.io.File
import
java.util.*
import
kotlin.collections.LinkedHashMap
/**
* ================================================
...
...
@@ -24,6 +26,8 @@ import java.io.File
* ================================================
*/
object
DoKitConstant
{
const
val
MC_CASE_ID_KEY
=
"MC_CASE_ID"
const
val
MC_CASE_RECODING_KEY
=
"MC_CASE_RECODING"
const
val
TAG
=
"DoKitConstant"
const
val
GROUP_ID_PLATFORM
=
"dk_category_platform"
const
val
GROUP_ID_COMM
=
"dk_category_comms"
...
...
@@ -36,7 +40,8 @@ object DoKitConstant {
/**
* DoKit 模块能力
*/
val
DOKIT_MODULE_ABILITIES
=
mutableMapOf
<
DoKitModule
,
DokitAbility
.
DokitModuleProcessor
>()
private
val
DOKIT_MODULE_ABILITIES
=
mutableMapOf
<
DoKitModule
,
DokitAbility
.
DokitModuleProcessor
>()
/**
...
...
@@ -49,6 +54,21 @@ object DoKitConstant {
return
DOKIT_MODULE_ABILITIES
[
module
]
}
/**
* 加载跨模块通信能力
*/
fun
loadDoKitModuleAbilities
()
{
val
doKitAbilities
=
ServiceLoader
.
load
(
DokitAbility
::
class
.
java
,
javaClass
.
classLoader
).
toList
()
doKitAbilities
.
forEach
{
it
.
init
()
DOKIT_MODULE_ABILITIES
[
it
.
moduleName
()]
=
it
.
getModuleProcessor
()
}
//添加录制中的悬浮窗
LogHelper
.
i
(
TAG
,
"====loadDoKitModuleAbilities==="
)
}
val
SYSTEM_KITS_BAK_PATH
:
String
by
lazy
{
"${PathUtils.getInternalAppFilesPath()}${File.separator}system_kit_bak_${BuildConfig.DOKIT_VERSION}.json"
...
...
@@ -160,6 +180,11 @@ object DoKitConstant {
//@JvmField
var
WS_MODE
:
WSMode
=
WSMode
.
UNKNOW
/**
* 是否处于录制状态
*/
var
IS_MC_RECODING
=
false
/**
* Wifi IP 地址
*/
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/AbsDokitView.kt
浏览文件 @
b3d5e1d5
...
...
@@ -53,7 +53,7 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
var
mTouchProxy
=
TouchProxy
(
this
)
@JvmField
protected
var
mWindowManager
=
DokitViewManager
.
getInstance
()
.
windowManager
protected
var
mWindowManager
=
DokitViewManager
.
instance
.
windowManager
/**
* 创建FrameLayout#LayoutParams 内置悬浮窗调用
...
...
@@ -98,7 +98,16 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
/**
* 上一次DoKitview的位置信息
*/
private
lateinit
var
mLastDokitViewPosInfo
:
LastDokitViewPosInfo
private
val
mLastDokitViewPosInfo
:
LastDokitViewPosInfo
by
lazy
{
if
(
DokitViewManager
.
instance
.
getLastDokitViewPosInfo
(
tag
)
==
null
)
{
val
posInfo
=
LastDokitViewPosInfo
()
DokitViewManager
.
instance
.
saveLastDokitViewPosInfo
(
tag
,
posInfo
)
posInfo
}
else
{
DokitViewManager
.
instance
.
getLastDokitViewPosInfo
(
tag
)
!!
}
}
/**
* 根布局的实际宽
...
...
@@ -138,7 +147,7 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
//调用onCreate方法
onCreate
(
context
)
if
(!
isNormalMode
)
{
DokitViewManager
.
getInstance
()
.
addDokitViewAttachedListener
(
this
)
DokitViewManager
.
instance
.
addDokitViewAttachedListener
(
this
)
}
mDoKitView
=
if
(
isNormalMode
)
{
DokitFrameLayout
(
context
,
DokitFrameLayout
.
DoKitFrameLayoutFlag_CHILD
)
...
...
@@ -270,7 +279,7 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
params
.
width
=
mDokitViewLayoutParams
.
width
params
.
height
=
mDokitViewLayoutParams
.
height
params
.
gravity
=
mDokitViewLayoutParams
.
gravity
val
doKitViewInfo
=
DokitViewManager
.
getInstance
().
getDok
itViewPos
(
tag
)
val
doKitViewInfo
=
DokitViewManager
.
instance
.
getDoK
itViewPos
(
tag
)
if
(
doKitViewInfo
!=
null
)
{
//竖向
if
(
doKitViewInfo
.
orientation
==
Configuration
.
ORIENTATION_PORTRAIT
)
{
...
...
@@ -291,7 +300,7 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
* 用于普通模式下的横竖屏切换
*/
private
fun
portraitOrLandscape
(
params
:
FrameLayout
.
LayoutParams
)
{
val
doKitViewInfo
=
DokitViewManager
.
getInstance
().
getDok
itViewPos
(
tag
)
val
doKitViewInfo
=
DokitViewManager
.
instance
.
getDoK
itViewPos
(
tag
)
if
(
doKitViewInfo
!=
null
)
{
//横竖屏切换兼容
if
(
ScreenUtils
.
isPortrait
())
{
...
...
@@ -356,7 +365,7 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
}
}
DokitViewManager
.
getInstance
()
.
saveDokitViewPos
(
tag
,
params
.
leftMargin
,
params
.
topMargin
)
DokitViewManager
.
instance
.
saveDokitViewPos
(
tag
,
params
.
leftMargin
,
params
.
topMargin
)
}
@Deprecated
(
""
)
...
...
@@ -368,8 +377,8 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
return
}
normalLayoutParams
?.
apply
{
val
(
_
,
portraitPoint
,
landscapePoint
)
=
DokitViewManager
.
getInstance
()
.
getDo
k
itViewPos
(
tag
)
?:
return
val
(
_
,
portraitPoint
,
landscapePoint
)
=
DokitViewManager
.
instance
.
getDo
K
itViewPos
(
tag
)
?:
return
if
(
currentOrientation
==
Configuration
.
ORIENTATION_PORTRAIT
)
{
if
(
landscapePoint
==
null
)
{
this
.
leftMargin
=
0
...
...
@@ -387,7 +396,7 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
this
.
topMargin
=
portraitPoint
.
x
}
}
DokitViewManager
.
getInstance
()
DokitViewManager
.
instance
.
saveDokitViewPos
(
tag
,
this
.
leftMargin
,
this
.
topMargin
)
mDoKitView
?.
layoutParams
=
this
}
...
...
@@ -407,7 +416,7 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
params
.
gravity
=
mDokitViewLayoutParams
.
gravity
params
.
width
=
mDokitViewLayoutParams
.
width
params
.
height
=
mDokitViewLayoutParams
.
height
val
doKitViewInfo
=
DokitViewManager
.
getInstance
().
getDok
itViewPos
(
val
doKitViewInfo
=
DokitViewManager
.
instance
.
getDoK
itViewPos
(
tag
)
if
(
doKitViewInfo
!=
null
)
{
...
...
@@ -422,14 +431,14 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
params
.
x
=
mDokitViewLayoutParams
.
x
params
.
y
=
mDokitViewLayoutParams
.
y
}
DokitViewManager
.
getInstance
()
.
saveDokitViewPos
(
tag
,
params
.
x
,
params
.
y
)
DokitViewManager
.
instance
.
saveDokitViewPos
(
tag
,
params
.
x
,
params
.
y
)
}
override
fun
onDestroy
()
{
if
(!
isNormalMode
)
{
DokitViewManager
.
getInstance
()
.
removeDokitViewAttachedListener
(
this
)
DokitViewManager
.
instance
.
removeDokitViewAttachedListener
(
this
)
}
DokitViewManager
.
getInstance
()
.
removeLastDokitViewPosInfo
(
tag
)
DokitViewManager
.
instance
.
removeLastDokitViewPosInfo
(
tag
)
mAttachActivity
=
null
doKitViewScope
.
cancel
()
}
...
...
@@ -530,11 +539,11 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
//保存在内存中
if
(
isNormalMode
)
{
normalLayoutParams
?.
let
{
DokitViewManager
.
getInstance
()
.
saveDokitViewPos
(
tag
,
it
.
leftMargin
,
it
.
topMargin
)
DokitViewManager
.
instance
.
saveDokitViewPos
(
tag
,
it
.
leftMargin
,
it
.
topMargin
)
}
}
else
{
systemLayoutParams
?.
let
{
DokitViewManager
.
getInstance
()
.
saveDokitViewPos
(
tag
,
it
.
x
,
it
.
y
)
DokitViewManager
.
instance
.
saveDokitViewPos
(
tag
,
it
.
x
,
it
.
y
)
}
}
}
...
...
@@ -591,7 +600,7 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
*
* @param dokitView
*/
override
fun
onDokitViewAdd
(
dokitView
:
AbsDokitView
)
{}
override
fun
onDokitViewAdd
(
dokitView
:
AbsDokitView
?
)
{}
override
fun
onResume
()
{}
override
fun
onPause
()
{}
...
...
@@ -635,7 +644,7 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
* 将当前dokitView于activity解绑
*/
fun
detach
()
{
DokitViewManager
.
getInstance
()
.
detach
(
this
)
DokitViewManager
.
instance
.
detach
(
this
)
}
/**
...
...
@@ -666,7 +675,7 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
this
.
leftMargin
=
FloatIconConfig
.
getLastPosX
()
this
.
topMargin
=
FloatIconConfig
.
getLastPosY
()
}
else
{
val
doKitViewInfo
=
DokitViewManager
.
getInstance
().
getDok
itViewPos
(
tag
)
val
doKitViewInfo
=
DokitViewManager
.
instance
.
getDoK
itViewPos
(
tag
)
if
(
doKitViewInfo
!=
null
)
{
if
(
doKitViewInfo
.
orientation
==
Configuration
.
ORIENTATION_PORTRAIT
)
{
this
.
leftMargin
=
doKitViewInfo
.
portraitPoint
.
x
...
...
@@ -882,11 +891,6 @@ abstract class AbsDokitView : DokitView, TouchProxy.OnTouchEventListener,
* 构造函数
*/
init
{
if
(
DokitViewManager
.
getInstance
().
getLastDokitViewPosInfo
(
tag
)
==
null
)
{
mLastDokitViewPosInfo
=
LastDokitViewPosInfo
()
DokitViewManager
.
getInstance
().
saveLastDokitViewPosInfo
(
tag
,
mLastDokitViewPosInfo
)
}
else
{
mLastDokitViewPosInfo
=
DokitViewManager
.
getInstance
().
getLastDokitViewPosInfo
(
tag
)
}
}
}
\ No newline at end of file
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/AbsDokitViewManager.kt
浏览文件 @
b3d5e1d5
package
com.didichuxing.doraemonkit.kit.core
;
package
com.didichuxing.doraemonkit.kit.core
import
android.app.Activity;
import
com.didichuxing.doraemonkit.constant.DoKitConstant;
import
com.didichuxing.doraemonkit.constant.DoKitModule;
import
com.didichuxing.doraemonkit.constant.WSMode;
import
com.didichuxing.doraemonkit.kit.health.CountDownDokitView;
import
java.util.HashMap;
import
java.util.Map;
import
android.app.Activity
import
com.didichuxing.doraemonkit.constant.DoKitConstant
import
com.didichuxing.doraemonkit.constant.DoKitConstant.WS_MODE
import
com.didichuxing.doraemonkit.constant.WSMode
import
com.didichuxing.doraemonkit.kit.health.CountDownDokitView
/**
* ================================================
...
...
@@ -19,23 +15,22 @@ import java.util.Map;
* 修订历史:
* ================================================
*/
public
abstract
class
AbsDokitViewManager
implements
DokitViewManagerInterface
{
protected
String
TAG
=
this
.
getClass
().
getSimpleName
();
abstract
class
AbsDokitViewManager
:
DokitViewManagerInterface
{
protected
var
TAG
=
this
.
javaClass
.
simpleName
/**
* 添加倒计时DokitView
*/
void
attachCountDownDokitView
(
Activity
a
ctivity
)
{
fun
attachCountDownDokitView
(
activity
:
A
ctivity
)
{
if
(!
DoKitConstant
.
APP_HEALTH_RUNNING
)
{
return
;
return
}
if
(
activity
i
nstanceof
UniversalActivity
)
{
return
;
if
(
activity
i
s
UniversalActivity
)
{
return
}
DokitIntent
dokitIntent
=
new
DokitIntent
(
CountDownDokitView
.
class
);
dokitIntent
.
mode
=
DokitIntent
.
MODE_ONCE
;
attach
(
dokitIntent
)
;
val
dokitIntent
=
DokitIntent
(
CountDownDokitView
::
class
.
java
)
dokitIntent
.
mode
=
DokitIntent
.
MODE_ONCE
attach
(
dokitIntent
)
}
/**
...
...
@@ -43,25 +38,9 @@ public abstract class AbsDokitViewManager implements DokitViewManagerInterface {
*
* @param activity
*/
void
attachMcDokitView
(
Activity
a
ctivity
)
{
if
(
DoKitConstant
.
INSTANCE
.
getWS_MODE
()
==
WSMode
.
UNKNOW
)
{
return
;
fun
attachMcDokitView
(
activity
:
A
ctivity
)
{
if
(
WS_MODE
=
==
WSMode
.
UNKNOW
)
{
return
}
// DokitAbility.DokitModuleProcessor processor = DoKitConstant.INSTANCE.getModuleProcessor(DoKitModule.MODULE_MC);
// if (processor == null) {
// return;
// }
//
// if (DoKitConstant.INSTANCE.getWS_MODE() == WSMode.HOST) {
// Map<String, String> action = new HashMap();
// action.put("action", "launch_host_view");
// processor.proceed(action);
// } else if (DoKitConstant.INSTANCE.getWS_MODE() == WSMode.CLIENT) {
// Map<String, String> action = new HashMap();
// action.put("action", "launch_client_view");
// processor.proceed(action);
// }
}
}
}
\ No newline at end of file
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/BaseFragment.kt
浏览文件 @
b3d5e1d5
...
...
@@ -63,7 +63,7 @@ abstract class BaseFragment : Fragment() {
}
catch
(
e
:
Exception
)
{
e
.
printStackTrace
()
}
DokitViewManager
.
getInstance
()
.
detach
(
MainIconDokitView
::
class
.
java
)
DokitViewManager
.
instance
.
detach
(
MainIconDokitView
::
class
.
java
)
}
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/DokitAbility.kt
浏览文件 @
b3d5e1d5
...
...
@@ -13,6 +13,7 @@ import com.didichuxing.doraemonkit.constant.DoKitModule
*/
interface
DokitAbility
{
fun
init
()
/**
...
...
@@ -29,6 +30,8 @@ interface DokitAbility {
interface
DokitModuleProcessor
{
val
TAG
:
String
get
()
=
this
.
javaClass
.
simpleName
fun
values
():
Map
<
String
,
Any
>
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/DokitViewManager.kt
浏览文件 @
b3d5e1d5
此差异已折叠。
点击以展开。
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/DokitViewManagerInterface.kt
浏览文件 @
b3d5e1d5
package
com.didichuxing.doraemonkit.kit.core
;
package
com.didichuxing.doraemonkit.kit.core
import
android.app.Activity;
import
java.util.Map;
import
android.app.Activity
/**
* ================================================
...
...
@@ -13,50 +11,48 @@ import java.util.Map;
* 修订历史:
* ================================================
*/
public
interface
DokitViewManagerInterface
{
interface
DokitViewManagerInterface
{
/**
* 在当前Activity中添加指定悬浮窗
*
* @param dokitIntent
*/
void
attach
(
DokitIntent
dokitIntent
);
fun
attach
(
dokitIntent
:
DokitIntent
)
/**
* 移除每个activity指定的dokitView
*
* @param dokitView
*/
void
detach
(
AbsDokitView
dokitView
);
fun
detach
(
dokitView
:
AbsDokitView
)
/**
* 移除每个activity指定的dokitView
* @param activity
* @param dokitView
*/
void
detach
(
Activity
activity
,
AbsDokitView
dokitView
);
fun
detach
(
activity
:
Activity
,
dokitView
:
AbsDokitView
)
/**
* 移除每个activity指定的dokitView tag
*
* @param tag 一般为dokitView的className
*/
void
detach
(
String
tag
);
fun
detach
(
tag
:
String
)
/**
* 移除每个activity指定的dokitView
* @param activity
* @param tag
*/
void
detach
(
Activity
activity
,
String
tag
);
fun
detach
(
activity
:
Activity
,
tag
:
String
)
/**
* 移除指定的dokitView
*
* @param dokitViewClass
*/
void
detach
(
Class
<
?
extends
AbsDokitView
>
dokitViewClass
);
fun
detach
(
dokitViewClass
:
Class
<
out
AbsDokitView
>)
/**
* 移除指定activity的dokitview
...
...
@@ -64,13 +60,12 @@ public interface DokitViewManagerInterface {
* @param activity
* @param dokitViewClass
*/
void
detach
(
Activity
activity
,
Class
<
?
extends
AbsDokitView
>
dokitViewClass
);
fun
detach
(
activity
:
Activity
,
dokitViewClass
:
Class
<
out
AbsDokitView
>)
/**
* 移除所有activity的所有dokitView
*/
void
detachAll
();
fun
detachAll
()
/**
* 获取页面上指定的dokitView
...
...
@@ -79,8 +74,7 @@ public interface DokitViewManagerInterface {
* @param tag
* @return
*/
AbsDokitView
getDokitView
(
Activity
activity
,
String
tag
);
fun
getDokitView
(
activity
:
Activity
,
tag
:
String
):
AbsDokitView
?
/**
* 获取页面上所有的dokitView
...
...
@@ -88,26 +82,24 @@ public interface DokitViewManagerInterface {
* @param activity
* @return
*/
Map
<
String
,
AbsDokitView
>
getDokitViews
(
Activity
activity
);
fun
getDokitViews
(
activity
:
Activity
):
Map
<
String
,
AbsDokitView
>?
/**
* 当app进入后台时调用
*/
void
notifyBackground
();
fun
notifyBackground
()
/**
* 当app进入前台时调用
*/
void
notifyForeground
();
fun
notifyForeground
()
/**
* Activity销毁时调用
*
* @param activity
*/
void
onActivityDestroy
(
Activity
activity
);
fun
onActivityDestroy
(
activity
:
Activity
)
/**
* 只有普通的浮标才需要调用
...
...
@@ -115,33 +107,33 @@ public interface DokitViewManagerInterface {
*
* @param activity
*/
void
resumeAndAttachDokitViews
(
Activity
activity
);
fun
resumeAndAttachDokitViews
(
activity
:
Activity
)
/**
* main activity 创建时回调
*
* @param activity
*/
void
onMainActivityCreate
(
Activity
activity
);
fun
onMainActivityCreate
(
activity
:
Activity
)
/**
* 除main activity 以外 其他activty 创建时回调
*
* @param activity
*/
void
onActivityCreate
(
Activity
activity
);
fun
onActivityCreate
(
activity
:
Activity
)
/**
* 页面回退的时候调用
*
* @param activity
*/
void
onActivityResume
(
Activity
activity
);
fun
onActivityResume
(
activity
:
Activity
)
/**
* 页面onPause时调用
*
* @param activity
*/
void
onActivityPause
(
Activity
activity
);
}
fun
onActivityPause
(
activity
:
Activity
)
}
\ No newline at end of file
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/NormalDokitViewManager.kt
浏览文件 @
b3d5e1d5
此差异已折叠。
点击以展开。
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/SimpleDokitStarter.kt
浏览文件 @
b3d5e1d5
...
...
@@ -26,14 +26,14 @@ object SimpleDokitStarter {
val
doKitIntent
=
DokitIntent
(
targetClass
)
doKitIntent
.
mode
=
mode
doKitIntent
.
bundle
=
bundle
DokitViewManager
.
getInstance
()
.
attach
(
doKitIntent
)
DokitViewManager
.
instance
.
attach
(
doKitIntent
)
}
@JvmStatic
fun
removeFloating
(
targetClass
:
Class
<
out
AbsDokitView
?
>
)
{
DokitViewManager
.
getInstance
()
.
detach
(
targetClass
)
DokitViewManager
.
instance
.
detach
(
targetClass
)
}
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/core/SystemDokitViewManager.kt
浏览文件 @
b3d5e1d5
package
com.didichuxing.doraemonkit.kit.core;
import
android.app.Activity;
import
android.content.Context;
import
android.text.TextUtils;
import
android.view.WindowManager;
import
com.didichuxing.doraemonkit.DoKit;
import
com.didichuxing.doraemonkit.constant.DoKitConstant;
import
com.didichuxing.doraemonkit.constant.DoKitModule;
import
com.didichuxing.doraemonkit.constant.WSMode;
import
com.didichuxing.doraemonkit.kit.health.CountDownDokitView;
import
com.didichuxing.doraemonkit.kit.main.MainIconDokitView;
import
com.didichuxing.doraemonkit.model.ActivityLifecycleInfo;
import
com.didichuxing.doraemonkit.util.DoKitSystemUtil;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.Iterator;
import
java.util.List;
import
java.util.Map;
package
com.didichuxing.doraemonkit.kit.core
import
android.app.Activity
import
android.content.Context
import
android.text.TextUtils
import
com.didichuxing.doraemonkit.DoKit
import
com.didichuxing.doraemonkit.DoKit.Companion.isMainIconShow
import
com.didichuxing.doraemonkit.DoKit.Companion.show
import
com.didichuxing.doraemonkit.constant.DoKitConstant
import
com.didichuxing.doraemonkit.constant.DoKitConstant.getModuleProcessor
import
com.didichuxing.doraemonkit.constant.DoKitModule
import
com.didichuxing.doraemonkit.kit.health.CountDownDokitView
import
com.didichuxing.doraemonkit.kit.main.MainIconDokitView
import
com.didichuxing.doraemonkit.model.ActivityLifecycleInfo
import
com.didichuxing.doraemonkit.util.DoKitSystemUtil
import
com.didichuxing.doraemonkit.util.SPUtils
import
java.util.*
/**
* Created by wanglikun on 2018/10/23.
* 系统悬浮窗管理类
*/
class
SystemDokitViewManager
extends
AbsDokitViewManager
{
internal
class
SystemDokitViewManager
:
AbsDokitViewManager
()
{
/**
* 参考:
* https://blog.csdn.net/awenyini/article/details/78265284
* https://yuqirong.me/2017/09/28/Window%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90(%E4%B8%80)%EF%BC%9A%E4%B8%8EDecorView%E7%9A%84%E9%82%A3%E4%BA%9B%E4%BA%8B/
*/
private
WindowManager
mWindowManager
=
DokitViewManager
.
getInstance
().
getWindowManager
();
private
Context
mContext
;
private
List
<
AbsDokitView
>
mDokitViews
=
new
ArrayList
<>();
private
List
<
DokitViewManager
.
DokitViewAttachedListener
>
mListeners
=
new
ArrayList
<>();
private
val
mWindowManager
=
DokitViewManager
.
instance
.
windowManager
private
val
mContext
:
Context
by
lazy
{
DoKit
.
APPLICATION
}
private
val
mDokitViews
:
MutableList
<
AbsDokitView
>
by
lazy
{
mutableListOf
()
}
private
val
mListeners
:
MutableList
<
DokitViewManager
.
DokitViewAttachedListener
>
by
lazy
{
mutableListOf
()
}
/**
* 获取页面上所有的dokitViews
*
* @return map
*/
@Override
public
Map
<
String
,
AbsDokitView
>
getDokitViews
(
Activity
activity
)
{
if
(
mDokitViews
==
null
)
{
return
new
HashMap
<>();
}
Map
<
String
,
AbsDokitView
>
dokitViewMaps
=
new
HashMap
<>();
for
(
AbsDokitView
dokitView
:
mDokitViews
)
{
dokitViewMaps
.
put
(
dokitView
.
getTag
(),
dokitView
);
override
fun
getDokitViews
(
activity
:
Activity
):
Map
<
String
,
AbsDokitView
>
{
val
dokitViewMaps
:
MutableMap
<
String
,
AbsDokitView
>
=
mutableMapOf
()
for
(
dokitView
in
mDokitViews
)
{
dokitViewMaps
[
dokitView
.
tag
]
=
dokitView
}
return
dokitViewMaps
;
return
dokitViewMaps
}
/**
* 当app进入后台时调用
*/
@Override
public
void
notifyBackground
()
{
if
(
mDokitViews
==
null
)
{
return
;
}
for
(
AbsDokitView
dokitView
:
mDokitViews
)
{
dokitView
.
onEnterBackground
();
override
fun
notifyBackground
()
{
for
(
dokitView
in
mDokitViews
)
{
dokitView
.
onEnterBackground
()
}
}
/**
* 当app进入前台时调用
*/
@Override
public
void
notifyForeground
()
{
if
(
mDokitViews
==
null
)
{
return
;
}
for
(
AbsDokitView
page
:
mDokitViews
)
{
page
.
onEnterForeground
();
}
}
override
fun
notifyForeground
()
{
public
SystemDokitViewManager
(
Context
context
)
{
this
.
mContext
=
context
.
getApplicationContext
();
//获取WindowService
for
(
page
in
mDokitViews
)
{
page
.
onEnterForeground
()
}
}
/**
* @param activity
*/
@Override
public
void
resumeAndAttachDokitViews
(
Activity
a
ctivity
)
{
if
(
activity
instanceof
UniversalActivity
)
{
AbsDokitView
countDownDokitView
=
getDokitView
(
activity
,
CountDownDokitView
.
class
.
getSimpleName
());
override
fun
resumeAndAttachDokitViews
(
activity
:
Activity
)
{
if
(
activity
is
UniversalA
ctivity
)
{
val
countDownDokitView
=
getDokitView
(
activity
,
CountDownDokitView
::
class
.
java
.
simpleName
)
if
(
countDownDokitView
!=
null
)
{
DokitViewManager
.
getInstance
().
detach
(
CountDownDokitView
.
class
.
getSimpleName
());
DokitViewManager
.
instance
.
detach
(
CountDownDokitView
::
class
.
java
.
simpleName
)
}
return
;
return
}
//app启动
if
(
DoKitSystemUtil
.
isOnlyFirstLaunchActivity
(
activity
))
{
onMainActivityCreate
(
activity
)
;
onMainActivityCreate
(
activity
)
}
ActivityLifecycleInfo
activityLifecycleInfo
=
DoKitConstant
.
ACTIVITY_LIFECYCLE_INFOS
.
get
(
activity
.
getClass
().
getCanonicalName
());
val
activityLifecycleInfo
=
DoKitConstant
.
ACTIVITY_LIFECYCLE_INFOS
[
activity
.
javaClass
.
canonicalName
]
//新建Activity
if
(
activityLifecycleInfo
!=
null
&&
activityLifecycleInfo
.
getActivityLifeCycleCount
()
==
ActivityLifecycleInfo
.
ACTIVITY_LIFECYCLE_CREATE2RESUME
)
{
onActivityCreate
(
activity
)
;
if
(
activityLifecycleInfo
!=
null
&&
activityLifecycleInfo
.
activityLifeCycleCount
==
ActivityLifecycleInfo
.
ACTIVITY_LIFECYCLE_CREATE2RESUME
)
{
onActivityCreate
(
activity
)
}
//activity resume
if
(
activityLifecycleInfo
!=
null
&&
activityLifecycleInfo
.
getActivityLifeCycleCount
()
>
ActivityLifecycleInfo
.
ACTIVITY_LIFECYCLE_CREATE2RESUME
)
{
onActivityResume
(
activity
)
;
if
(
activityLifecycleInfo
!=
null
&&
activityLifecycleInfo
.
activityLifeCycleCount
>
ActivityLifecycleInfo
.
ACTIVITY_LIFECYCLE_CREATE2RESUME
)
{
onActivityResume
(
activity
)
}
//生命周期回调
Map
<
String
,
AbsDokitView
>
dokitViewMap
=
getDokitViews
(
activity
);
for
(
AbsDokitView
absDokitView
:
dokitViewMap
.
values
()
)
{
absDokitView
.
onResume
();
val
dokitViewMap
=
getDokitViews
(
activity
)
for
(
absDokitView
in
dokitViewMap
.
values
)
{
absDokitView
!!
.
onResume
()
}
}
@Override
public
void
onMainActivityCreate
(
Activity
activity
)
{
override
fun
onMainActivityCreate
(
activity
:
Activity
)
{
//倒计时DokitView
attachCountDownDokitView
(
activity
);
attachMcDokitView
(
activity
);
attachCountDownDokitView
(
activity
)
attachMcDokitView
(
activity
)
if
(!
DoKitConstant
.
AWAYS_SHOW_MAIN_ICON
)
{
return
;
return
}
//添加main icon
DokitIntent
intent
=
new
DokitIntent
(
MainIconDokitView
.
class
);
intent
.
mode
=
DokitIntent
.
MODE_SINGLE_INSTANCE
;
DokitViewManager
.
getInstance
().
attach
(
intent
);
DoKitConstant
.
MAIN_ICON_HAS_SHOW
=
true
;
val
intent
=
DokitIntent
(
MainIconDokitView
::
class
.
java
)
intent
.
mode
=
DokitIntent
.
MODE_SINGLE_INSTANCE
DokitViewManager
.
instance
.
attach
(
intent
)
DoKitConstant
.
MAIN_ICON_HAS_SHOW
=
true
//添加录制中的悬浮窗
if
(
SPUtils
.
getInstance
().
getBoolean
(
DoKitConstant
.
MC_CASE_RECODING_KEY
,
false
))
{
val
action
:
MutableMap
<
String
,
String
>
=
HashMap
()
action
[
"action"
]
=
"launch_recoding_view"
getModuleProcessor
(
DoKitModule
.
MODULE_MC
)
!!
.
proceed
(
action
)
}
}
@Override
public
void
onActivityCreate
(
Activity
activity
)
{
override
fun
onActivityCreate
(
activity
:
Activity
)
{
//判断是否有MainIcon
if
(
DoKitConstant
.
AWAYS_SHOW_MAIN_ICON
&&
!
DoKit
.
isMainIconShow
()
)
{
DoKit
.
show
();
if
(
DoKitConstant
.
AWAYS_SHOW_MAIN_ICON
&&
!
isMainIconShow
)
{
show
()
}
//如果倒计时浮标没显示则重新添加
AbsDokitView
countDownDokitView
=
getDokitView
(
activity
,
CountDownDokitView
.
class
.
getSimpleName
());
val
countDownDokitView
=
getDokitView
(
activity
,
CountDownDokitView
::
class
.
java
.
simpleName
)
if
(
countDownDokitView
==
null
)
{
if
(
activity
i
nstanceof
UniversalActivity
)
{
return
;
if
(
activity
i
s
UniversalActivity
)
{
return
}
attachCountDownDokitView
(
activity
)
;
attachCountDownDokitView
(
activity
)
}
else
{
if
(
activity
instanceof
UniversalActivity
)
{
DokitViewManager
.
getInstance
().
detach
(
CountDownDokitView
.
class
.
getSimpleName
());
if
(
activity
is
UniversalActivity
)
{
DokitViewManager
.
instance
.
detach
(
CountDownDokitView
::
class
.
java
.
simpleName
)
}
else
{
//重置倒计时
(
(
CountDownDokitView
)
countDownDokitView
).
resetTime
();
(
countDownDokitView
as
CountDownDokitView
).
resetTime
()
}
}
attachMcDokitView
(
activity
);
attachMcDokitView
(
activity
)
}
@Override
public
void
onActivityResume
(
Activity
activity
)
{
override
fun
onActivityResume
(
activity
:
Activity
)
{
//移除倒计时浮标
AbsDokitView
countDownDokitView
=
getDokitView
(
activity
,
CountDownDokitView
.
class
.
getSimpleName
());
val
countDownDokitView
=
getDokitView
(
activity
,
CountDownDokitView
::
class
.
java
.
simpleName
)
if
(
countDownDokitView
==
null
)
{
attachCountDownDokitView
(
activity
)
;
attachCountDownDokitView
(
activity
)
}
else
{
//重置倒计时
(
(
CountDownDokitView
)
countDownDokitView
).
resetTime
();
(
countDownDokitView
as
CountDownDokitView
).
resetTime
()
}
attachMcDokitView
(
activity
);
attachMcDokitView
(
activity
)
//判断是否存在主入口icon
Map
<
String
,
AbsDokitView
>
dokitViews
=
getDokitViews
(
activity
);
if
(
dokitViews
==
null
||
dokitViews
.
get
(
MainIconDokitView
.
class
.
getSimpleName
())
==
null
)
{
if
(
DoKitConstant
.
AWAYS_SHOW_MAIN_ICON
&&
!(
activity
instanceof
UniversalActivity
)
)
{
val
dokitViews
=
getDokitViews
(
activity
)
if
(
dokitViews
[
MainIconDokitView
::
class
.
java
.
simpleName
]
==
null
)
{
if
(
DoKitConstant
.
AWAYS_SHOW_MAIN_ICON
&&
activity
!
is
UniversalActivity
)
{
//添加main icon
DokitIntent
intent
=
new
DokitIntent
(
MainIconDokitView
.
class
);
intent
.
mode
=
DokitIntent
.
MODE_SINGLE_INSTANCE
;
DokitViewManager
.
getInstance
().
attach
(
intent
);
DoKitConstant
.
MAIN_ICON_HAS_SHOW
=
true
;
val
intent
=
DokitIntent
(
MainIconDokitView
::
class
.
java
)
intent
.
mode
=
DokitIntent
.
MODE_SINGLE_INSTANCE
DokitViewManager
.
instance
.
attach
(
intent
)
DoKitConstant
.
MAIN_ICON_HAS_SHOW
=
true
}
}
}
@Override
public
void
onActivityPause
(
Activity
activity
)
{
Map
<
String
,
AbsDokitView
>
dokitViews
=
getDokitViews
(
activity
);
for
(
AbsDokitView
absDokitView
:
dokitViews
.
values
())
{
absDokitView
.
onPause
();
override
fun
onActivityPause
(
activity
:
Activity
)
{
val
dokitViews
=
getDokitViews
(
activity
)
for
(
absDokitView
in
dokitViews
.
values
)
{
absDokitView
.
onPause
()
}
}
/**
* 添加悬浮窗
*
* @param pageIntent
*/
@Override
public
void
attach
(
DokitIntent
pageIntent
)
{
override
fun
attach
(
pageIntent
:
DokitIntent
)
{
try
{
if
(
mDokitViews
==
null
)
{
return
;
}
if
(
pageIntent
.
targetClass
==
null
)
{
return
;
return
}
if
(
pageIntent
.
mode
==
DokitIntent
.
MODE_SINGLE_INSTANCE
)
{
for
(
AbsDokitView
dokitView
:
mDokitViews
)
{
for
(
dokitView
in
mDokitViews
)
{
//如果当前page对象已经存在 则直接返回
if
(
pageIntent
.
targetClass
.
isInstance
(
dokitView
))
{
return
;
return
}
}
}
//通过newInstance方式创建floatPage
AbsDokitView
dokitView
=
pageIntent
.
targetClass
.
newInstance
();
dokitView
.
setBundle
(
pageIntent
.
bundle
);
val
dokitView
=
pageIntent
.
targetClass
.
newInstance
()
dokitView
.
bundle
=
pageIntent
.
bundle
//page.setTag(pageIntent.tag);
//添加进page列表
mDokitViews
.
add
(
dokitView
);
dokitView
.
performCreate
(
mContext
);
mDokitViews
.
add
(
dokitView
)
dokitView
.
performCreate
(
mContext
)
//在window上显示floatIcon
//WindowManagerImpl具体实现
mWindowManager
.
addView
(
dokitView
.
getDoKitView
(),
dokitView
.
getSystemLayoutParams
());
dokitView
.
onResume
();
mWindowManager
.
addView
(
dokitView
.
doKitView
,
dokitView
.
systemLayoutParams
)
dokitView
.
onResume
()
if
(!
DoKitConstant
.
IS_NORMAL_FLOAT_MODE
)
{
for
(
DokitViewManager
.
DokitViewAttachedListener
listener
:
mListeners
)
{
listener
.
onDokitViewAdd
(
dokitView
)
;
for
(
listener
in
mListeners
)
{
listener
.
onDokitViewAdd
(
dokitView
)
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
()
;
}
catch
(
e
:
Exception
)
{
e
.
printStackTrace
()
}
}
@Override
public
void
detach
(
String
tag
)
{
if
(
TextUtils
.
isEmpty
(
tag
)
||
mWindowManager
==
null
||
mDokitViews
==
null
)
{
return
;
override
fun
detach
(
tag
:
String
)
{
if
(
TextUtils
.
isEmpty
(
tag
))
{
return
}
for
(
Iterator
<
AbsDokitView
>
it
=
mDokitViews
.
iterator
();
it
.
hasNext
();
)
{
AbsDokitView
dokitView
=
it
.
next
();
if
(
tag
.
equals
(
dokitView
.
getTag
())
)
{
mWindowManager
.
removeView
(
dokitView
.
getDoKitView
());
dokitView
.
performDestroy
()
;
it
.
remove
()
;
return
;
val
it
=
mDokitViews
.
iterator
()
while
(
it
.
hasNext
()
)
{
val
dokitView
=
it
.
next
()
if
(
tag
==
dokitView
.
tag
)
{
mWindowManager
.
removeView
(
dokitView
.
doKitView
)
dokitView
.
performDestroy
()
it
.
remove
()
return
}
}
}
@Override
public
void
detach
(
Activity
activity
,
String
tag
)
{
override
fun
detach
(
activity
:
Activity
,
tag
:
String
)
{}
override
fun
detach
(
dokitView
:
AbsDokitView
)
{
detach
(
dokitView
!!
.
javaClass
.
simpleName
)
}
@Override
public
void
detach
(
AbsDokitView
dokitView
)
{
detach
(
dokitView
.
getClass
().
getSimpleName
());
override
fun
detach
(
activity
:
Activity
,
dokitView
:
AbsDokitView
)
{}
override
fun
detach
(
dokitViewClass
:
Class
<
out
AbsDokitView
>
)
{
detach
(
dokitView
Class
.
simpleName
)
}
@Override
public
void
detach
(
Activity
activity
,
AbsDokitView
dokitView
)
{
override
fun
detach
(
activity
:
Activity
,
dokitViewClass
:
Class
<
out
AbsDokitView
>)
{}
override
fun
detachAll
(
)
{
}
@Override
public
void
detach
(
Class
<
?
extends
AbsDokitView
>
dokitViewClass
)
{
detach
(
dokitViewClass
.
getSimpleName
());
}
@Override
public
void
detach
(
Activity
activity
,
Class
<
?
extends
AbsDokitView
>
dokitViewClass
)
{
}
@Override
public
void
detachAll
()
{
if
(
mDokitViews
==
null
)
{
return
;
}
for
(
Iterator
<
AbsDokitView
>
it
=
mDokitViews
.
iterator
();
it
.
hasNext
();
)
{
AbsDokitView
dokitView
=
it
.
next
();
mWindowManager
.
removeView
(
dokitView
.
getDoKitView
());
dokitView
.
performDestroy
();
it
.
remove
();
val
it
=
mDokitViews
.
iterator
()
while
(
it
.
hasNext
())
{
val
dokitView
=
it
.
next
()
mWindowManager
.
removeView
(
dokitView
.
doKitView
)
dokitView
.
performDestroy
()
it
.
remove
()
}
}
@Override
public
AbsDokitView
getDokitView
(
Activity
activity
,
String
tag
)
{
if
(
mDokitViews
==
null
)
{
return
null
;
}
override
fun
getDokitView
(
activity
:
Activity
,
tag
:
String
):
AbsDokitView
?
{
if
(
TextUtils
.
isEmpty
(
tag
))
{
return
null
;
return
null
}
for
(
AbsDokitView
dokitView
:
mDokitViews
)
{
if
(
tag
.
equals
(
dokitView
.
getTag
())
)
{
return
dokitView
;
for
(
dokitView
in
mDokitViews
)
{
if
(
tag
==
dokitView
.
tag
)
{
return
dokitView
}
}
return
null
;
return
null
}
/**
* Activity销毁时调用 不需要实现 为了统一api
*/
@Override
public
void
onActivityDestroy
(
Activity
activity
)
{
}
override
fun
onActivityDestroy
(
activity
:
Activity
)
{}
/**
* 在每一个float page创建时 添加监听器
*
* @param listener
*/
void
addListener
(
DokitViewManager
.
DokitViewAttachedListener
l
istener
)
{
mListeners
.
add
(
listener
)
;
fun
addListener
(
listener
:
DokitViewManager
.
DokitViewAttachedL
istener
)
{
mListeners
.
add
(
listener
)
}
void
removeListener
(
DokitViewManager
.
DokitViewAttachedListener
l
istener
)
{
mListeners
.
remove
(
listener
)
;
fun
removeListener
(
listener
:
DokitViewManager
.
DokitViewAttachedL
istener
)
{
mListeners
.
remove
(
listener
)
}
}
}
\ No newline at end of file
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/h5_help/DokitJSI.kt
浏览文件 @
b3d5e1d5
...
...
@@ -224,7 +224,7 @@ class DokitJSI {
* 更新本地localStorage的adapter
*/
private
fun
updateStorageAdapter
(
type
:
Int
)
{
val
h5DokitView
=
DokitViewManager
.
getInstance
()
.
getDokitView
(
val
h5DokitView
=
DokitViewManager
.
instance
.
getDokitView
(
ActivityUtils
.
getTopActivity
(),
H5DokitView
::
class
.
java
.
simpleName
)
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/h5_help/DokitWebViewClient.kt
浏览文件 @
b3d5e1d5
...
...
@@ -46,7 +46,7 @@ class DokitWebViewClient(webViewClient: WebViewClient?, userAgent: String) : Web
view
?.
let
{
it
->
if
(
it
.
context
is
Activity
)
{
val
activity
=
it
.
context
as
Activity
val
absDokitView
:
AbsDokitView
?
=
DokitViewManager
.
getInstance
()
val
absDokitView
:
AbsDokitView
?
=
DokitViewManager
.
instance
.
getDokitView
(
activity
,
H5DokitView
::
class
.
java
.
simpleName
)
absDokitView
?.
let
{
h5DokitView
->
(
h5DokitView
as
H5DokitView
).
updateUrl
(
url
)
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/h5_help/DokitX5WebViewClient.kt
浏览文件 @
b3d5e1d5
...
...
@@ -46,7 +46,7 @@ class DokitX5WebViewClient(webViewClient: WebViewClient?, userAgent: String) : W
view
?.
let
{
it
->
if
(
it
.
context
is
Activity
)
{
val
activity
=
it
.
context
as
Activity
val
absDokitView
:
AbsDokitView
?
=
DokitViewManager
.
getInstance
()
val
absDokitView
:
AbsDokitView
?
=
DokitViewManager
.
instance
.
getDokitView
(
activity
,
H5DokitView
::
class
.
java
.
simpleName
)
absDokitView
?.
let
{
h5DokitView
->
(
h5DokitView
as
H5DokitView
).
updateUrl
(
url
)
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/h5_help/H5DokitView.kt
浏览文件 @
b3d5e1d5
...
...
@@ -72,7 +72,7 @@ class H5DokitView : AbsDokitView() {
rootView
?.
let
{
val
close
=
it
.
findViewById
<
ImageView
>(
R
.
id
.
iv_close
)
close
.
setOnClickListener
{
DokitViewManager
.
getInstance
()
.
detach
(
this
)
DokitViewManager
.
instance
.
detach
(
this
)
}
mTvLink
=
it
.
findViewById
(
R
.
id
.
tv_link
)
mJsCheckBox
=
it
.
findViewById
(
R
.
id
.
js_switch
)
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/health/CountDownDokitView.kt
浏览文件 @
b3d5e1d5
...
...
@@ -37,9 +37,9 @@ class CountDownDokitView : AbsDokitView() {
.
onCompletion
{
withContext
(
Dispatchers
.
Main
)
{
if
(
isNormalMode
)
{
DokitViewManager
.
getInstance
()
.
detach
(
activity
,
this
@CountDownDokitView
)
DokitViewManager
.
instance
.
detach
(
activity
,
this
@CountDownDokitView
)
}
else
{
DokitViewManager
.
getInstance
()
.
detach
(
this
@CountDownDokitView
)
DokitViewManager
.
instance
.
detach
(
this
@CountDownDokitView
)
}
}
}
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/lbs/route/AMapRealNavMockView.kt
浏览文件 @
b3d5e1d5
...
...
@@ -59,7 +59,7 @@ class AMapRealNavMockView : AbsDokitView() {
val
tvProgress
=
it
.
findViewById
<
TextView
>(
R
.
id
.
tv_progress
)
tvProgress
.
text
=
"当前导航进度: 0%"
close
.
setOnClickListener
{
DokitViewManager
.
getInstance
()
.
detach
(
this
)
DokitViewManager
.
instance
.
detach
(
this
)
}
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/toolpanel/ToolPanelAdapter.kt
浏览文件 @
b3d5e1d5
...
...
@@ -100,7 +100,7 @@ class ToolPanelAdapter(kitViews: MutableList<KitWrapItem>?) :
KitWrapItem
.
TYPE_EXIT
->
{
holder
.
getView
<
TextView
>(
R
.
id
.
close
).
setOnClickListener
{
DokitViewManager
.
getInstance
()
.
detachToolPanel
()
DokitViewManager
.
instance
.
detachToolPanel
()
DoKit
.
hide
()
}
...
...
Android/java/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/toolpanel/ToolPanelDokitView.kt
浏览文件 @
b3d5e1d5
...
...
@@ -122,7 +122,7 @@ class ToolPanelDokitView : AbsDokitView() {
//常规模式下点击常用工具不隐藏工具面板
it
.
onClick
(
ActivityUtils
.
getTopActivity
())
if
(
it
.
onClickWithReturn
(
ActivityUtils
.
getTopActivity
()))
{
DokitViewManager
.
getInstance
()
.
detachToolPanel
()
DokitViewManager
.
instance
.
detachToolPanel
()
}
//添加埋点
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录