From 0ceca740c75482b71621b62b1ebe71a7500babc8 Mon Sep 17 00:00:00 2001 From: Tim Froehlich Date: Thu, 9 Jan 2025 12:53:56 -0600 Subject: [PATCH] Completes the conversion of the Convert Request/Response to Proto --- .github/workflows/main.yml | 2 +- common/build.gradle.kts | 70 ---------- .../common/DocumentServerParams.kt | 21 +-- .../designcompose/common/GenericDocContent.kt | 63 +++------ crates/dc_jni/src/android_interface.rs | 1 + .../src/android_interface/convert_request.rs | 4 +- .../src/android_interface/layout_node.rs | 120 ------------------ crates/dc_jni/src/jni.rs | 9 +- crates/figma_import/src/document.rs | 2 +- crates/figma_import/src/image_context.rs | 2 +- crates/figma_import/src/lib.rs | 4 +- .../src/{fetch.rs => proxy_config.rs} | 10 +- crates/figma_import/src/tools/fetch.rs | 2 +- crates/figma_import/src/tools/fetch_layout.rs | 3 +- .../figma_import/tests/layout-unit-tests.dcf | Bin 22657 -> 22657 bytes crates/layout/src/android_interface.rs | 14 ++ crates/layout/src/layout_manager.rs | 6 +- .../figmaIntegrationTests/JniFetchTests.kt | 52 ++++---- ...signSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf | Bin 247682 -> 247603 bytes .../com/android/designcompose/DocContent.kt | 5 +- .../com/android/designcompose/DocFetcher.kt | 54 -------- .../com/android/designcompose/DocServer.kt | 43 ++++++- .../java/com/android/designcompose/Jni.kt | 8 +- .../java/com/android/designcompose/Layout.kt | 10 +- .../com/android/designcompose/LiveUpdate.kt | 36 ------ .../designcompose/squoosh/SquooshAnimate.kt | 8 +- .../designcompose/squoosh/SquooshLayout.kt | 21 +-- .../designcompose/squoosh/SquooshRender.kt | 4 +- .../squoosh/SquooshResolvedNode.kt | 4 +- .../designcompose/squoosh/SquooshRoot.kt | 6 +- .../res/raw/raw_resource_test_hello_world_doc | Bin 2236 -> 2236 bytes .../BattleshipDoc_RfGl9SWnBEvdg8T1Ex6ZAR.dcf | Bin 587997 -> 587874 bytes ...erPluginTestDoc_TkgjNl81e5joWeAivmIdzm.dcf | Bin 4017199 -> 4021804 bytes ...lsGaugesTestDoc_lZj6E9GtIQQE4HNLpzgETw.dcf | Bin 212355 -> 212355 bytes ...idWidgetTestDoc_OBhNItd9i9J2LwVYuLxEIx.dcf | Bin 240267 -> 240267 bytes .../HelloWorldDoc_pxVlixodJqZL95zo2RzTHl.dcf | Bin 2315 -> 2315 bytes ...eractionTestDoc_8Zg9viyjYTnyN29pbkR1CE.dcf | Bin 186482 -> 186482 bytes ...mSpacingTestDoc_YXrHBp6C6OaW5ShcCYeGJc.dcf | Bin 22061 -> 22070 bytes .../LayoutTestsDoc_Gv63fYTzpeH2ZtxP4go31E.dcf | Bin 124845 -> 124845 bytes ...tAnimateTestDoc_RW3lFurXCoVDeqY2Y7bf4v.dcf | Bin 1735918 -> 1735918 bytes ...ariablesTestDoc_HhGxvL4aHhP8ALsLNz56TP.dcf | Bin 41712 -> 41712 bytes ...AsteriskTestDoc_gQeYHGCSaBE4zYSFpBrhre.dcf | Bin 16898 -> 16898 bytes proto/layout_interface/jni_layout.proto | 1 - proto/live_update/android_interface.proto | 10 +- proto/live_update/figma/figma_doc.proto | 4 +- .../HelloWorldDoc_pxVlixodJqZL95zo2RzTHl.dcf | Bin 2236 -> 2236 bytes .../TutorialDoc_3z4xExq0INrL9vxPhj9tl7.dcf | Bin 34364 -> 34364 bytes 47 files changed, 160 insertions(+), 439 deletions(-) delete mode 100644 crates/dc_jni/src/android_interface/layout_node.rs rename crates/figma_import/src/{fetch.rs => proxy_config.rs} (80%) delete mode 100644 designcompose/src/main/java/com/android/designcompose/DocFetcher.kt delete mode 100644 designcompose/src/main/java/com/android/designcompose/LiveUpdate.kt diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 693f07851..52c46b111 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -248,7 +248,7 @@ jobs: - name: Build all run: cargo build --all-targets --all-features - name: Test all - run: cargo test --all-targets --features=reflection,fetch,dcf_info + run: cargo test --all-targets --features=fetch,dcf_info ############ Figma resources figma-resources: runs-on: ubuntu-latest diff --git a/common/build.gradle.kts b/common/build.gradle.kts index f94830663..d484688a3 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -15,7 +15,6 @@ */ import com.google.protobuf.gradle.id -import org.gradle.process.internal.DefaultExecOperations plugins { id("java-library") @@ -49,75 +48,6 @@ sourceSets { } } -/** - * Serde gen task - * - * Generates the Java files from our Rust code - * - * @property executor: ExecOperations class - * @property rustSrcs The files to watch to see if we should rebuild (should be filtered to not - * include the target dir - * @property generatedCodeDir Where the generated code will be output - * @constructor Create empty Serde gen task - */ -@CacheableTask -abstract class SerdeGenTask @Inject constructor(private val executor: DefaultExecOperations) : - DefaultTask() { - - @get:PathSensitive(PathSensitivity.RELATIVE) - @get:InputFiles - abstract val rustSrcs: ConfigurableFileCollection - - @get:OutputDirectory abstract val generatedCodeDir: DirectoryProperty - - @get:Internal abstract val cargoTargetDir: DirectoryProperty - - init { - group = "DesignCompose Developer" - } - - @TaskAction - fun run() { - generatedCodeDir.get().asFileTree.forEach { it.delete() } - executor.exec { - val localBinCargo = - project.providers - .systemProperty("user.home") - .map { File(it, ".cargo/bin/cargo") } - .get() - executable = if (localBinCargo.exists()) localBinCargo.absolutePath else "cargo" - - environment("CARGO_TARGET_DIR", cargoTargetDir.get().toString()) - workingDir(rustSrcs.asPath) - args( - listOf( - "run", - "-q", - "--release", - "--features=reflection", - "--bin=reflection", - "--", - "--out-dir", - generatedCodeDir.get().toString(), - ) - ) - } - } -} - -// Configure the task, setting the locations of the source and outputs -val serdeGenTask = - tasks.register("generateSerdegenCode") { - rustSrcs.from( - layout.projectDirectory.files("../crates/figma_import").filterNot { name == "target" } - ) - generatedCodeDir.set(layout.buildDirectory.dir("generated/serdegen/java")) - cargoTargetDir.set(layout.buildDirectory.dir("serdeGenCargoTarget")) - } - -// Connect the outputs to the java source set, so it'll automatically be compiled -project.sourceSets.main { java { srcDir(serdeGenTask.flatMap { it.generatedCodeDir }) } } - // Protobuf configuration project.sourceSets.main { proto { srcDir(rootProject.layout.projectDirectory.dir("proto")) } } diff --git a/common/src/main/java/com/android/designcompose/common/DocumentServerParams.kt b/common/src/main/java/com/android/designcompose/common/DocumentServerParams.kt index 5d2e69bce..68aa0bdb9 100644 --- a/common/src/main/java/com/android/designcompose/common/DocumentServerParams.kt +++ b/common/src/main/java/com/android/designcompose/common/DocumentServerParams.kt @@ -16,20 +16,7 @@ package com.android.designcompose.common -class DocumentServerParams( - private val nodeQueries: ArrayList? = null, - private val ignoredImages: HashMap>? = null, -) { - fun toJsonSnippet(): String { - val queriesStr = nodeQueries?.joinToString(",") { "\"$it\"" } ?: "" - val ignoredImagesStr = - ignoredImages?.keys?.joinToString(",") { node -> - val images = ignoredImages[node]?.joinToString(",") { "\"$it\"" } - "{ \"node\": \"$node\", \"images\": [$images] }" - } ?: "" - - var jsonStr = "\"ignored_images\": [$ignoredImagesStr], " - jsonStr += "\"queries\": [$queriesStr]" - return jsonStr - } -} +data class DocumentServerParams( + val nodeQueries: ArrayList? = null, + val ignoredImages: HashMap>? = null, +) diff --git a/common/src/main/java/com/android/designcompose/common/GenericDocContent.kt b/common/src/main/java/com/android/designcompose/common/GenericDocContent.kt index 35766b319..c813f2c0a 100644 --- a/common/src/main/java/com/android/designcompose/common/GenericDocContent.kt +++ b/common/src/main/java/com/android/designcompose/common/GenericDocContent.kt @@ -19,8 +19,10 @@ package com.android.designcompose.common import com.android.designcompose.definition.DesignComposeDefinition import com.android.designcompose.definition.DesignComposeDefinitionHeader import com.android.designcompose.definition.view.View +import com.android.designcompose.live_update.ConvertResponse import com.android.designcompose.live_update.figma.FigmaDocInfo -import com.android.designcompose.live_update.figma.ServerFigmaDoc +import com.google.protobuf.ByteString +import com.google.protobuf.kotlin.toByteString import java.io.ByteArrayOutputStream import java.io.File import java.io.FileOutputStream @@ -33,8 +35,7 @@ class GenericDocContent( val variantViewMap: HashMap>, val variantPropertyMap: VariantPropertyMap, val nodeIdMap: HashMap, - private val imageSessionData: ByteArray, - val imageSession: String?, + val imageSession: ByteString, val branches: List? = null, val project_files: List? = null, ) { @@ -57,7 +58,7 @@ class GenericDocContent( val outputStream = ByteArrayOutputStream() header.writeDelimitedTo(outputStream) document.writeDelimitedTo(outputStream) - outputStream.write(imageSessionData) + outputStream.write(imageSession.toByteArray()) return outputStream.toByteArray() } catch (error: Throwable) { feedback.documentSaveError(error.toString(), docId) @@ -68,19 +69,19 @@ class GenericDocContent( /// Read a serialized server document from the given stream. Deserialize it and save it to disk. fun decodeServerBaseDoc( - docBytes: ByteArray, + docResponse: ConvertResponse.Document, docId: DesignDocId, feedback: FeedbackImpl, ): GenericDocContent? { - val docStream = docBytes.inputStream() - val header = decodeHeader(docStream, docId, feedback) ?: return null + + val header = docResponse.header + feedback.documentDecodeSuccess(header.dcVersion, header.name, header.lastModified, docId) // Server sends content in the format of ServerFigmaDoc, which has additional data - val serverDoc = ServerFigmaDoc.parseDelimitedFrom(docStream) + // val serverDoc = ServerFigmaDoc.parseDelimitedFrom(docStream) + val serverDoc = docResponse.serverDoc serverDoc.errorsList?.forEach { feedback.documentUpdateWarnings(docId, it) } val content = serverDoc.figmaDoc - val imageSessionData = decodeImageSession(docStream) - feedback.documentDecodeSuccess(header.dcVersion, header.name, header.lastModified, docId) val viewMap = content.views() val variantViewMap = createVariantViewMap(viewMap) @@ -93,8 +94,7 @@ fun decodeServerBaseDoc( variantViewMap, variantPropertyMap, nodeIdMap, - imageSessionData.imageSessionData, - imageSessionData.imageSession, + docResponse.imageSessionJson, serverDoc.branchesList, serverDoc.projectFilesList, ) @@ -111,7 +111,9 @@ fun decodeDiskBaseDoc( val header = decodeHeader(docStream, docId, feedback) ?: return null val content = DesignComposeDefinition.parseDelimitedFrom(docStream) - val imageSessionData = decodeImageSession(docStream) + // Proto bytes are parsed to their immutable ByteString representation. It's just a ByteArray + // that's immutable, basically. + val imageSession = docStream.readBytes().toByteString() val viewMap = content.views() val variantMap = createVariantViewMap(viewMap) val variantPropertyMap = createVariantPropertyMap(viewMap) @@ -126,8 +128,7 @@ fun decodeDiskBaseDoc( variantMap, variantPropertyMap, nodeIdMap, - imageSessionData.imageSessionData, - imageSessionData.imageSession, + imageSession, ) } @@ -200,35 +201,3 @@ private fun decodeHeader( } return header } - -private data class ImageSession(val imageSessionData: ByteArray, var imageSession: String?) { - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (javaClass != other?.javaClass) return false - - other as ImageSession - - if (!imageSessionData.contentEquals(other.imageSessionData)) return false - if (imageSession != other.imageSession) return false - - return true - } - - override fun hashCode(): Int { - var result = imageSessionData.contentHashCode() - result = 31 * result + (imageSession?.hashCode() ?: 0) - return result - } -} - -private fun decodeImageSession(docStream: InputStream): ImageSession { - // The image session data is a JSON blob attached after the proto document content. - val imageSessionData = docStream.readBytes() - val imageSession = - if (imageSessionData.isNotEmpty()) { - String(imageSessionData, Charsets.UTF_8) - } else { - null - } - return ImageSession(imageSessionData, imageSession) -} diff --git a/crates/dc_jni/src/android_interface.rs b/crates/dc_jni/src/android_interface.rs index 7c3909cb8..b1e5fc260 100644 --- a/crates/dc_jni/src/android_interface.rs +++ b/crates/dc_jni/src/android_interface.rs @@ -13,5 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + include!(concat!(env!("OUT_DIR"), "/designcompose.live_update.rs")); pub mod convert_request; diff --git a/crates/dc_jni/src/android_interface/convert_request.rs b/crates/dc_jni/src/android_interface/convert_request.rs index 01dfe7c7f..b5ca1113d 100644 --- a/crates/dc_jni/src/android_interface/convert_request.rs +++ b/crates/dc_jni/src/android_interface/convert_request.rs @@ -27,7 +27,7 @@ pub fn fetch_doc( ) -> Result { let image_session: Option = { match &rq.image_session_json { - Some(json) => match serde_json::from_str(json.as_str()) { + Some(json) => match serde_json::from_slice(json) { Ok(session) => Some(session), Err(_) => None, }, @@ -85,7 +85,7 @@ pub fn fetch_doc( server_doc: Some(server_doc), // Return the image session as a JSON blob; we might want to encode this differently so we // can be more robust if there's corruption. - image_session_json: serde_json::to_string(&doc.image_session())?, + image_session_json: serde_json::to_vec(&doc.image_session())?, }, )), }) diff --git a/crates/dc_jni/src/android_interface/layout_node.rs b/crates/dc_jni/src/android_interface/layout_node.rs deleted file mode 100644 index 296d4b1dd..000000000 --- a/crates/dc_jni/src/android_interface/layout_node.rs +++ /dev/null @@ -1,120 +0,0 @@ -// // Copyright 2024 Google LLC -// // -// // Licensed under the Apache License, Version 2.0 (the "License"); -// // you may not use this file except in compliance with the License. -// // You may obtain a copy of the License at -// // -// // http://www.apache.org/licenses/LICENSE-2.0 -// // -// // Unless required by applicable law or agreed to in writing, software -// // distributed under the License is distributed on an "AS IS" BASIS, -// // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// // See the License for the specific language governing permissions and -// // limitations under the License. - -// use crate::android_interface::layout_changed_response::Layout; -// use crate::android_interface::{LayoutNode, LayoutChangedResponse, LayoutParentChildren, LayoutNodeList}; - - -// impl TryFrom for layout::layout_node::LayoutNode { -// type Error = dc_bundle::Error; - -// fn try_from(proto: LayoutNode) -> Result { -// Ok(layout::layout_node::LayoutNode { -// layout_id: proto.layout_id, -// parent_layout_id: proto.parent_layout_id, -// child_index: proto.child_index, -// style: proto -// .style -// .ok_or(dc_bundle::Error::MissingFieldError { field: "style".to_string() })?, -// name: proto.name, -// use_measure_func: proto.use_measure_func, -// fixed_width: proto.fixed_width, -// fixed_height: proto.fixed_height, -// }) -// } -// } - -// impl From for layout::layout_node::LayoutParentChildren { -// fn from(proto: LayoutParentChildren) -> Self { -// layout::layout_node::LayoutParentChildren { -// parent_layout_id: proto.parent_layout_id, -// child_layout_ids: proto.child_layout_ids, -// } -// } -// } - -// impl TryFrom for layout::layout_node::LayoutNodeList { -// type Error = dc_bundle::Error; - -// fn try_from(proto: LayoutNodeList) -> Result { -// Ok(layout::layout_node::LayoutNodeList { -// layout_nodes: { -// let mut layout_nodes = Vec::new(); -// for node in proto.layout_nodes { -// layout_nodes.push(node.try_into()?) -// } -// layout_nodes -// }, -// parent_children: proto -// .parent_children -// .into_iter() -// .map(layout::layout_node::LayoutParentChildren::from) -// .collect(), -// }) -// } -// } - -// impl From for LayoutChangedResponse { -// fn from(proto: layout::LayoutChangedResponse) -> Self { -// Self { -// layout_state: proto.layout_state, -// changed_layouts: proto -// .changed_layouts -// .into_iter() -// .map(|(key, value)| (key, value.into())) -// .collect(), -// } -// } -// } - -// impl From for layout::LayoutChangedResponse { -// fn from(proto: LayoutChangedResponse) -> Self { -// Self { -// layout_state: proto.layout_state, -// changed_layouts: proto -// .changed_layouts -// .into_iter() -// .map(|(key, value)| (key, value.into())) -// .collect(), -// } -// } -// } - -// impl From for layout::types::Layout { -// fn from(proto: Layout) -> Self { -// Self { -// order: proto.order, -// width: proto.width, -// height: proto.height, -// left: proto.left, -// top: proto.top, -// content_width: proto.content_width, -// content_height: proto.content_height, -// } -// } -// } - -// impl From for Layout { -// fn from(layout: layout::types::Layout) -> Self { -// Layout { -// order: layout.order, -// width: layout.width, -// height: layout.height, -// left: layout.left, -// top: layout.top, -// content_width: layout.content_width, -// content_height: layout.content_height, -// } -// } -// } diff --git a/crates/dc_jni/src/jni.rs b/crates/dc_jni/src/jni.rs index c77d1174b..ffb8cd93b 100644 --- a/crates/dc_jni/src/jni.rs +++ b/crates/dc_jni/src/jni.rs @@ -16,9 +16,7 @@ use std::ffi::c_void; use std::sync::{Arc, Mutex}; -use crate::android_interface::convert_request::fetch_doc; -use crate::android_interface::ConvertRequest; -use crate::android_interface::ConvertResponse; +use crate::android_interface::{convert_request::fetch_doc, ConvertRequest, ConvertResponse}; use crate::error::{throw_basic_exception, Error}; use crate::error_map::map_err_to_exception; use crate::layout_manager::{ @@ -98,6 +96,7 @@ fn jni_fetch_doc<'local>( return JObject::null().into(); } }; + let request: ConvertRequest = match ConvertRequest::decode(request_bytes).map_err(Error::from) { Ok(it) => it, Err(err) => { @@ -154,7 +153,7 @@ fn jni_fetch_doc_impl( } }; - bincode::serialize(&convert_result).map_err(|e| e.into()) + Ok(convert_result.encode_to_vec()) } #[allow(non_snake_case)] @@ -175,7 +174,7 @@ pub extern "system" fn JNI_OnLoad(vm: JavaVM, _: *mut c_void) -> jint { &[ jni::NativeMethod { name: "jniFetchDoc".into(), - sig: "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/designcompose/ProxyConfig;)[B".into(), + sig: "(Ljava/lang/String;Ljava/lang/String;[BLcom/android/designcompose/ProxyConfig;)[B".into(), fn_ptr: jni_fetch_doc as *mut c_void, }, jni::NativeMethod { diff --git a/crates/figma_import/src/document.rs b/crates/figma_import/src/document.rs index 28dec54bd..b4341667d 100644 --- a/crates/figma_import/src/document.rs +++ b/crates/figma_import/src/document.rs @@ -26,9 +26,9 @@ use crate::{ component_context::ComponentContext, error::Error, extended_layout_schema::ExtendedAutoLayout, - fetch::ProxyConfig, figma_schema, image_context::{ImageContext, ImageContextSession}, + proxy_config::ProxyConfig, transform_flexbox::create_component_flexbox, variable_utils::create_variable, }; diff --git a/crates/figma_import/src/image_context.rs b/crates/figma_import/src/image_context.rs index a9f66207e..ed4c5c01c 100644 --- a/crates/figma_import/src/image_context.rs +++ b/crates/figma_import/src/image_context.rs @@ -20,8 +20,8 @@ use std::{ }; use crate::error::Error; -use crate::fetch::ProxyConfig; use crate::figma_schema::{Paint, Transform}; +use crate::proxy_config::ProxyConfig; use dc_bundle::definition::EncodedImageMap; use image::DynamicImage; use serde::{Deserialize, Serialize}; diff --git a/crates/figma_import/src/lib.rs b/crates/figma_import/src/lib.rs index ff761e537..76acefaea 100644 --- a/crates/figma_import/src/lib.rs +++ b/crates/figma_import/src/lib.rs @@ -23,10 +23,10 @@ mod design_definition; mod document; mod error; mod extended_layout_schema; -mod fetch; mod figma_schema; mod image_context; pub mod meter_schema; +mod proxy_config; pub mod reaction_schema; pub mod tools; mod transform_flexbox; @@ -40,8 +40,8 @@ pub use design_definition::IgnoredImage; pub use design_definition::ServerFigmaDoc; pub use document::Document; pub use error::Error; -pub use fetch::ProxyConfig; pub use image_context::ImageContextSession; +pub use proxy_config::ProxyConfig; // Internal convenience pub use dc_bundle::definition::element::Color; diff --git a/crates/figma_import/src/fetch.rs b/crates/figma_import/src/proxy_config.rs similarity index 80% rename from crates/figma_import/src/fetch.rs rename to crates/figma_import/src/proxy_config.rs index 41a16b02b..627bd5bd5 100644 --- a/crates/figma_import/src/fetch.rs +++ b/crates/figma_import/src/proxy_config.rs @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,8 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -use serde::{Deserialize, Serialize}; - // Proxy configuration. #[derive(Debug, Clone)] pub enum ProxyConfig { @@ -21,9 +19,3 @@ pub enum ProxyConfig { HttpProxyConfig(String), None, } - -#[derive(Serialize, Deserialize)] -struct IgnoredImage<'r> { - node: &'r str, - images: Vec, -} diff --git a/crates/figma_import/src/tools/fetch.rs b/crates/figma_import/src/tools/fetch.rs index ab37916e0..77e04e289 100644 --- a/crates/figma_import/src/tools/fetch.rs +++ b/crates/figma_import/src/tools/fetch.rs @@ -15,7 +15,7 @@ use std::env; use std::io::{Error, ErrorKind}; -use crate::{fetch::ProxyConfig, Document}; +use crate::{proxy_config::ProxyConfig, Document}; /// Utility program to fetch a doc and serialize it to file use clap::Parser; use dc_bundle::definition::DesignComposeDefinitionHeader; diff --git a/crates/figma_import/src/tools/fetch_layout.rs b/crates/figma_import/src/tools/fetch_layout.rs index 27417d590..b8599da79 100644 --- a/crates/figma_import/src/tools/fetch_layout.rs +++ b/crates/figma_import/src/tools/fetch_layout.rs @@ -12,8 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use crate::fetch::ProxyConfig; -use crate::Document; +use crate::{proxy_config::ProxyConfig, Document}; /// Utility program to fetch a doc and serialize it to file use clap::Parser; use dc_bundle::definition::element::dimension_proto::Dimension; diff --git a/crates/figma_import/tests/layout-unit-tests.dcf b/crates/figma_import/tests/layout-unit-tests.dcf index 2779526ed6b3e180d058d9adca3967331323811f..306448a9984373b26931d46c1ca6457be6c2d9f8 100644 GIT binary patch delta 533 zcmXw#O-Pe*0LFXXchmVgb?y73eY)i~H|M*yRwK~F!qL*QTy5lG%7`c@i!P;?MV>n3 z`cq&KUF$d=L2uoH4pH5Ppy%=+dWtU9i_qx@&*9s=y4sIzKsR6DE@0pa;!eH*y7y=ug)nU&E0BR&F0giJSrL?4*f3i zu8jnv$N4>`RE&bO;u1PI~|=zs)QI zHjZC^2C)lxF14}Za1n!cV*RZ~DScdLgbgn3k(lW>+P_Zy&t zzdTVmV~RbQ(ECJw+{0M?ZJ?9eY8mRDD%YJ%ne&C!(n_|FFU~8QDxY^X0pREOBw(XA z>9av%yt~x~J7;=l0S90Atw~}~YJ!_Lqz1sld-f&3%O8#nh^b5v)huN+poWhpXW=@n zR3uZ$9-YUg0`XzUBet>^#Fc3UwY)X`0I1`)tc5eo%~())WWInTzmv;18^m^`!lCTR zE*I}aVn8LIMehT$2*&=Piowohh=?9WFDLW}(8s&ycOi_C5L#FmX$M;QWb`RS$mc^B zb)OrEGox7-CivDr1SI)8U;-&-f)^!pbF2B9gdYBEDMM5Zgiz1eKqH`XY%mA8L2+6s zy?QDkzMHe+VVdHg#wVtXejyL5mA?O49Gkfl+ixsDONhp?FwSvk y%nw9(eY^xj`DNk}%5yDfJKX31+W87Q|5`NXRYQ62a8+=x%_?&8V|y94@TtEuhMk%K diff --git a/crates/layout/src/android_interface.rs b/crates/layout/src/android_interface.rs index 3e152f69c..2741e8509 100644 --- a/crates/layout/src/android_interface.rs +++ b/crates/layout/src/android_interface.rs @@ -1,3 +1,17 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + use std::collections::HashMap; include!(concat!(env!("OUT_DIR"), "/designcompose.layout_interface.rs")); diff --git a/crates/layout/src/layout_manager.rs b/crates/layout/src/layout_manager.rs index 87912f889..2b140ddf4 100644 --- a/crates/layout/src/layout_manager.rs +++ b/crates/layout/src/layout_manager.rs @@ -329,11 +329,7 @@ impl LayoutManager { if compute_layout { self.compute_node_layout(root_layout_id) } else { - LayoutChangedResponse { - layout_state: self.layout_state, - changed_layouts: HashMap::new(), - } - // LayoutChangedResponse::unchanged(self.layout_state) + LayoutChangedResponse::unchanged(self.layout_state) } } diff --git a/designcompose/src/androidTest/kotlin/com/android/designcompose/figmaIntegrationTests/JniFetchTests.kt b/designcompose/src/androidTest/kotlin/com/android/designcompose/figmaIntegrationTests/JniFetchTests.kt index a6e4020d5..554afbd90 100644 --- a/designcompose/src/androidTest/kotlin/com/android/designcompose/figmaIntegrationTests/JniFetchTests.kt +++ b/designcompose/src/androidTest/kotlin/com/android/designcompose/figmaIntegrationTests/JniFetchTests.kt @@ -20,13 +20,11 @@ import androidx.test.platform.app.InstrumentationRegistry import com.android.designcompose.AccessDeniedException import com.android.designcompose.Feedback import com.android.designcompose.FigmaFileNotFoundException -import com.android.designcompose.Jni -import com.android.designcompose.LiveUpdate -import com.android.designcompose.ProxyConfig import com.android.designcompose.common.DesignDocId import com.android.designcompose.common.DocumentServerParams -import com.android.designcompose.constructPostJson import com.android.designcompose.decodeServerDoc +import com.android.designcompose.fetchDocument +import com.android.designcompose.live_update.documentOrNull import io.mockk.mockkObject import kotlin.test.assertEquals import kotlin.test.assertFailsWith @@ -37,7 +35,6 @@ import org.junit.Test const val smallDocID = "pxVlixodJqZL95zo2RzTHl" // HelloWorld Doc const val largeDocID = "RfGl9SWnBEvdg8T1Ex6ZAR" // Battleship Doc const val veryLargeDocID = "f5zC8J6uGPzsWLUeE4AW4D" // Cluster Doc -val dummyFigmaTokenJson = constructPostJson("NOT_A_FIGMA_TOKEN", null, DocumentServerParams()) /** * Jni fetch tests @@ -51,30 +48,22 @@ class JniFetchTests { private val actualFigmaToken: String? = InstrumentationRegistry.getArguments().getString("FIGMA_ACCESS_TOKEN") - private lateinit var firstFetchJson: String @Before fun setup() { assertNotNull(actualFigmaToken, "Cannot run this test without Figma Access Token") - firstFetchJson = constructPostJson(actualFigmaToken, null, DocumentServerParams()) - mockkObject(Feedback) } - @Test - fun invalidDocId() { - assertFailsWith { - Jni.jniFetchDoc("InvalidDocID", "", firstFetchJson, ProxyConfig()) - } - } - private fun testFetch(docID: String) { - with(LiveUpdate.fetchDocBytes(DesignDocId(docID), firstFetchJson, ProxyConfig())) { - assertNotNull(this) - val decodedDoc = decodeServerDoc(this, null, DesignDocId(docID), null, Feedback) - assertNotNull(decodedDoc) - assertEquals(decodedDoc.c.docId.id, docID) - } + val response = + fetchDocument(actualFigmaToken!!, DocumentServerParams(), null, DesignDocId(docID)) + + assertNotNull(response) + val decodedDoc = + decodeServerDoc(response.documentOrNull!!, null, DesignDocId(docID), null, Feedback) + assertNotNull(decodedDoc) + assertEquals(decodedDoc.c.docId.id, docID) } @Test @@ -91,11 +80,28 @@ class JniFetchTests { // fun veryLargeFetch() { // testFetch(veryLargeDocID) // } - // + @Test fun invalidToken() { assertFailsWith(AccessDeniedException::class) { - Jni.jniFetchDoc("DummyDocId", "", dummyFigmaTokenJson, ProxyConfig()) + fetchDocument( + "NOT_A_FIGMA_TOKEN", + DocumentServerParams(), + null, + DesignDocId(smallDocID), + ) + } + } + + @Test + fun invalidDocId() { + assertFailsWith { + fetchDocument( + actualFigmaToken!!, + DocumentServerParams(), + null, + DesignDocId("NOT_A_DOC"), + ) } } } diff --git a/designcompose/src/main/assets/figma/DesignSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf b/designcompose/src/main/assets/figma/DesignSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf index d21c8ce50a804cd4cac225220431618af604aa69..61c81cccc1ae132a34ba7d27509f785ba3509021 100644 GIT binary patch delta 7799 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 delta 7295 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 HuQC4zQ<1Ya diff --git a/designcompose/src/main/java/com/android/designcompose/DocContent.kt b/designcompose/src/main/java/com/android/designcompose/DocContent.kt index 74f99b06d..5398cf592 100644 --- a/designcompose/src/main/java/com/android/designcompose/DocContent.kt +++ b/designcompose/src/main/java/com/android/designcompose/DocContent.kt @@ -24,6 +24,7 @@ import com.android.designcompose.common.FeedbackImpl import com.android.designcompose.common.GenericDocContent import com.android.designcompose.common.decodeDiskBaseDoc import com.android.designcompose.common.decodeServerBaseDoc +import com.android.designcompose.live_update.ConvertResponse import com.google.protobuf.kotlin.get import java.io.File import java.io.InputStream @@ -104,7 +105,7 @@ fun decodeDiskDoc( } fun decodeServerDoc( - docBytes: ByteArray, + docResponse: ConvertResponse.Document, previousDoc: DocContent?, docId: DesignDocId, save: File?, @@ -112,7 +113,7 @@ fun decodeServerDoc( ): DocContent? { // We must initialize the fully-decoded DocContent, which decodes images before // saving it to disk - val baseDoc = decodeServerBaseDoc(docBytes, docId, feedback) ?: return null + val baseDoc = decodeServerBaseDoc(docResponse, docId, feedback) ?: return null val fullDoc = DocContent(baseDoc, previousDoc) save?.let { fullDoc.c.save(save, Feedback) } return fullDoc diff --git a/designcompose/src/main/java/com/android/designcompose/DocFetcher.kt b/designcompose/src/main/java/com/android/designcompose/DocFetcher.kt deleted file mode 100644 index 6ac37dc94..000000000 --- a/designcompose/src/main/java/com/android/designcompose/DocFetcher.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.designcompose - -import com.android.designcompose.common.DocumentServerParams -import com.android.designcompose.common.GenericDocContent - -/* - * Constructs the Json request to Figma for the document update - */ -fun constructPostJson( - figmaApiKey: String, - previousDoc: GenericDocContent?, - params: DocumentServerParams, - first: Boolean = true, -): String { - val lastModified = previousDoc?.header?.lastModified - val version = previousDoc?.header?.responseVersion - val imageSession = previousDoc?.imageSession - - var postData = "{ " - postData += "\"figma_api_key\": \"$figmaApiKey\"," - - if (!first && lastModified != null) { // Force an update on the first run - postData += "\"last_modified\": \"$lastModified\", " - } - if (version != null) { - postData += "\"version\": \"$version\", " - } - if (imageSession != null) { - postData += "\"image_session\": $imageSession, " - } else { - postData += "\"image_session\": {}, " - } - - postData += params.toJsonSnippet() - - postData += "}" - return postData -} diff --git a/designcompose/src/main/java/com/android/designcompose/DocServer.kt b/designcompose/src/main/java/com/android/designcompose/DocServer.kt index 374e67652..2dfc500d4 100644 --- a/designcompose/src/main/java/com/android/designcompose/DocServer.kt +++ b/designcompose/src/main/java/com/android/designcompose/DocServer.kt @@ -37,6 +37,9 @@ import androidx.tracing.Trace.beginSection import androidx.tracing.Trace.endSection import com.android.designcompose.common.DesignDocId import com.android.designcompose.common.DocumentServerParams +import com.android.designcompose.live_update.ConvertResponse +import com.android.designcompose.live_update.convertRequest +import com.android.designcompose.live_update.figma.ignoredImage import com.android.designcompose.utils.validateFigmaDocId import java.io.BufferedInputStream import java.io.File @@ -337,12 +340,10 @@ internal fun DocServer.fetchDocuments(firstFetch: Boolean): Boolean { } val saveFile = synchronized(subscriptions) { subscriptions[id]?.saveFile } try { - val postData = constructPostJson(figmaApiKey, previousDoc?.c, params, firstFetch) - val documentData: ByteArray? = LiveUpdate.fetchDocBytes(id, postData, proxyConfig) + val response = fetchDocument(figmaApiKey, params, previousDoc, id, proxyConfig) - if (documentData != null) { - Feedback.documentDecodeReadBytes(documentData.size, id) - val doc = decodeServerDoc(documentData, previousDoc, id, saveFile, Feedback) + if (response.hasDocument()) { + val doc = decodeServerDoc(response.document, previousDoc, id, saveFile, Feedback) if (doc == null) { Feedback.documentDecodeError(id) Log.e(TAG, "Error decoding doc.") @@ -406,6 +407,38 @@ internal fun DocServer.fetchDocuments(firstFetch: Boolean): Boolean { return true } +internal fun fetchDocument( + figmaApiKey: String, + params: DocumentServerParams, + previousDoc: DocContent?, + id: DesignDocId, + proxyConfig: ProxyConfig = ProxyConfig(), +): ConvertResponse { + + // Construct the Conversion Request + val request = convertRequest { + this.figmaApiKey = figmaApiKey + params.nodeQueries?.let { this.queries.addAll(it) } + params.ignoredImages?.map { (pNode, pImages) -> + this.ignoredImages.add( + ignoredImage { + this.node = pNode + this.images.addAll(pImages.asIterable()) + } + ) + } + previousDoc?.c?.header?.lastModified?.let { this.lastModified = it } + previousDoc?.c?.header?.responseVersion?.let { this.version = it } + previousDoc?.c?.imageSession?.let { this.imageSessionJson = it } + ?: this.clearImageSessionJson() + } + + val serializedResponse: ByteArray = + Jni.tracedJnifetchdoc(id.id, id.versionId, request.toByteArray(), proxyConfig) + val response = ConvertResponse.parseFrom(serializedResponse) + return response +} + internal fun DocServer.subscribe( doc: LiveDocSubscription, serverParams: DocumentServerParams, diff --git a/designcompose/src/main/java/com/android/designcompose/Jni.kt b/designcompose/src/main/java/com/android/designcompose/Jni.kt index e11eea2ed..5e769ca66 100644 --- a/designcompose/src/main/java/com/android/designcompose/Jni.kt +++ b/designcompose/src/main/java/com/android/designcompose/Jni.kt @@ -42,13 +42,11 @@ internal object Jni { fun tracedJnifetchdoc( docId: String, versionId: String, - requestJson: String, + request: ByteArray, proxyConfig: ProxyConfig, ): ByteArray { lateinit var result: ByteArray - trace(DCTraces.JNIFETCHDOC) { - result = jniFetchDoc(docId, versionId, requestJson, proxyConfig) - } + trace(DCTraces.JNIFETCHDOC) { result = jniFetchDoc(docId, versionId, request, proxyConfig) } return result } @@ -56,7 +54,7 @@ internal object Jni { external fun jniFetchDoc( docId: String, versionId: String, - requestJson: String, + request: ByteArray, proxyConfig: ProxyConfig, ): ByteArray diff --git a/designcompose/src/main/java/com/android/designcompose/Layout.kt b/designcompose/src/main/java/com/android/designcompose/Layout.kt index e1b92e393..d10d1d90a 100644 --- a/designcompose/src/main/java/com/android/designcompose/Layout.kt +++ b/designcompose/src/main/java/com/android/designcompose/Layout.kt @@ -19,7 +19,6 @@ package com.android.designcompose import androidx.compose.ui.Alignment import androidx.compose.ui.text.ParagraphIntrinsics import androidx.compose.ui.unit.Density -import com.android.designcompose.android_interface.LayoutChangedResponse import com.android.designcompose.definition.element.DimensionProto import com.android.designcompose.definition.element.DimensionRect import com.android.designcompose.definition.element.Size @@ -33,6 +32,7 @@ import com.android.designcompose.definition.layout.PositionType import com.android.designcompose.definition.modifier.LayoutTransform import com.android.designcompose.definition.view.View import com.android.designcompose.definition.view.ViewStyle +import com.android.designcompose.layout_interface.Layout import java.util.Optional import kotlin.math.roundToInt @@ -193,10 +193,10 @@ internal fun calcLayoutInfo(view: View, style: ViewStyle): SimplifiedLayoutInfo } } -fun LayoutChangedResponse.Layout.width() = this.width.roundToInt() +fun Layout.width() = this.width.roundToInt() -fun LayoutChangedResponse.Layout.height() = this.height.roundToInt() +fun Layout.height() = this.height.roundToInt() -fun LayoutChangedResponse.Layout.left() = this.left.roundToInt() +fun Layout.left() = this.left.roundToInt() -fun LayoutChangedResponse.Layout.top() = this.top.roundToInt() +fun Layout.top() = this.top.roundToInt() diff --git a/designcompose/src/main/java/com/android/designcompose/LiveUpdate.kt b/designcompose/src/main/java/com/android/designcompose/LiveUpdate.kt deleted file mode 100644 index 14d036882..000000000 --- a/designcompose/src/main/java/com/android/designcompose/LiveUpdate.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.designcompose - -import com.android.designcompose.common.DesignDocId -import com.android.designcompose.serdegen.ConvertResponse -import com.novi.bincode.BincodeDeserializer - -internal object LiveUpdate { - fun fetchDocBytes( - docId: DesignDocId, - requestJson: String, - proxyConfig: ProxyConfig, - ): ByteArray? { - val serializedResponse: ByteArray = - Jni.tracedJnifetchdoc(docId.id, docId.versionId, requestJson, proxyConfig) - val deserializer = BincodeDeserializer(serializedResponse) - val convResp = ConvertResponse.deserialize(deserializer) - if (convResp is ConvertResponse.Document) return convResp.value.toByteArray() - return null - } -} diff --git a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshAnimate.kt b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshAnimate.kt index 522609924..36459ae1a 100644 --- a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshAnimate.kt +++ b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshAnimate.kt @@ -23,8 +23,6 @@ import androidx.compose.animation.core.VectorConverter import androidx.compose.ui.geometry.Size import com.android.designcompose.AnimatedAction import com.android.designcompose.VariableState -import com.android.designcompose.android_interface.LayoutChangedResponse -import com.android.designcompose.android_interface.LayoutChangedResponseKt.layout import com.android.designcompose.decompose import com.android.designcompose.definition.element.ViewShape import com.android.designcompose.definition.element.ViewShapeKt.vectorArc @@ -38,6 +36,8 @@ import com.android.designcompose.definition.view.shapeOrNull import com.android.designcompose.definition.view.textOrNull import com.android.designcompose.definition.view.transformOrNull import com.android.designcompose.definition.view.viewData +import com.android.designcompose.layout_interface.Layout +import com.android.designcompose.layout_interface.layout import com.android.designcompose.toLayoutTransform import com.android.designcompose.utils.fixedHeight import com.android.designcompose.utils.fixedWidth @@ -90,8 +90,8 @@ internal abstract class SquooshAnimatedItem( value: Float, interpolatedWidth: Float, interpolatedHeight: Float, - from: LayoutChangedResponse.Layout, - to: LayoutChangedResponse.Layout, + from: Layout, + to: Layout, ) { target.overrideLayoutSize = true target.computedLayout = layout { diff --git a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshLayout.kt b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshLayout.kt index 9277e215a..143181ff5 100644 --- a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshLayout.kt +++ b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshLayout.kt @@ -20,13 +20,14 @@ import android.util.Log import androidx.datastore.preferences.protobuf.InvalidProtocolBufferException import com.android.designcompose.Jni import com.android.designcompose.LayoutManager -import com.android.designcompose.android_interface.LayoutChangedResponse -import com.android.designcompose.android_interface.LayoutNodeList -import com.android.designcompose.android_interface.layoutNodeList -import com.android.designcompose.definition.layout.LayoutNode -import com.android.designcompose.definition.layout.LayoutParentChildren -import com.android.designcompose.definition.layout.layoutNode -import com.android.designcompose.definition.layout.layoutParentChildren +import com.android.designcompose.layout_interface.Layout +import com.android.designcompose.layout_interface.LayoutChangedResponse +import com.android.designcompose.layout_interface.LayoutNode +import com.android.designcompose.layout_interface.LayoutNodeList +import com.android.designcompose.layout_interface.LayoutParentChildren +import com.android.designcompose.layout_interface.layoutNode +import com.android.designcompose.layout_interface.layoutNodeList +import com.android.designcompose.layout_interface.layoutParentChildren internal class SquooshLayoutManager(val id: Int) @@ -48,7 +49,7 @@ internal object SquooshLayout { manager: SquooshLayoutManager, rootLayoutId: Int, layoutNodeList: LayoutNodeList, - ): Map { + ): Map { val serializedNodes = layoutNodeList.toByteArray() val response = Jni.jniAddNodes(manager.id, rootLayoutId, serializedNodes) ?: return emptyMap() @@ -258,7 +259,7 @@ private fun updateLayoutTree( /// so that the nodes can be used for presentation or interaction (hit testing). private fun populateComputedLayout( resolvedNode: SquooshResolvedNode, - layoutValueCache: HashMap, + layoutValueCache: HashMap, ) { val layoutId = resolvedNode.layoutId val layoutValue = layoutValueCache[layoutId] @@ -280,7 +281,7 @@ internal fun layoutTree( manager: SquooshLayoutManager, removalNodes: HashSet, layoutCache: HashMap, - layoutValueCache: HashMap, + layoutValueCache: HashMap, ) { // Remove any nodes that are no longer needed in this iteration for (layoutId in removalNodes) { diff --git a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshRender.kt b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshRender.kt index 627c2a623..dec066cd7 100644 --- a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshRender.kt +++ b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshRender.kt @@ -41,7 +41,6 @@ import com.android.designcompose.CustomizationContext import com.android.designcompose.DocContent import com.android.designcompose.TextMeasureData import com.android.designcompose.VariableState -import com.android.designcompose.android_interface.LayoutChangedResponse import com.android.designcompose.definition.modifier.TextAlignVertical import com.android.designcompose.definition.modifier.TextOverflow import com.android.designcompose.definition.view.ViewStyle @@ -50,6 +49,7 @@ import com.android.designcompose.definition.view.textColorOrNull import com.android.designcompose.definition.view.transformOrNull import com.android.designcompose.getBrush import com.android.designcompose.getBrushFunction +import com.android.designcompose.layout_interface.Layout import com.android.designcompose.squooshShapeRender import com.android.designcompose.utils.asBrush import com.android.designcompose.utils.asComposeBlendMode @@ -274,7 +274,7 @@ private fun squooshTextRender( density: Density, textInfo: TextMeasureData, style: ViewStyle, - computedLayout: LayoutChangedResponse.Layout, + computedLayout: Layout, customizations: CustomizationContext, nodeName: String, variableState: VariableState, diff --git a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshResolvedNode.kt b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshResolvedNode.kt index 604eb8607..4da27848d 100644 --- a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshResolvedNode.kt +++ b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshResolvedNode.kt @@ -18,9 +18,9 @@ package com.android.designcompose.squoosh import android.graphics.PointF import com.android.designcompose.TextMeasureData -import com.android.designcompose.android_interface.LayoutChangedResponse import com.android.designcompose.definition.view.View import com.android.designcompose.definition.view.ViewStyle +import com.android.designcompose.layout_interface.Layout /// A SquooshResolvedNode represents a design element from the DesignCompose tree after variants /// and other customizations have been applied. The SquooshResolvedNode tree is handed to layout @@ -42,7 +42,7 @@ internal class SquooshResolvedNode( var firstChild: SquooshResolvedNode? = null, var nextSibling: SquooshResolvedNode? = null, var parent: SquooshResolvedNode? = null, - var computedLayout: LayoutChangedResponse.Layout? = null, + var computedLayout: Layout? = null, // overrideLayoutSize is set to true when we want the renderer to use the computed // layout size instead of any other size it might calculate. var overrideLayoutSize: Boolean = false, diff --git a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshRoot.kt b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshRoot.kt index 5ee93643e..ef8ca352c 100644 --- a/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshRoot.kt +++ b/designcompose/src/main/java/com/android/designcompose/squoosh/SquooshRoot.kt @@ -79,7 +79,6 @@ import com.android.designcompose.LiveUpdateMode import com.android.designcompose.LocalDesignDocSettings import com.android.designcompose.LocalVariableState import com.android.designcompose.VariableState -import com.android.designcompose.android_interface.LayoutChangedResponse import com.android.designcompose.branches import com.android.designcompose.clonedWithAnimatedActionsApplied import com.android.designcompose.common.DesignDocId @@ -95,6 +94,7 @@ import com.android.designcompose.getKey import com.android.designcompose.getOpenLinkCallback import com.android.designcompose.getScrollCallbacks import com.android.designcompose.getTapCallback +import com.android.designcompose.layout_interface.Layout import com.android.designcompose.registerOpenLinkCallback import com.android.designcompose.rootNode import com.android.designcompose.rootOverlays @@ -302,7 +302,7 @@ fun SquooshRoot( val layoutManager = remember(docId) { SquooshLayout.newLayoutManager() } val layoutIdAllocator = remember(docId) { SquooshLayoutIdAllocator() } val layoutCache = remember(docId) { HashMap() } - val layoutValueCache = remember(docId) { HashMap() } + val layoutValueCache = remember(docId) { HashMap() } val keyEventTracker = remember(docId, rootNodeQuery) { KeyEventTracker() } DisposableEffect(docId, rootNodeQuery) { KeyInjectManager.addTracker(keyEventTracker) @@ -840,7 +840,7 @@ private fun squooshLayoutMeasurePolicy( transitionRoot: SquooshResolvedNode?, transitionRootRemovalNodes: HashSet?, layoutCache: HashMap, - layoutValueCache: HashMap, + layoutValueCache: HashMap, layoutManager: SquooshLayoutManager, animationJob: AnimationValueHolder, animPlayTimeNanosState: MutableState>, diff --git a/designcompose/src/testDebug/res/raw/raw_resource_test_hello_world_doc b/designcompose/src/testDebug/res/raw/raw_resource_test_hello_world_doc index 62d5d5b74418f9c8ab83de23084c0700b8cd6abf..70c7f996ede44b144e5efc40ef16ec921a3a73de 100644 GIT binary patch delta 47 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 Yf5qqBw|m@QKj*l3toFFT--|2$8-?iJBme*a delta 7627 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 CfI~3= diff --git a/integration-tests/validation/src/main/assets/figma/DialsGaugesTestDoc_lZj6E9GtIQQE4HNLpzgETw.dcf b/integration-tests/validation/src/main/assets/figma/DialsGaugesTestDoc_lZj6E9GtIQQE4HNLpzgETw.dcf index 81aacfee2dfdc7cebb9f0b88c7929f14722e8d3d..6e80c68b4a2eaf67bd47d072061fbc8440067c26 100644 GIT binary patch delta 3711 zcmeHJ`B&3d7C-mqDDM$GV-Z`$VTO8oY`=_0+=U>8~HQunoVvrcNKQ)wM5c2m*LJi5@o!2ZM!-}Cvt&%5uw zdq3a%?)$cmgtd-@&CO%e!y_bxq>fQ2V-%WPNvT)H>s3-g^cGQ-Z z)XbbBDYXiXQmfTUnmCn0rIU0WbEAAkiBs`3qq;;1@C>8v1{>fzjBX??0UTuHN{I)2 zm(gaU2Jk&b@0y%|?=woU_<|~#{F9%Z#H)N2DH`9vqU-o? zMtceq06%3ka=!@RKa7eNi#4Ay+UZy%#|w<6R3ripF`8dl4EQ;t*Qy%j_yr^N14)1v z88!a71n|F%g3VVZ;w46BR@ni+WHkH1Wq_9%b+%anhZ$XJ_X1vFI2e_Kk^&J8q;?)0&z=t`tzj_Gp5l*?g1U||s zx~C8DF;3@qi}^L2o`3x#zz$*e<`aNxInC_-4$#MGMt=}+9jBWE8v!5Zv|+E{*K=CC z|07O17a_as>6!!C+WS=I=a62dC1@WD` zIQ0w-0=~d$%@^xs_@Z#}Wg6g1oR(jar zFAJZjRH~JFm9KYFG?mFFAns%2ozMsJ{iEkpsn+S0qshinS%@0&0HZBzFUa2>o79NV zX3_f4b$|!OX$xxyJj7_%q*#<6{?SOSS4#eqAwpf*B9Xyv zF+R@eoj*2;6hx6I?Jz+b7bk>?iiFq|Y3|Zglea0UBBLOsC8OSLT&nd}t21+rrZmYa zvl0lWni9FwS?jw4~Z>b?L?G1?3&63lRMj7 z7L%>Xt;>_VsRp&PA=y)2qbtqKo0loMY=-4k7NsSBna4aYD?dY#W@swOGACD>9o6-X zsupd2X^C0Yu%O=JaMq?fOeHpNiq%lim^{y5%1v=PD?H@|4qvP)h$lHsR*%d5Ysh^` z8^lwh<>|)d{x#%&DItib#mzS7toXI#RC(WJ@b^rI#p9jjmUou6&KV#c40O(rW&dtm c@LMjpzbQfXz_`w1Iv3ueE7MR^G_$bz|3<~|)Bpeg delta 3689 zcmeHJ`*%}S7G8Ttu{Px#D0D$#5Y(k>>9Qp^@0PNF(D#d^uMjLSNt@IrP1-bV+Ju23 z1%Z*ubfOfrU=;PsZgrpBq>f(7bvAfl|E6eoHK4ja=Ep_H_7TLos?#+ zEwlR`8KsmoiUf^XBZ<34Qt4Hy=4lf`U1ulaCPp8hO@zqJEP9wEX~ZC*YfYnR@;Mja z7Dlb-;}G9sbmBrc;8sRW7b^hU8TEgD2yh#t17943$hTSa1EN-wD24i(VnUP8aq9f4 z7;rnI5trf-cQBg%?Mc9$jQC|y-@$0%_lF>|^S^a^QP+5q>n z@JJaP1ALc-&))}bz-|`K8U{YV11#MAz}?JyEIj!^2ml^r;jNKS1ovxoO0BwO!Z?U; zn4zr?+BCsrjkewr$W=S_YP~6|KGkCN8I!X-ih50%&RCZ{Q=eQ{H`D8rY?+I4>(YGA zDy6eJBal(xpFJm4G6viUGj)zsg~Q-3bJnG}E36sr@)?Tq+)|f1nC7vSSoIE5g*v6E z#6Me^nAZPao+_uRFsC%A_Nsz;wZ3enKhtYYwOMNlRmpV$YjVEB>@D}(3T^eCQoTW& z;|-=i<8tQvsx1l)c=|{o_+b`)GI~hxUq$eU7$Nu(7XB^<#98$| z3m+W=eK0n%r&AUw_gLNb#7BKK)-rqa;Z9k^QP$y80v=@ z5C{AHT9BW-d(tVjibTDNU}7qS9*r1_2 zCyW;VMl9znqrDTR0Dj8o=0i5XbBu~73Ep`|oevkwu~+nwxaoiw80E#60Di_OJUJl8 zi;R?041k|A@+a8=|IVm)>JP*43r44tivYi5^h9bk;8)^+Ps;}Un$hKSFW@Cc^D^fG ze#2;ARz2XijC46m0KXIK$Q5{*(KMsL?-?C53H%46w0wbAL?0{=c$LwtB7uF3J~Ruw zCOVHr;17(>%~=Zgqma3{3-F(eV&`=LUT5^dd=dYP(Ne3x8;p`lME)kDtED2oB|eiw z;B7|ppAp#4XpB?fzZso!3B1E-xqCCxC8ygU#_eHe1X%P=M8|XIc->#2KWa~mzt^on>krlKZW>5PRpC$ z0}OG>3RwYPN#dW~qBYdB3^EAlOz+SZBuT27^}cmUUNI@2mP^~=IHY}f+$ z3a8?>_W@fuJ@)!+!1bIOHi}Nafp@++U52l6GHmfeR2z?u7}&j%Ry$w|a<0D$q3ZTn ze2r66`x+U(E(X|<3AmAycc<6@Z*Y3IL%hhFoHQgBu!+;HT|%JEoVvSA5Vd7+M4fuT z2K9DiKq$CpIKCyM*dr>oa?08JFk(BWs(nuj3&iQo{sTA^xXboD`?-njKC_ zr=ON#mzd|wHo!2aw4QAcwR^BCK_T4Elk~(VtDt3fEc|xJb=-5;vAk_OhzrAQ<7Igd f4GDhF1#byXku4a~c~IxM_sCAqm_PrKxeNaTU7-g0 diff --git a/integration-tests/validation/src/main/assets/figma/GridWidgetTestDoc_OBhNItd9i9J2LwVYuLxEIx.dcf b/integration-tests/validation/src/main/assets/figma/GridWidgetTestDoc_OBhNItd9i9J2LwVYuLxEIx.dcf index 415de926d287dd1444b77d78c1714b27a134396c..66ac1a5e3921dbe5f9c7a063ec48ccaebfab9927 100644 GIT binary patch literal 240267 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 C@(iE= diff --git a/integration-tests/validation/src/main/assets/figma/InteractionTestDoc_8Zg9viyjYTnyN29pbkR1CE.dcf b/integration-tests/validation/src/main/assets/figma/InteractionTestDoc_8Zg9viyjYTnyN29pbkR1CE.dcf index a1134267dafa1cabeb13ed9db40a15cd4b88b7d1..863e3c249a36a590e94146f82f16113d8287c041 100644 GIT binary patch delta 5955 zcmZ8ld7Mti(*9MAG3Rt2Vvg5GWGvaq5bwU=<})`WL>97qA{+T~v*?u|9julRn^_qPe1ikUtTOPFP8aLpYXg< zJ-x+8Jvw~y?t48tef&}FS37j?(fy&yUQfs!42QjuNXQonxIN*Je{@!cYx845boxib zus6^!;P;p-9@B0JDqaC0z?*`MRWJnbmY}h#VLKYPg;}XZ)YNCU9t%~~)NvuOSFM9g zaYvYG(ILBaQ>;f1tcMwh*^<_8gyDewB|ZNwl%O#{CSnAf7~N_5X1EVA`LAE7TZKKC!f*H)P&Q)xMR{Iry*Yme&UGJ4r)oKmpj#6{3mD1-(;ruv9%tPEL zX#RTS+-wpQ-iTY#_%=CLIGUU6@2~=IQ_!gIc`^9Cpl7#oK)E>{(C?-%SHmVWwj_N0 z?lNa{{YPwKoor#^7{lhY)>2iUdj(wM^<-*25p$@njW_7Uo%kt8+lc4bty<-F0NcL@ zE8_%%TI}Jqx<(~E{eHiht!t~~axc8eIh6Fa4{`v%k@Tw{#)B&-B{54N;5VW-PPGNshS>Q={0%)`pSh&Gc1TibH7Eo;EGeft3GbAXty`fF8R-ey`QKXAjyn6fyu0>U4e>@H~f-!_n1P z2b$Ngn~Z=Pcvz>ujdW~|ByD0y`y?Ok2mD#5k)vS+;!&NR9SfrYOLaOp&T%=GaPhf` zFYYs7H+T+G?b8MDl0CBum{?%YiYn|=ZX#o7`Am2P?5WkDp53+`4-Pe`OFI|_>B!ee)(z^g>_moa~A2~Ds5}!HXizROSDyUId+6_RS z)?>8ei`d8JW2UvPcrTsp4hsQ))oEf+m;mxj+=g#P%tqQ%K8G~B_IQ|Mtq-Nze`|&= zJFfzSsmJH=Dd1V1e(MEuz;&l`0v-Oa+q_s=n{KEN{s@7b5xXem~g>1zrQ(ASo~n)-rQQx;g_!GIK~8Gz;c~>zpgG%plYFVVAZ*P~~wB z87>s`{CI4Tf{O(8DRB5^u^@dCZbPFej>sVMVvNtdVAq*~&FqvHm{Gr%RP_aXgZU=L zy#8RsZk2&mRM*d61^d)XSQWQOy8RMP1pARb>@mrpa3A~-mmptJQcQ(jG2 zhwq*;wR{q}0{vUiMYpr-KL!2EizO)kN(Ql8jfEbxCxBdlt_eC3#4do>g>~q1E$SA= zJz#g4!kaoGss9w5#n(epooUFtbh}j|-+_qNywFO^lSSPEAV$R!6^PjBlQ3k}N=Z}a zVGtVmiMkgllWS{psvAd3buIM(8e@_s{<}0{^?TA`5xYrK22VzV2ds+^r(5-_RYG z&Aoa>WhuO_X7Y~3HM3(AfE*42Yc%cbC-x_X@0`Y&CbT*3dZ>FVri z{(oIpg=^URM$$VH_fECE8#D2yuG(!Zmtx#XScKfs)m;5PQ{IlVM95?PzM_N5-#i}i zj;`u#TMaTh4z7@wOF^c(e>)HM7pmyT3EWoaJVE{*I~w7Ne40=Mi?RK zo%+CMI8su?4GQdWy_rLn2%6KI*#MQGHhq}+To?YlJsH|$YVZXg359>Q54@q zz~_n9!8ZTIYtiee_75qLi9ZVZD+T7Gu`_8Ht5Yv2 z*l*uRgT}Z^P(wgCF_ju57;4ZVOb;Sl)3+g?gj=DeQOD|O`FBhW= zQXTa%C@)I2D#-sYN!22J3h}a3?nWa3uSm7FF~j%|sYd)Sqxh;+=~?rbq51pMGx%uA z>?-IrZ))1F439UUGvFES9^L}hdS@m5_%`H%{d7Y<-mQ|_G{k2Bw@I4Phy}9vAr7CQ zy*LGX(%z@ACg|H^8wlD>QZb6-c3G^_8#ZxpyhGCbzvCppA0@SD>d5S!lHgefHoG`( zbFP%QTT$`D`R*F`os390?fB>{e&m0h}Fpx47x++ z{PNnj27O`jUB~YXa=9QMT(`<<=Ae0A(*_yp&Zn(G4vq^GuAZ?f&dD8Os3X1dz~1;X za|jumn$hrKq|ER*YyscLFt zgc|i?7|;@G>q{(Y#tL=)Wv=bxgc|bdPOfo6wP`bqYn)KWUVkJ7CkU1H)=F@VDAS1q zJ?1Uc_DFT;a&K_0FWZE8%%bvIv82BL4_`yMy^I=__4w;xXLo@5uCZm|888Rynq|=L z>evHttU=FaIIYMygSOV-{_Gws`$G$IpNdHld`f!ZTGd*HG)vj0M;E zx`}Q3BO&u>UF}b)-rmJc>0eTv-93e+id4D92T)#*qutM{jFpUirxF%hQ+=kjr6g0{ zh@n22^LDBw9tsLEK-S2iI(G znH;*!0eTDAKOaDkz=w&xr!jPH(f=oIF74l7#Np@CQwKds2!cLPo# zGhfpQPt(QI@PAzS3{|lsC$q>?d`yxx7oGxnJWhH(_q{B1f=O*5mv?zGVd1f%90cjT#n1(fQ*lHDV^y5E zjJZJkk}$tp!3&lGSK!l`cR`+}%Tb z3=0vz7PQTUJa?g>H~zv&yZJq_ zR(s4YsKFvmP|1Za;91$`|z3L5C$r3wq)R zvt+I9$&wHV`^`1wwXN~Jg#FbstlD2!v-1m~9Ca>)PFyMl?VHV=t@Yk$6Q{BEAI*F^ zowfZK4myJ?|2Rg*%-B);L(yL9uJpU7kF^%>eLyvxPyjfK%YMN)kY6W!lAXBfJ9#%} zP^#8nEd|$vG7K8F4)_iL>|)j5cWDEUw6|b7f%W z37dzrv=TuFU&jXgJ|alIfqelF2+DoaIkAKB)CV}DvHms;_M&$91RfG}sGWm|!%3qk z0n&Z%IfytC&!YEk7yl&SKkU+x4A8FcqsLx97;4e`9qF4f!rxUZF@TC{)PGMb7XCl zSN4#-=ABfn&`^C_@^i{;L*Wa(!1ZUDs?RR~ziL{4L%n;xE#Lq{eRF|}(?CN#bt#9% z$2o574b}17JAj)FwdJ?L;M$*zAM^*zt>v{jf(EsL%`BY-z0j6#@4b(PLFdtMgQ0fj z@Jq%16x~Euq|R++|Twc_vT0=o-|kQ{5DI zpN$+=^en-2d!zF!Sb|mU10`6+ heyjv5*$bU-@04J*T1-j*9X=3_g%5DB3j49ce*oQ3Tzmik delta 5790 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 AAOHXW diff --git a/integration-tests/validation/src/main/assets/figma/ItemSpacingTestDoc_YXrHBp6C6OaW5ShcCYeGJc.dcf b/integration-tests/validation/src/main/assets/figma/ItemSpacingTestDoc_YXrHBp6C6OaW5ShcCYeGJc.dcf index a4544c70c2dfb742745faa68e744c2640391956d..ffc3532b998bf34ad47c3fde170453e1f93ecd5d 100644 GIT binary patch delta 800 zcmZWnTS!z<6m@SM=ixT(nwpc6Wl5&w+?jDkXDV|bAE6CXj#v;h10n{ADM3)7Srn*0 zax18x9$!-SF>NY{e*Ckvhm~n%sg>Eg>}B?{Gv1+ue$HX9y;x_Twf4DAxY!9$*$!Fr z;>@yLwwh&|oM*OMa%?7RuB|;cIpJ~#7!0+(?NyGnGG9%tbfyDzSBWox2Jjm36?6gi z(D{gJz+U1SO%Z6WlN4^@f_N<`BMyyX%U`EtJ0q0?dP#dD*m79;WWENJY<;!%<_utG zw^IP)bG^!>VL9F+PK(+D*hhSdJfOQxQiR1JTev-0ux4wP$4I(6YWJ_GSLu$G@GkLC zYzr9rNz%wBhioz`fw%-dC~X0}M?4l+0XRUsD!v|YkT{S~58C@eNpN{IHWCz5QX@VP zjikMR4~b0+DglRxTap_99}!QdG=ToGDsIkI=Wj}F#9?As)C4#}ynpdl(2fQ*Ee<~6 zjsazANwxM#2uSe=AZnpk=}DLHDe-W+0)}UyX>CTOE5pb~m-zt4h^I0R0X`>g&MX5Q zC+^D<^$X(7E9wAW68C1e0lpHoEL?j{JZRnx_=ebP6_dOr9>^&Id`FyWUjy3rGnVK5 zXQuJADc?NiXG>c_|2x?4 z>LTbOx{)x*4kQHSMSoWIpZ%I;Wo4!I|Dy%H`mN~dBbIy6rd#VeLcL9`kz_LWu z<8^y-oq4+3-4S%8_Mw_oAK6mpORsF&8fmW6dQkaI+#SvVt9rTH=3Hj+(+6h-Iv1~{3Z}%=BWAd4B+J>Aqmu4 zVt9pk*s>k)D)Gj|axnLkmZ1AwCsSs_z9N%oL=tTkUXe7%rd%_qe{NM`XR@YTH_+U_ zmQ`YMZkBq3G?UBeb2;szK}+RT^J)NZ5+Bvp0p22>qGrI`#0~SCLAfIxq&Ds_ZjIqx z$=G%P4iJwos0PbD!_DnsNRe}g9Z|ebe8$lNmIrYv&*<+@i{V4!-n2HrN5sKJwP1cc z?XUZ|rX(3ePkIywi5D*32Ka>d@Dc&)P<&XAUBoi&9L|UUJ|*tS+y(fIIFMBgI83~E zsjQz9+m<&1z94ST-UIkj)=rt<2=PIe^n683x@`WM_&|=l#2ezF+yLOH?CEU+<*gBy zQ=TL&PqMc188cY#%;x`J#P7G^IB~UKCOJXezp@?h zgRFxx;g7^83S>B+;*06BoAmaCHsNRDL!sS(U*u0Il+v%nvDH%g&5-JDLpo7bB+81c zmhW*`H>PV{+iLkS4aqN}i|j%>TZ{dGKZ)0u$Pgxp2TJ8TMO<0FAMh9PXhk=Ok*e}P DQVQ#c diff --git a/integration-tests/validation/src/main/assets/figma/LayoutTestsDoc_Gv63fYTzpeH2ZtxP4go31E.dcf b/integration-tests/validation/src/main/assets/figma/LayoutTestsDoc_Gv63fYTzpeH2ZtxP4go31E.dcf index 1105aa6c7766b78c1243684239f8276ff12965db..4853883b71a4dd80f6cfa377bc355ffcb9a7c876 100644 GIT binary patch delta 2907 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 UFT6f+G}I$34EbRUsDhsV103PR2mk;8 diff --git a/integration-tests/validation/src/main/assets/figma/SmartAnimateTestDoc_RW3lFurXCoVDeqY2Y7bf4v.dcf b/integration-tests/validation/src/main/assets/figma/SmartAnimateTestDoc_RW3lFurXCoVDeqY2Y7bf4v.dcf index ab4728e76d912bfd69692846566e924a3b0d0cad..e197f29e2667d1489a31f24d44d6a1f9970f659c 100644 GIT binary patch delta 16228 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 delta 15845 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 o=%JX@+e3t9E8=vTnB_m+&F*(2BrHoE!1t<8 diff --git a/integration-tests/validation/src/main/assets/figma/VariantAsteriskTestDoc_gQeYHGCSaBE4zYSFpBrhre.dcf b/integration-tests/validation/src/main/assets/figma/VariantAsteriskTestDoc_gQeYHGCSaBE4zYSFpBrhre.dcf index a2ad00496b7a2b2ed0d5e3ab516d6f354814caa7..d4d98323fc83b4a446a7735e652a64c4ec57d2fc 100644 GIT binary patch delta 615 zcmY+BOH30{6ozw7aTsg87h4lTW9dUGLktaf+L?C1fK3b=6B9QsYz%hcqA_3s?9p09 zMJ(enHF4!$O~4ZqHYU1N7r4-!?1_o^0DOZ}S`*lw?@#{6DOaFefw}gc^x1IRnc{e< zI5ru}PfT7IFHKxbgiMv~vz48*OvkaDtWudi_xPcf=bB%+=fgB_?57t#fnNnL`7Qx| z6P(|359p)H>YqihMfIB&ZN=k!(i{f;OXFg5G*$pw%k;lNtFO+C6Be&fNBFFyeaw7KqufW$*+$+MVyg5HS`3?G#tDmdDQTN zR3$I>ctM`|qqrvcy?+Q=*TsLM1P=yW#0}vY5#V=0D%nkg0gb6`2JwgBSf~d0Q_xB( z$sZ0@5q}9UzyrYFf|h&+n;mx%|J2(OXu(&y{#WowWD#*wa7Szz@T#PdNH@n4!+;g( z-Dbfp*!ri&1d3Ku(S=2??5f~RxDT|^<=_>`Dme;Rmi+Jt0lm{YaZd8OW+1wfqkFvp z;#Ll~1Q#r?DMGbKI*aSk|VtYQ{jNW{smS4g|fqbzqfU+ qzJt{yR+H?j>y+6*+cJBnEWJyX*@0BHiME}Tvr9;)@)|AVPyYkjv8(X_ delta 571 zcmXX@%T7~K6wTSydbzcYv;yvf)&^=?qcuIfeFv#mQHRRJ0jVJ!IB1NDz{qIS%2cIp zwJ~wx2N(m}MB~Iy5cmM&`&m%IH;SIy%W$u=);eqLU7HZK2{GBVJvAgZ9I1>}D<{Vz z_SpEb(dyXoo={33lAiN!RymrgAdVR+GUss+dxePMcf!L2|!N zpEa%uZ}5p>d_tPBV!YH{2l$L!%3O2tFUaA@eSk&ed%l|*n=_0h!PICY%n%t4lg1qsjg{lJ0cK7h%eqH-5@~x7#^O-q#hZK%%R4V9E#f)6<3@OWLrLwC}NwV#Y f)UX2~)6}HA%XDRFD%+bn)GEKFRylW~DSPlglVhu@ diff --git a/proto/layout_interface/jni_layout.proto b/proto/layout_interface/jni_layout.proto index 79814d984..41a529309 100644 --- a/proto/layout_interface/jni_layout.proto +++ b/proto/layout_interface/jni_layout.proto @@ -39,7 +39,6 @@ message LayoutParentChildren { repeated int32 child_layout_ids = 2; } - // A list of Figma nodes to register for layout message LayoutNodeList { repeated LayoutNode layout_nodes = 1; diff --git a/proto/live_update/android_interface.proto b/proto/live_update/android_interface.proto index 858cc1231..a6c8efb19 100644 --- a/proto/live_update/android_interface.proto +++ b/proto/live_update/android_interface.proto @@ -40,15 +40,21 @@ message ConvertRequest { // this // to fail decoding, in case we're receiving a request from a client that has // an image session generated by an old version. - optional string image_session_json = 6; + optional bytes image_session_json = 6; } // From Rust to Kotlin message ConvertResponse { + // Document contains the converted DesignCompose definition, the server Figma + // document and the session id required to fetch images. message Document { + // The DesignCompose definition header. definition.DesignComposeDefinitionHeader header = 1; + // The server Figma document contains minimal information required by the + // client to fetch images. live_update.figma.ServerFigmaDoc server_doc = 2; - string image_session_json = 3; + // Session id required by the client to fetch images. + bytes image_session_json = 3; } oneof convert_response_type { diff --git a/proto/live_update/figma/figma_doc.proto b/proto/live_update/figma/figma_doc.proto index 25080ae6a..4b9b0e5a8 100644 --- a/proto/live_update/figma/figma_doc.proto +++ b/proto/live_update/figma/figma_doc.proto @@ -28,8 +28,8 @@ message IgnoredImage { repeated string images = 2; } -/// We can fetch figma documents in a project or from branches of another -/// document. We store each as a name and ID +// We can fetch figma documents in a project or from branches of another +// document. We store each as a name and ID message FigmaDocInfo { string name = 1; string id = 2; diff --git a/reference-apps/helloworld/helloworld-app/src/main/assets/figma/HelloWorldDoc_pxVlixodJqZL95zo2RzTHl.dcf b/reference-apps/helloworld/helloworld-app/src/main/assets/figma/HelloWorldDoc_pxVlixodJqZL95zo2RzTHl.dcf index 62d5d5b74418f9c8ab83de23084c0700b8cd6abf..70c7f996ede44b144e5efc40ef16ec921a3a73de 100644 GIT binary patch delta 47 zcmdlZxJPh;xQbbn6t_oePENi;cz#h%ijuIAp}C>4p{1p`SCl;b8LBz-45|e zOTDZrMom@gR88gmH71(1+yp$7YK?)rjkzeK7Go1&rMUEn!A4tyA;3;8kuIQ!?w@rt z6fdrxV<@34WdkUs=a(GJpnS=Y9Ar1$V<@9U-ZW573)8DW1&!SJ4z5`8bH6&}^wIv2 zNL^7=^!!lEcw|J`a7x+K=WhUZ^CepWB?2*q9Qt8D4Vb9AxD&{wrzI|iJX&}B1oCOU z`~zU7L}jVoI-M!)iBFoTvFQ#&0lkM_yq9{9y#Xv#eLRQpU`ICm)ZNhx1n5C%7^owu z>lRQ?cTdF)rcFuC5KBcPLj%{w$1jg6?Xpt;r{dhsxkxnj8XrqDK=w zwR+DtpRrZq5G~nSfx`mX5rHfy zkTnQojRM(G9hrlfKO5vMvF30z5*hvd;jP40<>V~* zC#Myalu~^HsN(J6B8t_#VsPrKOhK;xSE`Sm*9e2in@Mu1>B5&L5(X{_E&FdAJ r=Jl9Oa*A7ZyXsV*$F2N5y7-G3t6l#J;-cyc{2AzTxkaY8+IRc{hp6%9 delta 833 zcmZvaO-vI}6oowx3PY(y2PviewN(D8cBbu=7UV}Nzs49qgMvX61R+#{H7KlHU?M@W zzC;%iNWi#6$&Ics>c*J3k(IbIMs_aLg&{E@PJ9+O?p{vreP8Z5XJwkLOtU*}{8x1m z>iAT#jcRL}fe=mCUI&hlx$YfMPai{D;7f7oFw^U}1|WsZh6RQ_w4B%m>?K3e2|%V! zqr#B7c+14Fk8YdSVM>#e6jgBtRiDRC(F<$fC*?+1XkMOUNT;eaonobzmQ^5w?piGj zYy5jhZuD{{@|I^70VfTPjf1yzm7;*gx{d;cG@H`_6j63}J5Wr`4mU#yO*prKQkuyB z43trKVFBY0!VXl>^YAgCl1w9C84l6v>2Vn3FOpOhopI7!pp`b*s5TA1ludvKEc*>b_s)@rivdklnWyR!pNX* zd9mLuY{lWEs8zzM!PSM$eQ+Ad|M$ejtnby)!^IZTO-FzBG`5{q$y_ z8_1`k!3gkPx604v6R7OeLjd}16X07{%fPtVkV{S1{6L(DC|*Ql5D_K(i6~J-B>g9% zP@3_T#h5JYXdmr4KO`?(q$K)Q?*fdJ)97GGrkZ9wbraod`4ErYG;;h2tUn}Uir5pgcR61fzXKS@#z%~hNMYH72w6F5vARgb{!ttH6e^Kv!~wEBQt(FVI{gF|n_7TRsH zF;P?1pymz8e;=Nh<_-MSyn%9?#kf;6<=;W>*sMp>#J)%K@t>1+yGJYE5n@9=w<0wC bLq0f}m8WW|5L90vHl%sILespSyj{Nm|9R@U