Skip to content

Migration Guide ๐Ÿ”„

Guide for migrating between different versions of Composive.

๐Ÿ“‹ Version Compatibility

Current Version: 1.0.0

This is the initial stable release of Composive. Future migration guides will be added as new versions are released.

๐Ÿš€ From Preview/Beta to 1.0.0

If you were using early preview or beta versions, here's how to migrate to the stable 1.0.0 release:

Package Changes

// โŒ Old (Preview)
import com.gursimar.composive.ResponsiveTheme
import com.gursimar.composive.rememberDeviceConfig

// โœ… New (1.0.0)
import com.gursimar.composive.responsive.theme.ComposiveTheme
import com.gursimar.composive.responsive.core.rememberDeviceConfiguration

API Renames

Theme Setup

// โŒ Old
ResponsiveTheme {
    MainScreen()
}

// โœ… New
ComposiveTheme {
    MainScreen()
}

Device Configuration

// โŒ Old
val deviceConfig = rememberDeviceConfig()

// โœ… New
val deviceConfig = rememberDeviceConfiguration()

Configuration Builder

// โŒ Old
ResponsiveTheme(
    config = responsiveConfig {
        materialTheme()
    }
) {
    MainScreen()
}

// โœ… New
ComposiveTheme(
    configuration = responsiveConfiguration {
        withMaterialTheme()
    }
) {
    MainScreen()
}

Updated Function Names

All configuration builder functions now use with prefix:

// โŒ Old
responsiveConfiguration {
    materialTheme()
    cupertinoTheme()
    customFonts(bodyFont = myFont)
}

// โœ… New
responsiveConfiguration {
    withMaterialTheme()
    withCupertinoTheme()
    withCustomMaterialFonts(bodyFont = myFont)
}

Theme Access Changes

// โŒ Old
ResponsiveTheme.dimensions.cardPadding
ResponsiveTheme.typography.headlineLarge

// โœ… New
AppTheme.dimensions.cardPadding
AppTheme.materialTypography.headlineLarge

๐Ÿ”ง Step-by-Step Migration

1. Update Dependencies

// build.gradle.kts
dependencies {
    // โŒ Remove old dependency
    // implementation("com.gursimar.composive:composive:0.x.x")

    // โœ… Add new dependency
    implementation("io.github.gursimarsingh12.composive:composive-responsive-adaptive:1.0.0")
}

2. Update Imports

Replace all old imports with new package structure:

// โŒ Old imports
import com.gursimar.composive.ResponsiveTheme
import com.gursimar.composive.rememberDeviceConfig
import com.gursimar.composive.DeviceConfig

// โœ… New imports
import com.gursimar.composive.responsive.theme.ComposiveTheme
import com.gursimar.composive.responsive.core.rememberDeviceConfiguration
import com.gursimar.composive.responsive.core.DeviceConfiguration
import com.gursimar.composive.responsive.theme.AppTheme
import com.gursimar.composive.responsive.configuration.responsiveConfiguration

3. Update Theme Setup

// โŒ Old
@Composable
fun App() {
    ResponsiveWindowProvider {
        ResponsiveTheme(
            config = responsiveConfig {
                materialTheme()
            }
        ) {
            MainScreen()
        }
    }
}

// โœ… New
@Composable
fun App() {
    ComposiveTheme(
        configuration = responsiveConfiguration {
            withMaterialTheme()
        }
    ) {
        MainScreen()
    }
}

4. Update Device Configuration Usage

// โŒ Old
@Composable
fun ResponsiveLayout() {
    val deviceConfig = rememberDeviceConfig()

    when (deviceConfig) {
        DeviceConfig.MOBILE_PORTRAIT -> MobileLayout()
        DeviceConfig.DESKTOP -> DesktopLayout()
        else -> TabletLayout()
    }
}

// โœ… New
@Composable
fun ResponsiveLayout() {
    val deviceConfig = rememberDeviceConfiguration()

    when (deviceConfig) {
        DeviceConfiguration.MOBILE_PORTRAIT -> MobileLayout()
        DeviceConfiguration.DESKTOP -> DesktopLayout()
        else -> TabletLayout()
    }
}

5. Update Theme Value Access

// โŒ Old
@Composable
fun MyComponent() {
    Card(
        modifier = Modifier.padding(ResponsiveTheme.dimensions.cardSpacing)
    ) {
        Text(
            text = "Hello",
            style = ResponsiveTheme.typography.headlineLarge
        )
    }
}

// โœ… New
@Composable
fun MyComponent() {
    Card(
        modifier = Modifier.padding(AppTheme.dimensions.cardSpacing)
    ) {
        Text(
            text = "Hello",
            style = AppTheme.materialTypography.headlineLarge
        )
    }
}

6. Update Configuration

// โŒ Old
val config = responsiveConfig {
    materialTheme()
    customFonts(
        titleFont = myTitleFont,
        bodyFont = myBodyFont
    )
    customDimensions(
        mobile = myMobileDimensions
    )
}

