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
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [Unreleased]

## [0.6.0] - 2026-09-30

### Changed

- Rebuild the common nearby-network contract around four direct actions: start and stop discovery, plus start and stop advertising.
- Introduce the new Android `NsdManager` implementation and select it through Android dependency injection. The implementation keeps separate modern and legacy discovery paths, a serialized legacy resolver, and one registration listener for advertising.
- Simplify the shared network-services controller to start servers once and directly start, stop, or retry nearby sharing without carrying duplicate UI intent/error fields.
- Derive Send-screen discovery actions from platform-reported discovery status instead of a separate enabled boolean.
- Split Desktop and iOS discovery/advertising operations to match the new common contract.
- Prepare Android, Desktop, and iOS packages as `0.6.0`; Android and iOS build numbers are `10`.

### Known limitations

- This release is primarily a developer-ownership and readability rebuild. Normal Android foreground discovery, addition, and removal have been manually observed, but broader lifecycle and failure validation is still pending.
- Android 17 local-network permission handling is still not implemented.

## [0.5.2] - 2026-09-19

### 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 = 9
versionName = "0.5.2"
versionCode = 10
versionName = "0.6.0"
}

buildFeatures {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package com.liftley.sync360

import android.app.Application
import android.util.Log
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.ProcessLifecycleOwner
import com.liftley.sync360.core.di.androidModule
import com.liftley.sync360.core.di.initKoinSync360
import com.liftley.sync360.data.NetworkServicesController
Expand All @@ -14,7 +18,19 @@ class Sync360Application : Application() {
}

val networkServices = koinApplication.koin.get<NetworkServicesController>()
networkServices.startNetworkServices(discoveryAllowedAtStartup = false)
AndroidNearbyDiscoveryObserver(networkServices).observeAppVisibility()

ProcessLifecycleOwner.get().lifecycle.addObserver(
object : DefaultLifecycleObserver {
override fun onStart(owner: LifecycleOwner) {
networkServices.startNetworkServices()
Log.d("LC", "visible")
}

override fun onStop(owner: LifecycleOwner) {
networkServices.stopNetworkServices()
Log.d("LC", "hidden")
}
}
)
}
}
4 changes: 2 additions & 2 deletions 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.2"
packageVersion = "0.6.0"
appResourcesRootDir.set(
project.layout.projectDirectory.dir("packaging/app-resources")
)
Expand Down Expand Up @@ -67,4 +67,4 @@ tasks.matching { it.name == "hotRun" }.configureEach {
languageVersion.set(JavaLanguageVersion.of(23))
})
}
}
}
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.2`.
The current package version is `0.6.0`.

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.2 UI validation
## 0.6.0 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.2 have not been recorded in this preparation task.
Build and device validation for 0.6.0 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=9
MARKETING_VERSION=0.5.2
CURRENT_PROJECT_VERSION=10
MARKETING_VERSION=0.6.0
Loading
Loading