Skip to content

Commit aff2f05

Browse files
yanglwshifujun
authored andcommitted
feat(core.runtime): 支持Content Provider多authority功能
1 parent adafe8e commit aff2f05

2 files changed

Lines changed: 27 additions & 11 deletions

File tree

projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/ComponentManager.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ abstract class ComponentManager : PluginComponentLauncher {
6060

6161
abstract fun onBindContainerContentProvider(pluginContentProvider: ComponentName): ContainerProviderInfo
6262

63+
open fun onBindContainerContentProvider(
64+
pluginContentProvider: ComponentName,
65+
pluginAuthority: String
66+
): ContainerProviderInfo {
67+
return onBindContainerContentProvider(pluginContentProvider)
68+
}
69+
6370
override fun startActivity(
6471
shadowContext: ShadowContext,
6572
pluginIntent: Intent,
@@ -212,11 +219,16 @@ abstract class ComponentManager : PluginComponentLauncher {
212219

213220
pluginManifest.providers?.forEach {
214221
val componentName = ComponentName(applicationPackageName, it.className)
215-
mPluginContentProviderManager!!.addContentProviderInfo(
216-
loadParameters.partKey,
217-
it,
218-
onBindContainerContentProvider(componentName)
219-
)
222+
it.authorities.split(";")
223+
.filter { authority -> authority.isNotBlank() }
224+
.forEach { authority ->
225+
mPluginContentProviderManager!!.addContentProviderInfo(
226+
loadParameters.partKey,
227+
it,
228+
onBindContainerContentProvider(componentName, authority),
229+
authority
230+
)
231+
}
220232
}
221233

222234
pluginManifest.receivers?.forEach {

projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/PluginContentProviderManager.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,21 +71,22 @@ class PluginContentProviderManager() : UriConverter.UriParseDelegate {
7171
fun addContentProviderInfo(
7272
partKey: String,
7373
pluginProviderInfo: PluginManifest.ProviderInfo,
74-
containerProviderInfo: ContainerProviderInfo
74+
containerProviderInfo: ContainerProviderInfo,
75+
pluginAuthority: String
7576
) {
76-
if (providerMap.containsKey(pluginProviderInfo.authorities)) {
77+
if (providerMap.containsKey(pluginAuthority)) {
7778
throw RuntimeException("重复添加 ContentProvider")
7879
}
7980

80-
providerAuthorityMap[pluginProviderInfo.authorities] = containerProviderInfo.authority
81-
var pluginProviderInfos: HashSet<PluginManifest.ProviderInfo>? = null
81+
providerAuthorityMap[pluginAuthority] = containerProviderInfo.authority
82+
var pluginProviderInfos: HashSet<PluginManifest.ProviderInfo>?
8283
if (pluginProviderInfoMap.containsKey(partKey)) {
8384
pluginProviderInfos = pluginProviderInfoMap[partKey]
8485
} else {
8586
pluginProviderInfos = HashSet()
87+
pluginProviderInfoMap[partKey] = pluginProviderInfos
8688
}
8789
pluginProviderInfos?.add(pluginProviderInfo)
88-
pluginProviderInfoMap.put(partKey, pluginProviderInfos)
8990
}
9091

9192
fun createContentProviderAndCallOnCreate(
@@ -105,7 +106,10 @@ class PluginContentProviderManager() : UriConverter.UriParseDelegate {
105106
providerInfo.authority = it.authorities
106107
providerInfo.grantUriPermissions = it.grantUriPermissions
107108
contentProvider?.attachInfo(context, providerInfo)
108-
providerMap[it.authorities] = contentProvider
109+
it.authorities
110+
.split(";")
111+
.filter { authority -> authority.isNotBlank() }
112+
.forEach { authority -> providerMap[authority] = contentProvider }
109113
} catch (e: Exception) {
110114
throw RuntimeException(
111115
"partKey==$partKey className==${it.className} authorities==${it.authorities}",

0 commit comments

Comments
 (0)