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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [Unreleased]

## [0.5.2] - 2026-09-19

### Changed

- Replace the olive-green theme with a blue-violet palette across light and dark modes, and use the Sync360 palette consistently on Android instead of substituting system dynamic colors.
- Refine discovery and file-selection colors so primary icons remain crisp on neutral surfaces in both light and dark themes.
- Use consistent outlined, fixed-height file-picker actions across Android, iOS, and Desktop.
- Prepare Android, Desktop, and iOS version metadata as `0.5.2`; Android and iOS build numbers are `9`.

Release preparation only: new package builds and device validation have not been recorded in this task.

## [0.5.1] - 2026-09-09

### Changed
Expand Down
4 changes: 2 additions & 2 deletions androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ android {
applicationId = "com.liftley.sync360"
minSdk = libs.versions.android.minSdk.get().toInt()
targetSdk = libs.versions.android.targetSdk.get().toInt()
versionCode = 8
versionName = "0.5.1"
versionCode = 9
versionName = "0.5.2"
}

buildFeatures {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class MainActivity : ComponentActivity() {
enableEdgeToEdge()
super.onCreate(savedInstanceState)
setContent {
Sync360Theme(dynamicColor = true) {
Sync360Theme {
Sync360Root()
}
}
Expand Down
2 changes: 1 addition & 1 deletion desktopApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ compose.desktop {
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
packageName = "Sync360"
packageVersion = "0.5.1"
packageVersion = "0.5.2"
appResourcesRootDir.set(
project.layout.projectDirectory.dir("packaging/app-resources")
)
Expand Down
4 changes: 2 additions & 2 deletions desktopApp/src/main/kotlin/com/liftley/sync360/main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ fun main() {
icon = painterResource(Res.drawable.app_icon)
) {
Sync360Theme(
darkTheme = false,
dynamicColor = false
dynamicColor = false,
darkTheme = false
) {
Sync360Root()
}
Expand Down
6 changes: 3 additions & 3 deletions docs/DEVELOPMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ The Desktop `hotRun` task is configured to use a Java 23 toolchain when it is a

## Preparing public packages

The current package version is `0.5.1`.
The current package version is `0.5.2`.

Android release APKs must use the maintainer's permanent private signing key. Copy `keystore.properties.example` to the ignored `keystore.properties` file and set:

Expand Down Expand Up @@ -156,8 +156,8 @@ Automated coverage is still minimal. Add focused tests for pure Kotlin logic whe

There is no stable release yet. Treat current builds as development software.

## 0.5.1 UI validation
## 0.5.2 UI validation

Before publishing the final packages, check the grouped Nearby devices header, rows, and footer with zero, one, and multiple devices. Check discovery off, scanning, and failure/retry states; light and dark themes; compact and wide windows; and the intentionally limited empty-state text at larger font sizes. Check media/document selection and adding more files. The shared default surface shape changed, so inspect other screens that use its default corners too.

Build and device validation for 0.5.1 have not been recorded in this preparation task.
Build and device validation for 0.5.2 have not been recorded in this preparation task.
4 changes: 2 additions & 2 deletions iosApp/Configuration/Config.xcconfig
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ TEAM_ID=
PRODUCT_NAME=Sync360
PRODUCT_BUNDLE_IDENTIFIER=com.liftley.sync360.Sync360$(TEAM_ID)

CURRENT_PROJECT_VERSION=8
MARKETING_VERSION=0.5.1
CURRENT_PROJECT_VERSION=9
MARKETING_VERSION=0.5.2
Original file line number Diff line number Diff line change
Expand Up @@ -2,75 +2,74 @@ package com.liftley.sync360.core.designsystem

import androidx.compose.ui.graphics.Color

val primaryLight = Color(0xFF4C662B)
val primaryLight = Color(0xFF2346D5)
val onPrimaryLight = Color(0xFFFFFFFF)
val primaryContainerLight = Color(0xFFCDEDA3)
val onPrimaryContainerLight = Color(0xFF354E16)
val secondaryLight = Color(0xFF586249)
val primaryContainerLight = Color(0xFF4361EE)
val onPrimaryContainerLight = Color(0xFFF4F2FF)
val secondaryLight = Color(0xFF4F5A95)
val onSecondaryLight = Color(0xFFFFFFFF)
val secondaryContainerLight = Color(0xFFDCE7C8)
val onSecondaryContainerLight = Color(0xFF404A33)
val tertiaryLight = Color(0xFF386663)
val secondaryContainerLight = Color(0xFFB2BDFF)
val onSecondaryContainerLight = Color(0xFF404B85)
val tertiaryLight = Color(0xFF8E239F)
val onTertiaryLight = Color(0xFFFFFFFF)
val tertiaryContainerLight = Color(0xFFBCECE7)
val onTertiaryContainerLight = Color(0xFF1F4E4B)
val tertiaryContainerLight = Color(0xFFAA41BA)
val onTertiaryContainerLight = Color(0xFFFFEFFB)
val errorLight = Color(0xFFBA1A1A)
val onErrorLight = Color(0xFFFFFFFF)
val errorContainerLight = Color(0xFFFFDAD6)
val onErrorContainerLight = Color(0xFF93000A)
val backgroundLight = Color(0xFFF9FAEF)
val onBackgroundLight = Color(0xFF1A1C16)
val surfaceLight = Color(0xFFF9FAEF)
val onSurfaceLight = Color(0xFF1A1C16)
val surfaceVariantLight = Color(0xFFE1E4D5)
val onSurfaceVariantLight = Color(0xFF44483D)
val outlineLight = Color(0xFF75796C)
val outlineVariantLight = Color(0xFFC5C8BA)
val backgroundLight = Color(0xFFFBF8FF)
val onBackgroundLight = Color(0xFF1A1B23)
val surfaceLight = Color(0xFFFBF8FF)
val onSurfaceLight = Color(0xFF1A1B23)
val surfaceVariantLight = Color(0xFFE1E1F4)
val onSurfaceVariantLight = Color(0xFF444655)
val outlineLight = Color(0xFF747686)
val outlineVariantLight = Color(0xFFC4C5D7)
val scrimLight = Color(0xFF000000)
val inverseSurfaceLight = Color(0xFF2F312A)
val inverseOnSurfaceLight = Color(0xFFF1F2E6)
val inversePrimaryLight = Color(0xFFB1D18A)
val surfaceDimLight = Color(0xFFDADBD0)
val surfaceBrightLight = Color(0xFFF9FAEF)
val inverseSurfaceLight = Color(0xFF2F3039)
val inverseOnSurfaceLight = Color(0xFFF1EFFC)
val inversePrimaryLight = Color(0xFFBAC3FF)
val surfaceDimLight = Color(0xFFDAD9E5)
val surfaceBrightLight = Color(0xFFFBF8FF)
val surfaceContainerLowestLight = Color(0xFFFFFFFF)
val surfaceContainerLowLight = Color(0xFFF3F4E9)
val surfaceContainerLight = Color(0xFFEEEFE3)
val surfaceContainerHighLight = Color(0xFFE8E9DE)
val surfaceContainerHighestLight = Color(0xFFE2E3D8)
val surfaceContainerLowLight = Color(0xFFF4F2FE)
val surfaceContainerLight = Color(0xFFEEEDF9)
val surfaceContainerHighLight = Color(0xFFE8E7F3)
val surfaceContainerHighestLight = Color(0xFFE2E1ED)


val primaryDark = Color(0xFFB1D18A)
val onPrimaryDark = Color(0xFF1F3701)
val primaryContainerDark = Color(0xFF354E16)
val onPrimaryContainerDark = Color(0xFFCDEDA3)
val secondaryDark = Color(0xFFBFCBAD)
val onSecondaryDark = Color(0xFF2A331E)
val secondaryContainerDark = Color(0xFF404A33)
val onSecondaryContainerDark = Color(0xFFDCE7C8)
val tertiaryDark = Color(0xFFA0D0CB)
val onTertiaryDark = Color(0xFF003735)
val tertiaryContainerDark = Color(0xFF1F4E4B)
val onTertiaryContainerDark = Color(0xFFBCECE7)
val primaryDark = Color(0xFFBAC3FF)
val onPrimaryDark = Color(0xFF00218D)
val primaryContainerDark = Color(0xFF4361EE)
val onPrimaryContainerDark = Color(0xFFF4F2FF)
val secondaryDark = Color(0xFFBAC3FF)
val onSecondaryDark = Color(0xFF202C64)
val secondaryContainerDark = Color(0xFF3A457E)
val onSecondaryContainerDark = Color(0xFFAAB5F6)
val tertiaryDark = Color(0xFFFAABFF)
val onTertiaryDark = Color(0xFF570066)
val tertiaryContainerDark = Color(0xFFAA41BA)
val onTertiaryContainerDark = Color(0xFFFFEFFB)
val errorDark = Color(0xFFFFB4AB)
val onErrorDark = Color(0xFF690005)
val errorContainerDark = Color(0xFF93000A)
val onErrorContainerDark = Color(0xFFFFDAD6)
val backgroundDark = Color(0xFF12140E)
val onBackgroundDark = Color(0xFFE2E3D8)
val surfaceDark = Color(0xFF12140E)
val onSurfaceDark = Color(0xFFE2E3D8)
val surfaceVariantDark = Color(0xFF44483D)
val onSurfaceVariantDark = Color(0xFFC5C8BA)
val outlineDark = Color(0xFF8F9285)
val outlineVariantDark = Color(0xFF44483D)
val backgroundDark = Color(0xFF12131B)
val onBackgroundDark = Color(0xFFE2E1ED)
val surfaceDark = Color(0xFF12131B)
val onSurfaceDark = Color(0xFFE2E1ED)
val surfaceVariantDark = Color(0xFF444655)
val onSurfaceVariantDark = Color(0xFFC4C5D7)
val outlineDark = Color(0xFF8E8FA1)
val outlineVariantDark = Color(0xFF444655)
val scrimDark = Color(0xFF000000)
val inverseSurfaceDark = Color(0xFFE2E3D8)
val inverseOnSurfaceDark = Color(0xFF2F312A)
val inversePrimaryDark = Color(0xFF4C662B)
val surfaceDimDark = Color(0xFF12140E)
val surfaceBrightDark = Color(0xFF383A32)
val surfaceContainerLowestDark = Color(0xFF0C0F09)
val surfaceContainerLowDark = Color(0xFF1A1C16)
val surfaceContainerDark = Color(0xFF1E201A)
val surfaceContainerHighDark = Color(0xFF282B24)
val surfaceContainerHighestDark = Color(0xFF33362E)
val inverseSurfaceDark = Color(0xFFE2E1ED)
val inverseOnSurfaceDark = Color(0xFF2F3039)
val inversePrimaryDark = Color(0xFF2E4EDC)
val surfaceDimDark = Color(0xFF12131B)
val surfaceBrightDark = Color(0xFF383942)
val surfaceContainerLowestDark = Color(0xFF0C0E16)
val surfaceContainerLowDark = Color(0xFF1A1B23)
val surfaceContainerDark = Color(0xFF1E1F28)
val surfaceContainerHighDark = Color(0xFF282932)
val surfaceContainerHighestDark = Color(0xFF33343D)
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,5 @@ interface NetworkServices {

suspend fun startDiscoveryAndAdvertising(httpServerPort: Int, fileTransferPort: Int)

/** Stops discovery and advertising, not transfer listeners. */
suspend fun stopDiscoveryAndAdvertising()
}
Loading
Loading