// โœ… New
val config = responsiveConfiguration {
    withMaterialTheme()
    withCustomMaterialFonts(
        titleFont = myTitleFont,
        bodyFont = myBodyFont
    )
    withCustomDimensions(
        small = myMobileDimensions
    )
}

๐Ÿ†• New Features in 1.0.0

Enhanced Platform Detection

// New platform-aware configuration
val deviceConfig = rememberDeviceConfigurationWithPlatform()
val platform = AppTheme.platform

when {
    platform.isAndroid() -> AndroidSpecificCode()
    platform.isIOS() -> IOSSpecificCode()
    platform.isDesktop() -> DesktopSpecificCode()
}

Separate Typography Access

// Access Material and Cupertino typography separately
Text(
    text = "Material style",
    style = AppTheme.materialTypography.headlineLarge
)

Text(
    text = "Cupertino style", 
    style = AppTheme.cupertinoTypography.largeTitle
)

Enhanced Font Configuration

responsiveConfiguration {
    // New font configuration options
    withMaterialReadingDisplayFonts(
        readingFont = readingFont,
        displayFont = displayFont
    )

    withUniversalFont(brandFont) // Same font everywhere
}

Improved Dimension System

// More comprehensive dimension system
AppTheme.dimensions.space1          // 4dp
AppTheme.dimensions.cardPadding     // Responsive card padding
AppTheme.dimensions.avatarMedium    // Responsive avatar size
AppTheme.dimensions.buttonHeightMedium // Responsive button height

๐Ÿงช Testing Your Migration

1. Compilation Check

./gradlew build

Fix any compilation errors by updating API usage.

2. Visual Verification

Run your app and verify: - โœ… Layouts render correctly - โœ… Typography scales properly
- โœ… Platform themes work - โœ… Hot reload functions

3. Feature Testing

Test key functionality: - โœ… Window resizing on desktop - โœ… Device configuration detection - โœ… Theme switching - โœ… Custom fonts (if used)

๐Ÿ› Common Migration Issues

Issue 1: Compilation Errors

Problem: Old API references cause compilation errors

Solution: Update all imports and API calls

// โŒ This will cause compilation error
import com.gursimar.composive.ResponsiveTheme

// โœ… Use new import
import com.gursimar.composive.responsive.theme.ComposiveTheme

Issue 2: Theme Values Not Found

Problem: ResponsiveTheme.dimensions not found

Solution: Use AppTheme instead

// โŒ Old
ResponsiveTheme.dimensions.cardPadding

// โœ… New  
AppTheme.dimensions.cardPadding

Issue 3: Configuration Not Working

Problem: Old configuration syntax doesn't work

Solution: Update to new configuration builder

// โŒ Old
responsiveConfig {
    materialTheme()
}

// โœ… New
responsiveConfiguration {
    withMaterialTheme()
}

Issue 4: Window Provider Missing

Problem: Layouts don't respond to screen size changes

Solution: Make sure you're using ComposiveTheme

// โŒ Old approach that may not work
SomeOtherTheme {
    ResponsiveTheme { ... }
}

// โœ… New - Direct usage
ComposiveTheme {
    MainScreen()
}

๐Ÿ”ฎ Future Migrations

Version 1.x.x Updates

Future minor versions will maintain backward compatibility. Only additive changes are planned: - New dimension values - Additional configuration options
- New helper functions - Platform-specific enhancements

Version 2.0.0 (Future)

Major version updates may include: - Breaking API changes (with migration guide) - New architecture improvements - Enhanced platform support - Performance optimizations

Migration guides will be provided for all major version updates.

โœ… Migration Checklist

Use this checklist to ensure complete migration:

Dependencies

  • Updated to composive-responsive-adaptive:1.0.0
  • Removed old dependency references
  • Synced project successfully

Imports

  • Updated ResponsiveTheme โ†’ ComposiveTheme
  • Updated rememberDeviceConfig โ†’ rememberDeviceConfiguration
  • Updated DeviceConfig โ†’ DeviceConfiguration
  • Added AppTheme import

Theme Setup

  • Updated theme composable name
  • Updated configuration builder syntax
  • Updated window provider name

API Usage

  • Updated theme value access
  • Updated device configuration usage
  • Updated configuration options

Testing

  • Project compiles successfully
  • App runs on all platforms
  • Visual appearance matches expectations
  • Hot reload works correctly

๐Ÿ’ฌ Getting Help

If you encounter issues during migration:

  1. Check this guide for common solutions
  2. Search GitHub issues for similar problems
  3. Open a new issue with migration details
  4. Ask in discussions for community help

Include this information when asking for help: - Old version number - New version number
- Specific error messages - Code samples showing the issue


Successfully migrated to Composive 1.0.0! ๐ŸŽ‰
Enjoy the improved API and new features!