mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
fix(uidesigner): handle XML generation errors (fixes #1280)
This commit is contained in:
@@ -41,6 +41,7 @@ import com.itsaky.androidide.uidesigner.fragments.DesignerWorkspaceFragment
|
||||
import com.itsaky.androidide.uidesigner.utils.ViewToXml
|
||||
import com.itsaky.androidide.uidesigner.viewmodel.WorkspaceViewModel
|
||||
import com.itsaky.androidide.utils.ILogger
|
||||
import com.itsaky.androidide.utils.flashError
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
@@ -77,7 +78,21 @@ class UIDesignerActivity : BaseIDEActivity() {
|
||||
return
|
||||
}
|
||||
|
||||
ViewToXml.generateXml(frag.requireContext(), frag.workspaceView) { onXmlGenerated(it) }
|
||||
ViewToXml.generateXml(
|
||||
frag.requireContext(),
|
||||
frag.workspaceView,
|
||||
::onXmlGenerated
|
||||
) { result, error ->
|
||||
if (result != null && error == null) {
|
||||
return@generateXml
|
||||
}
|
||||
|
||||
// XML generation failed, notify user and exit activity
|
||||
runOnUiThread {
|
||||
flashError(R.string.msg_generate_xml_failed)
|
||||
onFailedToReturnXml(error?.cause?.message ?: error?.message ?: "Unknown error")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ import com.itsaky.androidide.uidesigner.R
|
||||
import com.itsaky.androidide.uidesigner.ShowXmlActivity
|
||||
import com.itsaky.androidide.uidesigner.utils.ViewToXml
|
||||
import com.itsaky.androidide.utils.ILogger
|
||||
import com.itsaky.androidide.utils.flashError
|
||||
|
||||
/**
|
||||
* Navigates the user to [ShowXmlActivity].
|
||||
@@ -35,6 +36,7 @@ import com.itsaky.androidide.utils.ILogger
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
class ShowXmlAction(context: Context) : UiDesignerAction() {
|
||||
|
||||
override val id: String = "ide.uidesigner.showXml"
|
||||
|
||||
private val log = ILogger.newInstance("ShowXmlAction")
|
||||
@@ -59,10 +61,17 @@ class ShowXmlAction(context: Context) : UiDesignerAction() {
|
||||
override fun execAction(data: ActionData): Any {
|
||||
data.requireActivity().apply {
|
||||
val workspace = data.requireWorkspace().workspaceView
|
||||
ViewToXml.generateXml(this, workspace) { result ->
|
||||
ViewToXml.generateXml(this, workspace, { result ->
|
||||
val intent = Intent(this, ShowXmlActivity::class.java)
|
||||
intent.putExtra(ShowXmlActivity.KEY_XML, result)
|
||||
startActivity(intent)
|
||||
}) { result, error ->
|
||||
if (result == null || error != null) {
|
||||
val message = "${
|
||||
getString(R.string.msg_generate_xml_failed)
|
||||
}: ${error?.cause?.message ?: error?.message ?: "Unknown error"}"
|
||||
flashError(message)
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
||||
@@ -42,7 +42,12 @@ object ViewToXml {
|
||||
|
||||
@JvmStatic
|
||||
@JvmOverloads
|
||||
fun generateXml(context: Context, workspace: ViewGroupImpl, onGenerated: (String) -> Unit = {}) {
|
||||
fun generateXml(
|
||||
context: Context,
|
||||
workspace: ViewGroupImpl,
|
||||
onGenerated: (String) -> Unit = {},
|
||||
onFailure: (result: String?, error: Throwable?) -> Unit
|
||||
) {
|
||||
context.apply {
|
||||
val future: CompletableFuture<String?> =
|
||||
executeAsyncProvideError({
|
||||
@@ -59,8 +64,7 @@ object ViewToXml {
|
||||
}
|
||||
|
||||
return@executeAsyncProvideError generateXml(workspace[0] as ViewImpl)
|
||||
}) { _, _ ->
|
||||
}
|
||||
}) { _, _ -> }
|
||||
|
||||
val progress =
|
||||
DialogUtils.newProgressDialog(
|
||||
@@ -79,6 +83,7 @@ object ViewToXml {
|
||||
|
||||
if (result.isNullOrBlank() || error != null) {
|
||||
log.error("Unable to generate XML code", error)
|
||||
onFailure(result, error)
|
||||
return@runOnUiThread
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user