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
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ and rule traces back to a section (and often a community demand source) there.
| Navigation bar settings list every module (was still showing only the original four), with a searchable picker; the default bar stays Home + Calendar/Tasks/Inbox/Jarvis | Done |
| Downloader resolves session-bound player links (ThisVid and the rest of the kt_player family) by letting the page's own player run in an offscreen WebView and recording the media request, then downloads it with that session's Referer, Cookie and User-Agent; teaser/sprite/ad URLs are filtered out | Done |
| Brick tags are programmed on pairing (LifeOS MIME record + Android Application Record), so a tap flips a mode with the app closed and without a chooser; broader NDEF/TECH/TAG filters, tag id read from the record, and an NFC-off banner that opens NFC settings | Done |
| Brick inverse mode: pick the window you want socials shut (e.g. 08:00-22:00) and the tag becomes the way in, not out - each tap buys a set stretch of access (15/30/60/120 min or a typed value), capped at one, two, three or unlimited unlocks per window, with the count resetting when the window next starts. Outside the window nothing is blocked. Covered by unit tests | Done |
| One motion vocabulary app-wide (core:designsystem/Motion.kt): screens fade through each other with a barely-there scale, swapped content cross-fades (clock and Pastebin tabs, Brick list/editor, screen-time week/day stats, timer wheels/typed entry), banners fade in, and resizing layouts animate instead of snapping | Done |
| Deferred post-alpha: Glance home-screen widgets, HA WebSocket live state/zones, Vault unlock UI, first-run onboarding checklist (grants live in Settings → System access), FinTS bank sync | Planned |

**Google-free by design:** no Google service is ever called at runtime (no Play Services, no Google recognizer, no Google Maps). Remaining Google-*authored* open-source, fully on-device libraries: AndroidX/Jetpack (unavoidable on Android), MediaPipe (Gemma inference), ML Kit on-device OCR/barcode (no network) — swap candidates documented in the plan.
Expand Down
4 changes: 2 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ android {

defaultConfig {
applicationId = "com.lifeos"
versionCode = 20
versionName = "0.1.0-alpha.20"
versionCode = 21
versionName = "0.1.0-alpha.21"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

Expand Down
25 changes: 11 additions & 14 deletions app/src/main/kotlin/com/lifeos/app/ui/LifeOsApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ import com.lifeos.app.ui.screen.InboxTabScreen
import com.lifeos.app.ui.screen.TasksTabScreen
import com.lifeos.app.ui.settings.SettingsRoute
import com.lifeos.core.ui.navigation.LifeDestination
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.scaleIn
import com.lifeos.core.designsystem.component.LifeMotion
import com.lifeos.core.ui.navigation.TopLevelDestination
import com.lifeos.feature.adhd.FocusRoute
import com.lifeos.feature.agentic.MacrosRoute
Expand Down Expand Up @@ -135,23 +139,16 @@ fun LifeOsApp(captureRequests: Int = 0, navBarIds: List<String> = emptyList()) {
navController = navController,
startDestination = LifeDestination.Home,
modifier = Modifier.padding(innerPadding),
// Gentle shared-axis feel (§7 motion): quick fade + small vertical lift.
// One motion vocabulary (§7): screens fade through each other with a
// barely-there scale, nothing slides or bounces.
enterTransition = {
androidx.compose.animation.fadeIn(androidx.compose.animation.core.tween(220)) +
androidx.compose.animation.slideInVertically(
animationSpec = androidx.compose.animation.core.tween(220),
initialOffsetY = { it / 24 },
)
fadeIn(LifeMotion.enterSpec()) + scaleIn(LifeMotion.enterSpec(), initialScale = 0.98f)
},
exitTransition = { androidx.compose.animation.fadeOut(androidx.compose.animation.core.tween(140)) },
popEnterTransition = { androidx.compose.animation.fadeIn(androidx.compose.animation.core.tween(220)) },
popExitTransition = {
androidx.compose.animation.fadeOut(androidx.compose.animation.core.tween(140)) +
androidx.compose.animation.slideOutVertically(
animationSpec = androidx.compose.animation.core.tween(140),
targetOffsetY = { it / 24 },
)
exitTransition = { fadeOut(LifeMotion.exitSpec()) },
popEnterTransition = {
fadeIn(LifeMotion.enterSpec()) + scaleIn(LifeMotion.enterSpec(), initialScale = 1.01f)
},
popExitTransition = { fadeOut(LifeMotion.exitSpec()) },
) {
composable<LifeDestination.Home> {
HomeScreen(onNavigate = { navController.navigate(it) })
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/kotlin/com/lifeos/app/ui/screen/HomeScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import androidx.compose.material3.IconButton
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import com.lifeos.core.designsystem.component.smoothSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateListOf
Expand Down Expand Up @@ -354,7 +355,7 @@ private fun ReorderableTileGrid(
contentPadding = PaddingValues(horizontal = 16.dp, vertical = 4.dp),
horizontalArrangement = Arrangement.spacedBy(12.dp),
verticalArrangement = Arrangement.spacedBy(if (listLayout) 8.dp else 12.dp),
modifier = Modifier.pointerInput(listLayout) {
modifier = Modifier.smoothSize().pointerInput(listLayout) {
detectDragGesturesAfterLongPress(
onDragStart = { position ->
itemAt(position)?.let { info ->
Expand Down
Loading
Loading