diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f0d2bc4..be92f3b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,7 +20,8 @@ android { buildTypes { release { - isMinifyEnabled = false + isMinifyEnabled = true + shrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" diff --git a/app/src/main/java/com/byteflipper/markdown/MainActivity.kt b/app/src/main/java/com/byteflipper/markdown/MainActivity.kt index 7387536..fb1394f 100644 --- a/app/src/main/java/com/byteflipper/markdown/MainActivity.kt +++ b/app/src/main/java/com/byteflipper/markdown/MainActivity.kt @@ -13,6 +13,8 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface @@ -85,22 +87,20 @@ fun MainScreen() { ) } } - - // --- Wrap in a Scrollable Column --- - Column( + // Use LazyColumn for main content + LazyColumn( modifier = Modifier .fillMaxSize() - .padding(horizontal = 16.dp) // Horizontal padding here - .verticalScroll(scrollState) // APPLY SCROLL STATE - .padding(vertical = 16.dp) // Vertical padding inside for content margins + .padding(horizontal = 16.dp, vertical = 16.dp), ) { - // Call the appropriate screen based on the selected tab - when (selectedTab) { - 0 -> DefaultScreen(scrollState) - 1 -> CustomStyleScreen(footnotePositions, scrollState) - 2 -> CustomRenderersScreen(footnotePositions, scrollState) + item { + when (selectedTab) { + 0 -> DefaultScreen(scrollState) + 1 -> CustomStyleScreen(footnotePositions, scrollState) + 2 -> CustomRenderersScreen(footnotePositions, scrollState) + } } - Spacer(Modifier.height(50.dp)) // Bottom spacer + item { Spacer(Modifier.height(50.dp)) } } } } diff --git a/app/src/main/java/com/byteflipper/markdown/ui/theme/Color.kt b/app/src/main/java/com/byteflipper/markdown/ui/theme/Color.kt index 8ab1a40..2e9315e 100644 --- a/app/src/main/java/com/byteflipper/markdown/ui/theme/Color.kt +++ b/app/src/main/java/com/byteflipper/markdown/ui/theme/Color.kt @@ -37,78 +37,6 @@ val surfaceContainerLight = Color(0xFFEDEDF4) val surfaceContainerHighLight = Color(0xFFE7E8EE) val surfaceContainerHighestLight = Color(0xFFE2E2E9) -val primaryLightMediumContrast = Color(0xFF133665) -val onPrimaryLightMediumContrast = Color(0xFFFFFFFF) -val primaryContainerLightMediumContrast = Color(0xFF506DA0) -val onPrimaryContainerLightMediumContrast = Color(0xFFFFFFFF) -val secondaryLightMediumContrast = Color(0xFF2E3647) -val onSecondaryLightMediumContrast = Color(0xFFFFFFFF) -val secondaryContainerLightMediumContrast = Color(0xFF646D80) -val onSecondaryContainerLightMediumContrast = Color(0xFFFFFFFF) -val tertiaryLightMediumContrast = Color(0xFF452E4A) -val onTertiaryLightMediumContrast = Color(0xFFFFFFFF) -val tertiaryContainerLightMediumContrast = Color(0xFF7F6484) -val onTertiaryContainerLightMediumContrast = Color(0xFFFFFFFF) -val errorLightMediumContrast = Color(0xFF740006) -val onErrorLightMediumContrast = Color(0xFFFFFFFF) -val errorContainerLightMediumContrast = Color(0xFFCF2C27) -val onErrorContainerLightMediumContrast = Color(0xFFFFFFFF) -val backgroundLightMediumContrast = Color(0xFFF9F9FF) -val onBackgroundLightMediumContrast = Color(0xFF191C20) -val surfaceLightMediumContrast = Color(0xFFF9F9FF) -val onSurfaceLightMediumContrast = Color(0xFF0F1116) -val surfaceVariantLightMediumContrast = Color(0xFFE0E2EC) -val onSurfaceVariantLightMediumContrast = Color(0xFF33363E) -val outlineLightMediumContrast = Color(0xFF4F525A) -val outlineVariantLightMediumContrast = Color(0xFF6A6D75) -val scrimLightMediumContrast = Color(0xFF000000) -val inverseSurfaceLightMediumContrast = Color(0xFF2E3036) -val inverseOnSurfaceLightMediumContrast = Color(0xFFF0F0F7) -val inversePrimaryLightMediumContrast = Color(0xFFAAC7FF) -val surfaceDimLightMediumContrast = Color(0xFFC5C6CD) -val surfaceBrightLightMediumContrast = Color(0xFFF9F9FF) -val surfaceContainerLowestLightMediumContrast = Color(0xFFFFFFFF) -val surfaceContainerLowLightMediumContrast = Color(0xFFF3F3FA) -val surfaceContainerLightMediumContrast = Color(0xFFE7E8EE) -val surfaceContainerHighLightMediumContrast = Color(0xFFDCDCE3) -val surfaceContainerHighestLightMediumContrast = Color(0xFFD1D1D8) - -val primaryLightHighContrast = Color(0xFF032B5B) -val onPrimaryLightHighContrast = Color(0xFFFFFFFF) -val primaryContainerLightHighContrast = Color(0xFF2A497A) -val onPrimaryContainerLightHighContrast = Color(0xFFFFFFFF) -val secondaryLightHighContrast = Color(0xFF232C3D) -val onSecondaryLightHighContrast = Color(0xFFFFFFFF) -val secondaryContainerLightHighContrast = Color(0xFF41495B) -val onSecondaryContainerLightHighContrast = Color(0xFFFFFFFF) -val tertiaryLightHighContrast = Color(0xFF3A2440) -val onTertiaryLightHighContrast = Color(0xFFFFFFFF) -val tertiaryContainerLightHighContrast = Color(0xFF59405E) -val onTertiaryContainerLightHighContrast = Color(0xFFFFFFFF) -val errorLightHighContrast = Color(0xFF600004) -val onErrorLightHighContrast = Color(0xFFFFFFFF) -val errorContainerLightHighContrast = Color(0xFF98000A) -val onErrorContainerLightHighContrast = Color(0xFFFFFFFF) -val backgroundLightHighContrast = Color(0xFFF9F9FF) -val onBackgroundLightHighContrast = Color(0xFF191C20) -val surfaceLightHighContrast = Color(0xFFF9F9FF) -val onSurfaceLightHighContrast = Color(0xFF000000) -val surfaceVariantLightHighContrast = Color(0xFFE0E2EC) -val onSurfaceVariantLightHighContrast = Color(0xFF000000) -val outlineLightHighContrast = Color(0xFF292C33) -val outlineVariantLightHighContrast = Color(0xFF464951) -val scrimLightHighContrast = Color(0xFF000000) -val inverseSurfaceLightHighContrast = Color(0xFF2E3036) -val inverseOnSurfaceLightHighContrast = Color(0xFFFFFFFF) -val inversePrimaryLightHighContrast = Color(0xFFAAC7FF) -val surfaceDimLightHighContrast = Color(0xFFB8B8BF) -val surfaceBrightLightHighContrast = Color(0xFFF9F9FF) -val surfaceContainerLowestLightHighContrast = Color(0xFFFFFFFF) -val surfaceContainerLowLightHighContrast = Color(0xFFF0F0F7) -val surfaceContainerLightHighContrast = Color(0xFFE2E2E9) -val surfaceContainerHighLightHighContrast = Color(0xFFD3D4DB) -val surfaceContainerHighestLightHighContrast = Color(0xFFC5C6CD) - val primaryDark = Color(0xFFAAC7FF) val onPrimaryDark = Color(0xFF0A305F) val primaryContainerDark = Color(0xFF284777) diff --git a/app/src/main/java/com/byteflipper/markdown/ui/theme/Theme.kt b/app/src/main/java/com/byteflipper/markdown/ui/theme/Theme.kt index 9222d03..762a319 100644 --- a/app/src/main/java/com/byteflipper/markdown/ui/theme/Theme.kt +++ b/app/src/main/java/com/byteflipper/markdown/ui/theme/Theme.kt @@ -11,11 +11,7 @@ import androidx.compose.runtime.Immutable import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import com.example.compose.backgroundDark -import com.example.compose.backgroundDarkHighContrast -import com.example.compose.backgroundDarkMediumContrast import com.example.compose.backgroundLight -import com.example.compose.backgroundLightHighContrast -import com.example.compose.backgroundLightMediumContrast import com.example.compose.errorContainerDark import com.example.compose.errorContainerDarkHighContrast import com.example.compose.errorContainerDarkMediumContrast @@ -297,158 +293,6 @@ private val darkScheme = darkColorScheme( surfaceContainerHighest = surfaceContainerHighestDark, ) -private val mediumContrastLightColorScheme = lightColorScheme( - primary = primaryLightMediumContrast, - onPrimary = onPrimaryLightMediumContrast, - primaryContainer = primaryContainerLightMediumContrast, - onPrimaryContainer = onPrimaryContainerLightMediumContrast, - secondary = secondaryLightMediumContrast, - onSecondary = onSecondaryLightMediumContrast, - secondaryContainer = secondaryContainerLightMediumContrast, - onSecondaryContainer = onSecondaryContainerLightMediumContrast, - tertiary = tertiaryLightMediumContrast, - onTertiary = onTertiaryLightMediumContrast, - tertiaryContainer = tertiaryContainerLightMediumContrast, - onTertiaryContainer = onTertiaryContainerLightMediumContrast, - error = errorLightMediumContrast, - onError = onErrorLightMediumContrast, - errorContainer = errorContainerLightMediumContrast, - onErrorContainer = onErrorContainerLightMediumContrast, - background = backgroundLightMediumContrast, - onBackground = onBackgroundLightMediumContrast, - surface = surfaceLightMediumContrast, - onSurface = onSurfaceLightMediumContrast, - surfaceVariant = surfaceVariantLightMediumContrast, - onSurfaceVariant = onSurfaceVariantLightMediumContrast, - outline = outlineLightMediumContrast, - outlineVariant = outlineVariantLightMediumContrast, - scrim = scrimLightMediumContrast, - inverseSurface = inverseSurfaceLightMediumContrast, - inverseOnSurface = inverseOnSurfaceLightMediumContrast, - inversePrimary = inversePrimaryLightMediumContrast, - surfaceDim = surfaceDimLightMediumContrast, - surfaceBright = surfaceBrightLightMediumContrast, - surfaceContainerLowest = surfaceContainerLowestLightMediumContrast, - surfaceContainerLow = surfaceContainerLowLightMediumContrast, - surfaceContainer = surfaceContainerLightMediumContrast, - surfaceContainerHigh = surfaceContainerHighLightMediumContrast, - surfaceContainerHighest = surfaceContainerHighestLightMediumContrast, -) - -private val highContrastLightColorScheme = lightColorScheme( - primary = primaryLightHighContrast, - onPrimary = onPrimaryLightHighContrast, - primaryContainer = primaryContainerLightHighContrast, - onPrimaryContainer = onPrimaryContainerLightHighContrast, - secondary = secondaryLightHighContrast, - onSecondary = onSecondaryLightHighContrast, - secondaryContainer = secondaryContainerLightHighContrast, - onSecondaryContainer = onSecondaryContainerLightHighContrast, - tertiary = tertiaryLightHighContrast, - onTertiary = onTertiaryLightHighContrast, - tertiaryContainer = tertiaryContainerLightHighContrast, - onTertiaryContainer = onTertiaryContainerLightHighContrast, - error = errorLightHighContrast, - onError = onErrorLightHighContrast, - errorContainer = errorContainerLightHighContrast, - onErrorContainer = onErrorContainerLightHighContrast, - background = backgroundLightHighContrast, - onBackground = onBackgroundLightHighContrast, - surface = surfaceLightHighContrast, - onSurface = onSurfaceLightHighContrast, - surfaceVariant = surfaceVariantLightHighContrast, - onSurfaceVariant = onSurfaceVariantLightHighContrast, - outline = outlineLightHighContrast, - outlineVariant = outlineVariantLightHighContrast, - scrim = scrimLightHighContrast, - inverseSurface = inverseSurfaceLightHighContrast, - inverseOnSurface = inverseOnSurfaceLightHighContrast, - inversePrimary = inversePrimaryLightHighContrast, - surfaceDim = surfaceDimLightHighContrast, - surfaceBright = surfaceBrightLightHighContrast, - surfaceContainerLowest = surfaceContainerLowestLightHighContrast, - surfaceContainerLow = surfaceContainerLowLightHighContrast, - surfaceContainer = surfaceContainerLightHighContrast, - surfaceContainerHigh = surfaceContainerHighLightHighContrast, - surfaceContainerHighest = surfaceContainerHighestLightHighContrast, -) - -private val mediumContrastDarkColorScheme = darkColorScheme( - primary = primaryDarkMediumContrast, - onPrimary = onPrimaryDarkMediumContrast, - primaryContainer = primaryContainerDarkMediumContrast, - onPrimaryContainer = onPrimaryContainerDarkMediumContrast, - secondary = secondaryDarkMediumContrast, - onSecondary = onSecondaryDarkMediumContrast, - secondaryContainer = secondaryContainerDarkMediumContrast, - onSecondaryContainer = onSecondaryContainerDarkMediumContrast, - tertiary = tertiaryDarkMediumContrast, - onTertiary = onTertiaryDarkMediumContrast, - tertiaryContainer = tertiaryContainerDarkMediumContrast, - onTertiaryContainer = onTertiaryContainerDarkMediumContrast, - error = errorDarkMediumContrast, - onError = onErrorDarkMediumContrast, - errorContainer = errorContainerDarkMediumContrast, - onErrorContainer = onErrorContainerDarkMediumContrast, - background = backgroundDarkMediumContrast, - onBackground = onBackgroundDarkMediumContrast, - surface = surfaceDarkMediumContrast, - onSurface = onSurfaceDarkMediumContrast, - surfaceVariant = surfaceVariantDarkMediumContrast, - onSurfaceVariant = onSurfaceVariantDarkMediumContrast, - outline = outlineDarkMediumContrast, - outlineVariant = outlineVariantDarkMediumContrast, - scrim = scrimDarkMediumContrast, - inverseSurface = inverseSurfaceDarkMediumContrast, - inverseOnSurface = inverseOnSurfaceDarkMediumContrast, - inversePrimary = inversePrimaryDarkMediumContrast, - surfaceDim = surfaceDimDarkMediumContrast, - surfaceBright = surfaceBrightDarkMediumContrast, - surfaceContainerLowest = surfaceContainerLowestDarkMediumContrast, - surfaceContainerLow = surfaceContainerLowDarkMediumContrast, - surfaceContainer = surfaceContainerDarkMediumContrast, - surfaceContainerHigh = surfaceContainerHighDarkMediumContrast, - surfaceContainerHighest = surfaceContainerHighestDarkMediumContrast, -) - -private val highContrastDarkColorScheme = darkColorScheme( - primary = primaryDarkHighContrast, - onPrimary = onPrimaryDarkHighContrast, - primaryContainer = primaryContainerDarkHighContrast, - onPrimaryContainer = onPrimaryContainerDarkHighContrast, - secondary = secondaryDarkHighContrast, - onSecondary = onSecondaryDarkHighContrast, - secondaryContainer = secondaryContainerDarkHighContrast, - onSecondaryContainer = onSecondaryContainerDarkHighContrast, - tertiary = tertiaryDarkHighContrast, - onTertiary = onTertiaryDarkHighContrast, - tertiaryContainer = tertiaryContainerDarkHighContrast, - onTertiaryContainer = onTertiaryContainerDarkHighContrast, - error = errorDarkHighContrast, - onError = onErrorDarkHighContrast, - errorContainer = errorContainerDarkHighContrast, - onErrorContainer = onErrorContainerDarkHighContrast, - background = backgroundDarkHighContrast, - onBackground = onBackgroundDarkHighContrast, - surface = surfaceDarkHighContrast, - onSurface = onSurfaceDarkHighContrast, - surfaceVariant = surfaceVariantDarkHighContrast, - onSurfaceVariant = onSurfaceVariantDarkHighContrast, - outline = outlineDarkHighContrast, - outlineVariant = outlineVariantDarkHighContrast, - scrim = scrimDarkHighContrast, - inverseSurface = inverseSurfaceDarkHighContrast, - inverseOnSurface = inverseOnSurfaceDarkHighContrast, - inversePrimary = inversePrimaryDarkHighContrast, - surfaceDim = surfaceDimDarkHighContrast, - surfaceBright = surfaceBrightDarkHighContrast, - surfaceContainerLowest = surfaceContainerLowestDarkHighContrast, - surfaceContainerLow = surfaceContainerLowDarkHighContrast, - surfaceContainer = surfaceContainerDarkHighContrast, - surfaceContainerHigh = surfaceContainerHighDarkHighContrast, - surfaceContainerHighest = surfaceContainerHighestDarkHighContrast, -) - @Immutable data class ColorFamily( val color: Color, diff --git a/app/src/main/java/com/byteflipper/markdown/ui/theme/Type.kt b/app/src/main/java/com/byteflipper/markdown/ui/theme/Type.kt index 1fbee12..59a4a67 100644 --- a/app/src/main/java/com/byteflipper/markdown/ui/theme/Type.kt +++ b/app/src/main/java/com/byteflipper/markdown/ui/theme/Type.kt @@ -15,20 +15,4 @@ val Typography = Typography( lineHeight = 24.sp, letterSpacing = 0.5.sp ) - /* Other default text styles to override - titleLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 22.sp, - lineHeight = 28.sp, - letterSpacing = 0.sp - ), - labelSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 11.sp, - lineHeight = 16.sp, - letterSpacing = 0.5.sp - ) - */ ) \ No newline at end of file diff --git a/markdown-compose/build.gradle.kts b/markdown-compose/build.gradle.kts index c7a395d..4bd088b 100644 --- a/markdown-compose/build.gradle.kts +++ b/markdown-compose/build.gradle.kts @@ -17,7 +17,8 @@ android { buildTypes { release { - isMinifyEnabled = false + isMinifyEnabled = true + shrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" diff --git a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/MarkdownText.kt b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/MarkdownText.kt index 788a01c..bbb328e 100644 --- a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/MarkdownText.kt +++ b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/MarkdownText.kt @@ -54,7 +54,6 @@ fun MarkdownText( onLinkClick: ((url: String) -> Unit)? = null, onFootnoteReferenceClick: ((identifier: String) -> Unit)? = { identifier -> // Default handler: Scroll towards the bottom using provided scope and state - Log.d(TAG, "Default footnote click handler: Scrolling towards bottom for ref [^$identifier]") coroutineScope.launch { // Scroll to the end where footnotes are located scrollState.animateScrollTo(scrollState.maxValue) @@ -66,13 +65,12 @@ fun MarkdownText( ) { // --- Parsing --- val document = remember(markdown) { MarkdownParser.parse(markdown) } - Log.d(TAG, "Parsed markdown into IR document with ${document.children.size} root elements.") + // Remove or comment out all Log.d, Log.i, and Log.w calls in this file for production // --- Renderer Instantiation --- // Pass the potentially overridden onFootnoteReferenceClick lambda val actualOnFootnoteReferenceClick = onFootnoteReferenceClick ?: { identifier -> // Replicate default logic if user passes null explicitly - Log.d(TAG, "Default footnote click handler (invoked via null override): Scrolling towards bottom for ref [^$identifier]") coroutineScope.launch { scrollState.animateScrollTo(scrollState.maxValue) } @@ -96,9 +94,7 @@ fun MarkdownText( // Invoke the returned Composable lambda to perform the rendering renderFunction() - Log.d(TAG, "MarkdownText rendering initiated via ComposeMarkdownRenderer.") - - // --- Old Logic Removed --- + // Remove or comment out all Log.d, Log.i, and Log.w calls in this file for production // The complex Column loop, flushTextGroup, spacing logic, footnote extraction, // and direct calls to old renderers are now handled within ComposeMarkdownRenderer. } diff --git a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/ImageElementRenderer.kt b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/ImageElementRenderer.kt index 5bac3b9..328f6c3 100644 --- a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/ImageElementRenderer.kt +++ b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/ImageElementRenderer.kt @@ -1,6 +1,5 @@ package com.byteflipper.markdown_compose.renderer.element -import android.util.Log import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -22,8 +21,6 @@ internal object ImageElementRenderer { .then(imageStyle.modifier) .clip(imageStyle.shape) - Log.d("ImageElementRenderer", "Rendering Image: url='${element.url}', modifier='$finalModifier'") - AsyncImage( model = element.url, contentDescription = element.altText, diff --git a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/ImageLinkElementRenderer.kt b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/ImageLinkElementRenderer.kt index ae13e96..b634c9f 100644 --- a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/ImageLinkElementRenderer.kt +++ b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/ImageLinkElementRenderer.kt @@ -32,7 +32,6 @@ internal object ImageLinkElementRenderer { interactionSource = interactionSource, indication = null, // No visual indication for clicks on images onClick = { - Log.d("ImageLinkElementRenderer", "ImageLink clicked: Opening URI: ${element.linkUrl}") try { uriHandler.openUri(element.linkUrl) } catch (e: Exception) { diff --git a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/LinkElementRenderer.kt b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/LinkElementRenderer.kt index 440f44f..2ed060e 100644 --- a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/LinkElementRenderer.kt +++ b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/LinkElementRenderer.kt @@ -53,13 +53,13 @@ internal object LinkElementRenderer { annotatedString.getStringAnnotations(tag = URL_TAG, start = offset, end = offset) .firstOrNull()?.let { annotation -> val url = annotation.item - Log.d("LinkElementRenderer", "Link clicked: $url") + // Remove or comment out all Log.d and Log.e calls in this file for production val handler = renderer.onLinkClick ?: { defaultUrl -> try { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(defaultUrl)) context.startActivity(intent) } catch (e: Exception) { - Log.e("LinkElementRenderer", "Failed to open link: $defaultUrl", e) + // Remove or comment out all Log.d and Log.e calls in this file for production } } handler(url) diff --git a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/TableElementRenderer.kt b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/TableElementRenderer.kt index 9afd815..568d13e 100644 --- a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/TableElementRenderer.kt +++ b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/TableElementRenderer.kt @@ -72,8 +72,6 @@ internal object TableElementRenderer { linkHandler: (url: String) -> Unit, onFootnoteReferenceClick: ((identifier: String) -> Unit)? ) { - Log.d("TableElementRenderer", "Start rendering table with style: ${styleSheet.tableStyle}") - val textMeasurer: TextMeasurer = rememberTextMeasurer() val density = LocalDensity.current val tableStyle = styleSheet.tableStyle @@ -153,7 +151,6 @@ internal object TableElementRenderer { if (cellLayoutInfosState.value != currentCellLayoutInfos) { cellLayoutInfosState.value = currentCellLayoutInfos.toList() - Log.d("TableElementRenderer", "Updated CellLayoutInfo state with ${currentCellLayoutInfos.size} cells") } } }, @@ -166,7 +163,6 @@ internal object TableElementRenderer { val finalHeight = requiredHeight.coerceIn(constraints.minHeight.toFloat(), constraints.maxHeight.toFloat()) val placeable = measurables.first().measure(Constraints.fixed(finalWidth.toInt(), finalHeight.toInt())) - Log.d("TableElementRenderer", "Layout - Constraints: $constraints, Required W/H: $requiredWidth/$requiredHeight, Final W/H: ${finalWidth.toInt()}/${finalHeight.toInt()}") layout(finalWidth.toInt(), finalHeight.toInt()) { placeable.placeRelative(0, 0) } } ) @@ -276,7 +272,6 @@ internal object TableElementRenderer { } currentY += scaledCurrentRowHeight } - Log.v("TableElementRenderer", "Captured layout info for ${captureLayoutInfoList.size} cells") } private fun handleTap( @@ -285,37 +280,25 @@ internal object TableElementRenderer { linkHandler: (url: String) -> Unit, onFootnoteReferenceClick: ((identifier: String) -> Unit)? ) { - Log.d("TableElementRenderer", "Tap detected at: $tapOffset. Checking ${cellLayoutInfos.size} cells.") val tappedCellInfo = cellLayoutInfos.find { tapOffset in it.bounds } if (tappedCellInfo != null) { - Log.d("TableElementRenderer", "Tap inside cell bounds: ${tappedCellInfo.bounds}") val textRelativeOffset = tapOffset - tappedCellInfo.textTopLeft if (textRelativeOffset.x >= 0 && textRelativeOffset.y >= 0 && textRelativeOffset.x <= tappedCellInfo.textLayoutResult.size.width && textRelativeOffset.y <= tappedCellInfo.textLayoutResult.size.height) { val characterOffset = try { tappedCellInfo.textLayoutResult.getOffsetForPosition(textRelativeOffset) } catch (e: Exception) { -1 } if (characterOffset >= 0) { - Log.d("TableElementRenderer", "Tap maps to character offset: $characterOffset") val text = tappedCellInfo.textLayoutResult.layoutInput.text text.getStringAnnotations(tag = URL_TAG, start = characterOffset, end = characterOffset).firstOrNull()?.let { - Log.i("TableElementRenderer", "Link clicked in Table (Canvas): ${it.item}") linkHandler(it.item) return } text.getStringAnnotations(tag = FOOTNOTE_REF_TAG, start = characterOffset, end = characterOffset).firstOrNull()?.let { - Log.i("TableElementRenderer", "Footnote ref [^${it.item}] clicked in Table (Canvas)") onFootnoteReferenceClick?.invoke(it.item) return } - Log.d("TableElementRenderer", "No link or footnote annotation found at offset $characterOffset") - } else { - Log.w("TableElementRenderer", "Tap was within text layout, but getOffsetForPosition returned invalid offset for relative: $textRelativeOffset") } - } else { - Log.d("TableElementRenderer", "Tap inside cell bounds, but outside text layout area. Relative offset: $textRelativeOffset") } - } else { - Log.d("TableElementRenderer", "Tap outside any cell bounds.") } } diff --git a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/TaskListItemElementRenderer.kt b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/TaskListItemElementRenderer.kt index 71e154d..9020f40 100644 --- a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/TaskListItemElementRenderer.kt +++ b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/element/TaskListItemElementRenderer.kt @@ -44,7 +44,6 @@ internal object TaskListItemElementRenderer { Checkbox( checked = element.isChecked, onCheckedChange = { newCheckedState -> - Log.d("TaskListItemRenderer", "Checkbox clicked, new state: $newCheckedState") renderer.onTaskCheckedChange?.invoke(element, newCheckedState) }, enabled = true, // Assuming always enabled diff --git a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/util/AnnotatedStringRenderUtil.kt b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/util/AnnotatedStringRenderUtil.kt index b501f73..aea1cc4 100644 --- a/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/util/AnnotatedStringRenderUtil.kt +++ b/markdown-compose/src/main/java/com/byteflipper/markdown_compose/renderer/util/AnnotatedStringRenderUtil.kt @@ -63,7 +63,7 @@ internal fun renderChildren( // Changed visibility to internal builder.withStyle(renderer.styleSheet.inlineCodeStyle) { builder.append(child.content) } } else { // Block code shouldn't appear inside AnnotatedString rendering for paragraphs etc. - android.util.Log.w("AnnotatedStringRender", "Block CodeElement encountered during inline rendering.") + // android.util.Log.w("AnnotatedStringRender", "Block CodeElement encountered during inline rendering.") builder.append("[Block Code]") // Placeholder } is LinkElement -> { @@ -93,11 +93,11 @@ internal fun renderChildren( // Changed visibility to internal } // Ignore block elements or elements not typically rendered inside AnnotatedString for paragraphs is ImageElement, is ImageLinkElement, is LineBreakElement, is ParagraphElement, is HeaderElement, is ListElement, is ListItemElement, is TaskListItemElement, is BlockQuoteElement, is HorizontalRuleElement, is TableElement, is FootnoteDefinitionElement, is DefinitionListElement -> { - android.util.Log.w("AnnotatedStringRender", "Ignoring block element ${child::class.simpleName} during inline rendering.") + // android.util.Log.w("AnnotatedStringRender", "Ignoring block element ${child::class.simpleName} during inline rendering.") /* Usually not rendered directly into AnnotatedString for a paragraph */ } else -> { - android.util.Log.w("AnnotatedStringRender", "Unsupported element ${child::class.simpleName} during inline rendering.") + // android.util.Log.w("AnnotatedStringRender", "Unsupported element ${child::class.simpleName} during inline rendering.") builder.append(" [${child::class.simpleName}] ") // Placeholder for unsupported } }