diff --git a/panel-core/src/main/kotlin/com/redmadrobot/debug/core/DebugPanel.kt b/panel-core/src/main/kotlin/com/redmadrobot/debug/core/DebugPanel.kt index 88db1771..b659fdfe 100644 --- a/panel-core/src/main/kotlin/com/redmadrobot/debug/core/DebugPanel.kt +++ b/panel-core/src/main/kotlin/com/redmadrobot/debug/core/DebugPanel.kt @@ -14,6 +14,7 @@ import kotlinx.coroutines.flow.emptyFlow @OptIn(DebugPanelInternal::class) public object DebugPanel { + @Volatile private var instance: DebugPanelInstance? = null public val isInitialized: Boolean get() = instance != null @@ -40,6 +41,8 @@ public object DebugPanel { } } + internal fun getInstance(): DebugPanelInstance? = instance + private fun openDebugPanel(activity: Activity) { val intent = Intent(activity, DebugPanelActivity::class.java) activity.startActivity(intent) diff --git a/panel-core/src/main/kotlin/com/redmadrobot/debug/core/DebugPanelInstance.kt b/panel-core/src/main/kotlin/com/redmadrobot/debug/core/DebugPanelInstance.kt index 79cfa0b3..a222e339 100644 --- a/panel-core/src/main/kotlin/com/redmadrobot/debug/core/DebugPanelInstance.kt +++ b/panel-core/src/main/kotlin/com/redmadrobot/debug/core/DebugPanelInstance.kt @@ -26,7 +26,6 @@ internal class DebugPanelInstance( init { initContainer(application.applicationContext) initPluginManager(plugins, requireNotNull(commonContainer)) - instance = this } internal fun getEventLiveData(): LiveData { @@ -42,7 +41,7 @@ internal class DebugPanelInstance( eventSharedFlow.tryEmit(debugEvent) } - internal fun getPluginManger(): PluginManager { + internal fun getPluginManager(): PluginManager { return pluginManager ?: error("PluginManager not initialised") } @@ -59,8 +58,4 @@ internal class DebugPanelInstance( start(commonContainer) } } - - companion object { - var instance: DebugPanelInstance? = null - } } diff --git a/panel-core/src/main/kotlin/com/redmadrobot/debug/core/extension/PluginsExt.kt b/panel-core/src/main/kotlin/com/redmadrobot/debug/core/extension/PluginsExt.kt index 0a0d4e64..6d95bcd3 100644 --- a/panel-core/src/main/kotlin/com/redmadrobot/debug/core/extension/PluginsExt.kt +++ b/panel-core/src/main/kotlin/com/redmadrobot/debug/core/extension/PluginsExt.kt @@ -1,17 +1,17 @@ package com.redmadrobot.debug.core.extension -import com.redmadrobot.debug.core.DebugPanelInstance +import com.redmadrobot.debug.core.DebugPanel import com.redmadrobot.debug.core.annotation.DebugPanelInternal import com.redmadrobot.debug.core.plugin.Plugin @PublishedApi internal fun getPlugin(pluginName: String): Plugin { - val plugin = DebugPanelInstance.instance?.getPluginManger()?.findPluginByName(pluginName) + val plugin = DebugPanel.getInstance()?.getPluginManager()?.findPluginByName(pluginName) return requireNotNull(plugin) } internal fun getAllPlugins(): List { - return DebugPanelInstance.instance?.getPluginManger()?.plugins ?: emptyList() + return DebugPanel.getInstance()?.getPluginManager()?.plugins ?: emptyList() } @DebugPanelInternal diff --git a/panel-core/src/main/kotlin/com/redmadrobot/debug/core/plugin/Plugin.kt b/panel-core/src/main/kotlin/com/redmadrobot/debug/core/plugin/Plugin.kt index 588587a1..a8494c92 100644 --- a/panel-core/src/main/kotlin/com/redmadrobot/debug/core/plugin/Plugin.kt +++ b/panel-core/src/main/kotlin/com/redmadrobot/debug/core/plugin/Plugin.kt @@ -2,7 +2,7 @@ package com.redmadrobot.debug.core.plugin import androidx.compose.runtime.Composable import com.redmadrobot.debug.core.DebugEvent -import com.redmadrobot.debug.core.DebugPanelInstance +import com.redmadrobot.debug.core.DebugPanel import com.redmadrobot.debug.core.internal.CommonContainer import com.redmadrobot.debug.core.internal.PluginDependencyContainer @@ -15,7 +15,7 @@ public abstract class Plugin { } public fun pushEvent(debugEvent: DebugEvent) { - DebugPanelInstance.instance?.pushEvent(debugEvent) + DebugPanel.getInstance()?.pushEvent(debugEvent) } public fun getContainer(): T = pluginContainer as T diff --git a/panel-core/src/main/kotlin/com/redmadrobot/debug/core/util/ApplicationLifecycleHandler.kt b/panel-core/src/main/kotlin/com/redmadrobot/debug/core/util/ApplicationLifecycleHandler.kt index 7a3391f0..5ef01043 100644 --- a/panel-core/src/main/kotlin/com/redmadrobot/debug/core/util/ApplicationLifecycleHandler.kt +++ b/panel-core/src/main/kotlin/com/redmadrobot/debug/core/util/ApplicationLifecycleHandler.kt @@ -7,12 +7,13 @@ import android.content.IntentFilter import androidx.activity.ComponentActivity import androidx.core.content.ContextCompat import timber.log.Timber +import java.util.concurrent.atomic.AtomicInteger internal class ApplicationLifecycleHandler( private val application: Application, ) { // open Activity counter - private var openActivityCount = 0 + private val openActivityCounter = AtomicInteger(0) private var debugPanelBroadcastReceiver: BroadcastReceiver? = null private val debugPanelNotification = DebugPanelNotification(application.applicationContext) @@ -25,8 +26,7 @@ internal class ApplicationLifecycleHandler( application.registerActivityLifecycleCallbacks( object : ActivityLifecycleCallbacksAdapter() { override fun onActivityResumed(activity: Activity) { - if (openActivityCount == 0) onAppResumed() - ++openActivityCount + if (openActivityCounter.getAndIncrement() == 0) onAppResumed() // register BroadcastReceiver for debug panel inner actions debugPanelBroadcastReceiver = DebugPanelBroadcastReceiver(activity) @@ -41,11 +41,10 @@ internal class ApplicationLifecycleHandler( } override fun onActivityPaused(activity: Activity) { - --openActivityCount (activity as? ComponentActivity)?.let { activity.unregisterReceiver(debugPanelBroadcastReceiver) } - if (openActivityCount == 0) onAppPaused() + if (openActivityCounter.decrementAndGet() == 0) onAppPaused() } } ) diff --git a/panel-core/src/main/kotlin/com/redmadrobot/debug/core/util/DebugPanelNotification.kt b/panel-core/src/main/kotlin/com/redmadrobot/debug/core/util/DebugPanelNotification.kt index adb42942..529e45fb 100644 --- a/panel-core/src/main/kotlin/com/redmadrobot/debug/core/util/DebugPanelNotification.kt +++ b/panel-core/src/main/kotlin/com/redmadrobot/debug/core/util/DebugPanelNotification.kt @@ -27,9 +27,9 @@ internal class DebugPanelNotification(private val context: Context) { } fun show() { - val isPermissionGranted = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && + val isPermissionDenied = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && ContextCompat.checkSelfPermission(context, POST_NOTIFICATIONS) != PERMISSION_GRANTED - if (isPermissionGranted) return + if (isPermissionDenied) return notificationManager = NotificationManagerCompat.from(context) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { diff --git a/panel-no-op/build.gradle.kts b/panel-no-op/build.gradle.kts index adbe72bf..073f46e1 100644 --- a/panel-no-op/build.gradle.kts +++ b/panel-no-op/build.gradle.kts @@ -28,6 +28,7 @@ android { kotlin { jvmToolchain(17) + explicitApi() } namespace = "com.redmadrobot.debug.noop" diff --git a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/DebugDataProvider.kt b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/DebugDataProvider.kt index da9e33ff..080f503f 100644 --- a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/DebugDataProvider.kt +++ b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/DebugDataProvider.kt @@ -1,5 +1,5 @@ package com.redmadrobot.debug.core.data -interface DebugDataProvider { - fun provideData(): T +public interface DebugDataProvider { + public fun provideData(): T } diff --git a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/core/DebugEvent.kt b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/core/DebugEvent.kt index c7651ed9..f4057a00 100644 --- a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/core/DebugEvent.kt +++ b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/core/DebugEvent.kt @@ -1,3 +1,3 @@ package com.redmadrobot.debug.core.internal -interface DebugEvent +public interface DebugEvent diff --git a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/core/DebugPanel.kt b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/core/DebugPanel.kt index 9837168d..1390d573 100644 --- a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/core/DebugPanel.kt +++ b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/core/DebugPanel.kt @@ -9,17 +9,14 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.emptyFlow @Suppress("UnusedParameter", "OptionalUnit") -object DebugPanel { - fun initialize( - application: Application, - plugins: List, - ) = Unit +public object DebugPanel { + public fun initialize(application: Application, plugins: List): Unit = Unit - fun subscribeToEvents(lifecycleOwner: LifecycleOwner, onEvent: (DebugEvent) -> Unit) = Unit + public fun subscribeToEvents(lifecycleOwner: LifecycleOwner, onEvent: (DebugEvent) -> Unit): Unit = Unit - fun observeEvents(): Flow = emptyFlow() + public fun observeEvents(): Flow = emptyFlow() - fun showPanel(fragmentManager: FragmentManager) = Unit + public fun showPanel(fragmentManager: FragmentManager): Unit = Unit - fun showPanel(activity: Activity) = Unit + public fun showPanel(activity: Activity): Unit = Unit } diff --git a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/aboutapp/AboutAppInfo.kt b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/aboutapp/AboutAppInfo.kt index 9cab84ac..819dc408 100644 --- a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/aboutapp/AboutAppInfo.kt +++ b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/aboutapp/AboutAppInfo.kt @@ -1,6 +1,6 @@ package com.redmadrobot.debug.plugin.aboutapp -data class AboutAppInfo( +public data class AboutAppInfo( val title: String, val value: String ) diff --git a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/aboutapp/AboutAppPlugin.kt b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/aboutapp/AboutAppPlugin.kt index ee698271..12a446fc 100644 --- a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/aboutapp/AboutAppPlugin.kt +++ b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/aboutapp/AboutAppPlugin.kt @@ -1,6 +1,6 @@ package com.redmadrobot.debug.plugin.aboutapp @Suppress("UnusedPrivateProperty") -class AboutAppPlugin( +public class AboutAppPlugin( private val appInfoList: List ) diff --git a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/DebugServer.kt b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/DebugServer.kt index 1999cde8..13c3b3d7 100644 --- a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/DebugServer.kt +++ b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/DebugServer.kt @@ -1,6 +1,6 @@ package com.redmadrobot.debug.plugin.servers.data.model -data class DebugServer( +public data class DebugServer( val name: String, val url: String, val isDefault: Boolean = false diff --git a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/ServerSelectedEvent.kt b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/ServerSelectedEvent.kt index 19c784a6..a7860da9 100644 --- a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/ServerSelectedEvent.kt +++ b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/ServerSelectedEvent.kt @@ -3,4 +3,4 @@ package com.redmadrobot.debug.plugin.servers import com.redmadrobot.debug.core.internal.DebugEvent import com.redmadrobot.debug.plugin.servers.data.model.DebugServer -data class ServerSelectedEvent(val debugServer: DebugServer) : DebugEvent +public data class ServerSelectedEvent(val debugServer: DebugServer) : DebugEvent diff --git a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/ServersPlugin.kt b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/ServersPlugin.kt index 8b99d490..5fec7820 100644 --- a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/ServersPlugin.kt +++ b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/ServersPlugin.kt @@ -4,10 +4,10 @@ import com.redmadrobot.debug.core.data.DebugDataProvider import com.redmadrobot.debug.plugin.servers.data.model.DebugServer import java.util.Collections.emptyList -class ServersPlugin( +public class ServersPlugin( private val preInstalledServers: List = emptyList() ) { - constructor(debugDataProvider: DebugDataProvider>) : this( + public constructor(debugDataProvider: DebugDataProvider>) : this( preInstalledServers = debugDataProvider.provideData() ) } diff --git a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/interceptor/DebugServerInterceptor.kt b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/interceptor/DebugServerInterceptor.kt index 303f5363..d8ca1182 100644 --- a/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/interceptor/DebugServerInterceptor.kt +++ b/panel-no-op/src/main/kotlin/com/redmadrobot/debug/noop/plugin/servers/interceptor/DebugServerInterceptor.kt @@ -5,9 +5,9 @@ import okhttp3.Interceptor import okhttp3.Request import okhttp3.Response -class DebugServerInterceptor : Interceptor { +public class DebugServerInterceptor : Interceptor { @Suppress("UnusedParameter") - fun modifyRequest(block: (Request, DebugServer) -> Request): DebugServerInterceptor { + public fun modifyRequest(block: (Request, DebugServer) -> Request): DebugServerInterceptor { return this } diff --git a/plugins/plugin-konfeature/src/main/kotlin/com/redmadrobot/debug/plugin/konfeature/KonfeaturePlugin.kt b/plugins/plugin-konfeature/src/main/kotlin/com/redmadrobot/debug/plugin/konfeature/KonfeaturePlugin.kt index 2d43a25a..5cb65c13 100644 --- a/plugins/plugin-konfeature/src/main/kotlin/com/redmadrobot/debug/plugin/konfeature/KonfeaturePlugin.kt +++ b/plugins/plugin-konfeature/src/main/kotlin/com/redmadrobot/debug/plugin/konfeature/KonfeaturePlugin.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.Composable import com.redmadrobot.debug.core.internal.CommonContainer import com.redmadrobot.debug.core.internal.PluginDependencyContainer import com.redmadrobot.debug.core.plugin.Plugin -import com.redmadrobot.debug.plugin.konfeaure.ui.KonfeatureScreen +import com.redmadrobot.debug.plugin.konfeature.ui.KonfeatureScreen import com.redmadrobot.konfeature.Konfeature public class KonfeaturePlugin( diff --git a/plugins/plugin-konfeature/src/main/kotlin/com/redmadrobot/debug/plugin/konfeature/ui/KonfeatureScreen.kt b/plugins/plugin-konfeature/src/main/kotlin/com/redmadrobot/debug/plugin/konfeature/ui/KonfeatureScreen.kt index f562f7ae..384ccede 100644 --- a/plugins/plugin-konfeature/src/main/kotlin/com/redmadrobot/debug/plugin/konfeature/ui/KonfeatureScreen.kt +++ b/plugins/plugin-konfeature/src/main/kotlin/com/redmadrobot/debug/plugin/konfeature/ui/KonfeatureScreen.kt @@ -1,4 +1,4 @@ -package com.redmadrobot.debug.plugin.konfeaure.ui +package com.redmadrobot.debug.plugin.konfeature.ui import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background @@ -32,8 +32,6 @@ import com.redmadrobot.debug.core.extension.provideViewModel import com.redmadrobot.debug.plugin.konfeature.KonfeaturePlugin import com.redmadrobot.debug.plugin.konfeature.KonfeaturePluginContainer import com.redmadrobot.debug.plugin.konfeature.R -import com.redmadrobot.debug.plugin.konfeature.ui.EditConfigValueDialog -import com.redmadrobot.debug.plugin.konfeature.ui.KonfeatureViewModel import com.redmadrobot.debug.plugin.konfeature.ui.data.KonfeatureItem import com.redmadrobot.debug.plugin.konfeature.ui.data.KonfeatureViewState import com.redmadrobot.debug.core.R as CoreR