Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,6 @@ dependencies {

implementation(projects.layouteditor)
implementation(projects.idetooltips)
implementation(projects.cvImageToXml)
implementation(projects.composePreview)
implementation(projects.gitCore)

Expand Down
10 changes: 10 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<uses-permission android:name="com.itsaky.androidide.permission.BIND_LOG_SERVICE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
Comment thread
coderabbitai[bot] marked this conversation as resolved.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
Expand Down Expand Up @@ -102,6 +103,15 @@
<activity
android:name=".activities.PluginManagerActivity"
android:configChanges="orientation|screenSize|screenLayout|smallestScreenSize" />
<activity
android:name=".activities.PluginScreenActivity"
android:configChanges="orientation|screenSize|screenLayout|smallestScreenSize"
android:exported="false">
<intent-filter>
<action android:name="com.itsaky.androidide.plugins.OPEN_PLUGIN_SCREEN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name=".activities.AboutActivity" />
<activity
android:name=".activities.editor.FAQActivity"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ class PluginActionItem(

override fun prepare(data: ActionData) {
super.prepare(data)
enabled = menuItem.isEnabled
visible = menuItem.isVisible
enabled = menuItem.isEnabledProvider?.invoke() ?: menuItem.isEnabled
visible = menuItem.isVisibleProvider?.invoke() ?: menuItem.isVisible
}

override fun retrieveTooltipTag(isReadOnlyContext: Boolean): String =
Expand All @@ -55,4 +55,4 @@ class PluginActionItem(
false
}
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
package com.itsaky.androidide.activities

import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.FrameLayout
import com.itsaky.androidide.R
import com.itsaky.androidide.app.IDEActivity
import com.itsaky.androidide.app.IDEApplication
import com.itsaky.androidide.plugins.manager.fragment.PluginFragmentFactory
import com.itsaky.androidide.plugins.services.IdeUIService

class PluginScreenActivity : IDEActivity() {

private var pluginId: String? = null
private var fragmentClassName: String? = null

override fun onCreate(savedInstanceState: Bundle?) {
pluginId = intent.getStringExtra(IdeUIService.EXTRA_PLUGIN_ID)
fragmentClassName = intent.getStringExtra(IdeUIService.EXTRA_FRAGMENT_CLASS_NAME)

val pluginId = pluginId
val fragmentClassName = fragmentClassName

if (pluginId.isNullOrBlank() || fragmentClassName.isNullOrBlank()) {
super.onCreate(savedInstanceState)
finish()
return
}

val classLoader = IDEApplication.getPluginManager()
?.getClassLoaderForPluginId(pluginId)

if (classLoader == null) {
super.onCreate(savedInstanceState)
finish()
return
}

registerPluginFragmentFactory(
pluginId = pluginId,
classLoader = classLoader,
fragmentClassName = fragmentClassName
)

super.onCreate(savedInstanceState)

if (savedInstanceState == null) {
loadPluginFragment(classLoader, fragmentClassName)
}
}

override fun bindLayout(): View {
return FrameLayout(this).apply {
id = R.id.plugin_screen_container
layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
}
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.

private fun registerPluginFragmentFactory(
pluginId: String,
classLoader: ClassLoader,
fragmentClassName: String
) {
supportFragmentManager.fragmentFactory =
PluginFragmentFactory(supportFragmentManager.fragmentFactory)

PluginFragmentFactory.registerPluginClassLoader(
pluginId,
classLoader,
listOf(fragmentClassName)
)
}

private fun loadPluginFragment(
classLoader: ClassLoader,
fragmentClassName: String
) {
val fragment = runCatching {
supportFragmentManager.fragmentFactory.instantiate(
classLoader,
fragmentClassName
)
}.getOrElse { error ->
Log.e(TAG, "Failed to instantiate plugin fragment: $fragmentClassName", error)
finish()
return
}

supportFragmentManager.beginTransaction()
.replace(R.id.plugin_screen_container, fragment, TAG_PLUGIN_SCREEN)
.commit()
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.

override fun onDestroy() {
val pluginId = pluginId
val fragmentClassName = fragmentClassName

if (!pluginId.isNullOrBlank() && !fragmentClassName.isNullOrBlank()) {
PluginFragmentFactory.unregisterPluginClassLoader(pluginId, listOf(fragmentClassName))
}

super.onDestroy()
}

companion object {
private const val TAG = "PluginScreenActivity"
private const val TAG_PLUGIN_SCREEN = "plugin_screen"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import kotlinx.coroutines.plus
import org.appdevforall.codeonthego.computervision.di.computerVisionModule
import org.jetbrains.kotlin.cli.jvm.compiler.setupIdeaStandaloneExecution
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.GlobalContext
Expand Down Expand Up @@ -198,7 +197,7 @@ class IDEApplication :
runCatching { GlobalContext.get() }.getOrNull()?.let { return }
startKoin {
androidContext(this@IDEApplication)
modules(coreModule, pluginModule, computerVisionModule)
modules(coreModule, pluginModule)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ import com.itsaky.androidide.actions.text.RedoAction
import com.itsaky.androidide.actions.text.UndoAction
import com.itsaky.androidide.actions.PluginActionItem
import com.itsaky.androidide.actions.build.PluginBuildActionItem
import com.itsaky.androidide.actions.etc.GenerateXMLAction
import com.itsaky.androidide.plugins.extensions.UIExtension
import com.itsaky.androidide.plugins.manager.build.PluginBuildActionManager
import com.itsaky.androidide.plugins.manager.core.PluginManager
Expand Down Expand Up @@ -101,9 +100,6 @@ class EditorActivityActions {
registry.registerAction(FindInProjectAction(context, order++))
registry.registerAction(LaunchAppAction(context, order++))
registry.registerAction(DisconnectLogSendersAction(context, order++))
if (FeatureFlags.isExperimentsEnabled) {
registry.registerAction(action = GenerateXMLAction(context, order = order++))
}

// Plugin contributions
order = registerPluginActions(context, registry, order)
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/res/values/ids.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="plugin_screen_container" type="id" />
</resources>
57 changes: 0 additions & 57 deletions cv-image-to-xml/build.gradle.kts

This file was deleted.

Loading
Loading