mirror of
https://github.com/oxyroid/M3UAndroid.git
synced 2025-08-06 14:59:48 +08:00
build: move RemoteService to extension-runtime.
This commit is contained in:
@ -79,7 +79,7 @@
|
||||
android:launchMode="singleInstance"
|
||||
android:theme="@style/Theme.M3U" />
|
||||
<service
|
||||
android:name="com.m3u.extension.api.RemoteService"
|
||||
android:name="com.m3u.extension.runtime.RemoteService"
|
||||
android:exported="true"
|
||||
android:foregroundServiceType="mediaPlayback"
|
||||
android:permission="${applicationId}.permission.CONNECT_EXTENSION_PLUGIN">
|
||||
|
@ -5,7 +5,7 @@ import androidx.hilt.work.HiltWorkerFactory
|
||||
import androidx.work.Configuration
|
||||
import com.m3u.core.architecture.logger.Logger
|
||||
import com.m3u.core.architecture.preferences.Preferences
|
||||
import com.m3u.core.util.context.ContextUtils
|
||||
import com.m3u.extension.runtime.Utils
|
||||
import com.m3u.smartphone.ui.business.crash.CrashHandler
|
||||
import dagger.hilt.android.HiltAndroidApp
|
||||
import javax.inject.Inject
|
||||
@ -29,7 +29,7 @@ class M3UApplication : Application(), Configuration.Provider {
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
ContextUtils.init(this)
|
||||
Utils.init(this)
|
||||
Thread.setDefaultUncaughtExceptionHandler(handler)
|
||||
// ResponseBodies.WebPage
|
||||
// .onEach {
|
||||
|
@ -3,12 +3,11 @@ package com.m3u.tv
|
||||
import android.app.Application
|
||||
import androidx.hilt.work.HiltWorkerFactory
|
||||
import androidx.work.Configuration
|
||||
import com.m3u.core.util.context.ContextUtils
|
||||
import dagger.hilt.android.HiltAndroidApp
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltAndroidApp
|
||||
class M3UApplication: Application(), Configuration.Provider {
|
||||
class M3UApplication : Application(), Configuration.Provider {
|
||||
@Inject
|
||||
lateinit var workerFactory: HiltWorkerFactory
|
||||
|
||||
@ -20,6 +19,5 @@ class M3UApplication: Application(), Configuration.Provider {
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
ContextUtils.init(this)
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
package com.m3u.core.util.context
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
|
||||
object ContextUtils {
|
||||
private lateinit var context: Application
|
||||
fun init(applicationContext: Application) {
|
||||
this.context = applicationContext
|
||||
}
|
||||
fun getContext(): Context {
|
||||
return context
|
||||
}
|
||||
}
|
@ -8,7 +8,6 @@ import android.os.IBinder
|
||||
import android.util.Log
|
||||
import com.m3u.data.extension.IRemoteCallback
|
||||
import com.m3u.data.extension.IRemoteService
|
||||
import com.m3u.extension.api.Utils.getAdapter
|
||||
import com.m3u.extension.api.Utils.getRealParameterizedType
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
@ -56,7 +55,7 @@ class RemoteClient {
|
||||
accessKey: String
|
||||
) {
|
||||
Log.d(TAG, "connect")
|
||||
val intent = Intent(context, RemoteService::class.java).apply {
|
||||
val intent = Intent().apply {
|
||||
action = targetPermission
|
||||
component = ComponentName(targetPackageName, targetClassName)
|
||||
putExtra(CallTokenConst.ACCESS_KEY, accessKey)
|
||||
@ -83,6 +82,7 @@ class RemoteClient {
|
||||
Log.d(TAG, "onSuccess: $method, $param")
|
||||
cont.resume(param)
|
||||
}
|
||||
|
||||
override fun onError(
|
||||
module: String,
|
||||
method: String,
|
||||
@ -121,13 +121,14 @@ class RemoteClient {
|
||||
} else {
|
||||
// param type
|
||||
val adapter = adapters.getOrPut(args[0]::class.java.typeName) {
|
||||
getAdapter(args[0]::class.java.typeName)
|
||||
Utils.getAdapter(args[0]::class.java.typeName)
|
||||
}
|
||||
Utils.encode(adapter, args[0])
|
||||
}
|
||||
val returnType = (parameters.last().getRealParameterizedType() as Class<*>).name
|
||||
val returnType =
|
||||
(parameters.last().getRealParameterizedType() as Class<*>).name
|
||||
val adapter = adapters.getOrPut(returnType) {
|
||||
getAdapter(returnType)
|
||||
Utils.getAdapter(returnType)
|
||||
}
|
||||
val response = call(moduleName, methodName, bytes)
|
||||
Utils.decode(adapter, response)
|
||||
@ -141,13 +142,13 @@ class RemoteClient {
|
||||
} else {
|
||||
// param type
|
||||
val adapter = adapters.getOrPut(args[0]::class.java.typeName) {
|
||||
getAdapter(args[0]::class.java.typeName)
|
||||
Utils.getAdapter(args[0]::class.java.typeName)
|
||||
}
|
||||
Utils.encode(adapter, args[0])
|
||||
}
|
||||
val returnType = (parameters.last().getRealParameterizedType() as Class<*>).name
|
||||
val adapter = adapters.getOrPut(returnType) {
|
||||
getAdapter(returnType)
|
||||
Utils.getAdapter(returnType)
|
||||
}
|
||||
val response = runBlocking { call(moduleName, methodName, bytes) }
|
||||
Utils.decode(adapter, response)
|
||||
|
@ -1,6 +0,0 @@
|
||||
package com.m3u.extension.api
|
||||
|
||||
interface RemoteServiceDependencies {
|
||||
val playlistDao: Any
|
||||
val channelDao: Any
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package com.m3u.extension.api
|
||||
package com.m3u.extension.runtime
|
||||
|
||||
import com.m3u.data.extension.IRemoteCallback
|
||||
|
@ -4,9 +4,6 @@ import com.google.auto.service.AutoService
|
||||
import com.m3u.data.extension.IRemoteCallback
|
||||
import com.m3u.extension.api.Method
|
||||
import com.m3u.extension.api.Module
|
||||
import com.m3u.extension.api.OnRemoteCall
|
||||
import com.m3u.extension.api.RemoteCallException
|
||||
import com.m3u.extension.api.RemoteServiceDependencies
|
||||
import com.m3u.extension.api.Samplings
|
||||
import com.m3u.extension.api.Utils
|
||||
import com.m3u.extension.api.Utils.getAdapter
|
||||
@ -29,9 +26,7 @@ class OnRemoteCallImpl : OnRemoteCall {
|
||||
modules = { remoteModules.keys.toList() },
|
||||
methods = { module -> remoteMethods[module]?.map { it.key }.orEmpty() }
|
||||
),
|
||||
SubscribeModule(
|
||||
dependencies = dependencies
|
||||
)
|
||||
SubscribeModule(dependencies)
|
||||
)
|
||||
.associateBy {
|
||||
checkNotNull(it::class.findAnnotation<Module>()) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.m3u.extension.api
|
||||
package com.m3u.extension.runtime
|
||||
|
||||
import android.app.NotificationChannel
|
||||
import android.app.NotificationManager
|
@ -0,0 +1,9 @@
|
||||
package com.m3u.extension.runtime
|
||||
|
||||
import com.m3u.data.database.dao.ChannelDao
|
||||
import com.m3u.data.database.dao.PlaylistDao
|
||||
|
||||
interface RemoteServiceDependencies {
|
||||
val playlistDao: PlaylistDao
|
||||
val channelDao: ChannelDao
|
||||
}
|
@ -1,10 +1,8 @@
|
||||
package com.m3u.data
|
||||
package com.m3u.extension.runtime
|
||||
|
||||
import com.google.auto.service.AutoService
|
||||
import com.m3u.core.util.context.ContextUtils
|
||||
import com.m3u.data.database.dao.ChannelDao
|
||||
import com.m3u.data.database.dao.PlaylistDao
|
||||
import com.m3u.extension.api.RemoteServiceDependencies
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.EntryPointAccessors
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
@ -20,11 +18,11 @@ class RemoteServiceDependenciesImpl : RemoteServiceDependencies {
|
||||
|
||||
private val entryPoint: EntryPoint by lazy {
|
||||
EntryPointAccessors.fromApplication(
|
||||
ContextUtils.getContext(),
|
||||
Utils.getContext(),
|
||||
EntryPoint::class.java
|
||||
)
|
||||
}
|
||||
|
||||
override val playlistDao: Any = entryPoint.playlistDao
|
||||
override val channelDao: Any = entryPoint.channelDao
|
||||
override val playlistDao: PlaylistDao = entryPoint.playlistDao
|
||||
override val channelDao: ChannelDao = entryPoint.channelDao
|
||||
}
|
@ -1,16 +1,29 @@
|
||||
package com.m3u.extension.runtime
|
||||
|
||||
internal object Utils {
|
||||
fun Result<*>.asProtoResult(): com.m3u.extension.api.model.Result {
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import com.m3u.extension.api.model.Result as ProtoResult
|
||||
|
||||
object Utils {
|
||||
internal fun Result<*>.asProtoResult(): ProtoResult {
|
||||
return if (isSuccess) {
|
||||
com.m3u.extension.api.model.Result(
|
||||
ProtoResult(
|
||||
success = true
|
||||
)
|
||||
} else {
|
||||
com.m3u.extension.api.model.Result(
|
||||
ProtoResult(
|
||||
success = false,
|
||||
message = this.exceptionOrNull()?.message
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private lateinit var context: Application
|
||||
fun init(applicationContext: Application) {
|
||||
this.context = applicationContext
|
||||
}
|
||||
|
||||
fun getContext(): Context {
|
||||
return context
|
||||
}
|
||||
}
|
@ -16,10 +16,11 @@ class InfoModule(
|
||||
@Method("getAppInfo")
|
||||
override suspend fun getAppInfo(): GetAppInfoResponse {
|
||||
return GetAppInfoResponse(
|
||||
app_id = "com.m3u.extension.runtime",
|
||||
app_id = "com.m3u.smartphone",
|
||||
app_version = "InfoModule",
|
||||
app_name = "M3U",
|
||||
app_description = "Powerful Media Player"
|
||||
app_description = "Powerful Media Player",
|
||||
app_package_name = "com.m3u.smartphone"
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -6,19 +6,19 @@ import com.m3u.data.database.model.Channel
|
||||
import com.m3u.data.database.model.Playlist
|
||||
import com.m3u.extension.api.Method
|
||||
import com.m3u.extension.api.Module
|
||||
import com.m3u.extension.api.RemoteServiceDependencies
|
||||
import com.m3u.extension.api.business.SubscribeApi
|
||||
import com.m3u.extension.api.model.AddChannelRequest
|
||||
import com.m3u.extension.api.model.AddPlaylistRequest
|
||||
import com.m3u.extension.api.model.Result
|
||||
import com.m3u.extension.runtime.RemoteServiceDependencies
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
||||
@Module("subscribe")
|
||||
class SubscribeModule(
|
||||
dependencies: RemoteServiceDependencies
|
||||
) : RemoteModule(Dispatchers.IO), SubscribeApi {
|
||||
private val playlistDao: PlaylistDao = dependencies.playlistDao as PlaylistDao
|
||||
private val channelDao: ChannelDao = dependencies.channelDao as ChannelDao
|
||||
private val playlistDao: PlaylistDao = dependencies.playlistDao
|
||||
private val channelDao: ChannelDao = dependencies.channelDao
|
||||
|
||||
@Method("addPlaylist")
|
||||
override suspend fun addPlaylist(req: AddPlaylistRequest): Result = result {
|
||||
|
Reference in New Issue
Block a user