5f45a344b7
Sync change detection: - DbConverters was using epochSecond but comparisons used epochMilli — every file appeared modified on every scan, causing full re-sync each time - DB migration 2→3 clears sync_file_states (all stored timestamps wrong) - First sync after upgrade re-learns state; subsequent syncs skip unchanged files Biometric: - Move prompt trigger from LaunchedEffect to onResume() — guarantees the activity is in RESUMED state when authenticate() is called - Add bestAuthenticators(): tries BIOMETRIC_STRONG|DEVICE_CREDENTIAL first, falls back to BIOMETRIC_WEAK|DEVICE_CREDENTIAL for side-sensor phones - canAuthenticate() now accepts either strong or weak+credential - onAuthenticationError always shows Unlock button (no infinite retry loop) - isLocked/showRetry are Activity-level state, no need for Compose remember Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
10 lines
280 B
Kotlin
10 lines
280 B
Kotlin
package com.syncflow.data.db
|
|
|
|
import androidx.room.TypeConverter
|
|
import java.time.Instant
|
|
|
|
class DbConverters {
|
|
@TypeConverter fun fromInstant(v: Instant?): Long? = v?.toEpochMilli()
|
|
@TypeConverter fun toInstant(v: Long?): Instant? = v?.let { Instant.ofEpochMilli(it) }
|
|
}
|