Portfolio / Kotlin / Android lane / one-ui-home-clone
KT

one-ui-home-clone

Samsung One UI 7 parity launcher — Compose, clone not a port

KotlinAndroid
Delivery
Source-first
Browse code, README, and release notes on GitHub.
Primary lane
Kotlin / Android lane
The clearest adjacent context for this project inside the portfolio.
Freshness
Updated Apr 25, 2026
Latest release
No tag yet
README is the clearest project overview right now.

Preview

Using the generated project card as a clean fallback until a live capture is available.

one-ui-home-clone card

Source at github.com/SysAdminDoc/one-ui-home-clone.

README

Cached at build time, cleaned up for in-site reading, and linked back to the canonical GitHub source.

One UI Home Clone icon

One UI Home Clone

![Version](https://img.shields.io/badge/version-0.2.0-4A88FF) ![License](https://img.shields.io/badge/license-MIT-4A88FF) ![Platform](https://img.shields.io/badge/platform-Android%208.0%2B-4A88FF) ![Stack](https://img.shields.io/badge/stack-Kotlin%20%2B%20Compose-4A88FF)

A standalone Kotlin/Compose Android launcher pursuing Samsung One UI 7 parity — layout, motion, terminology, settings structure, and default behavior. Clone, not a port: no Samsung proprietary assets or brand names shipped.

What makes this different

Unlike Lawnchair / Niagara / OpenLauncher, the project's north star is Samsung parity, not launcher power-user features. Copy behavior before adding customization. A Samsung user should pick it up without relearning navigation.

What lives here

Current state (v0.2.0)

Compose-first prototype covering:

  • One UI style home surface with widget hero card, wallpaper atmosphere, page indicator
  • Samsung-style app drawer shell with Finder search (grouped results, recent searches, settings hits)
  • Unified edit-mode tray (Wallpaper, Themes, Widgets, Home screen settings)
  • Widget picker overlay + widget preview strip
  • Folder bubble + folder open overlay
  • Hide-apps overlay (Samsung "clean view" equivalent)
  • Page manager panel with reorderable preview tiles
  • Notification shade overlay
  • Full settings surface with Samsung section ordering + terminology

v0.2.0 landed the widgets + persistence + motion primitives:

  • LauncherDataStore — DataStore Preferences mirror with one-shot migration from the v0.1.0 SharedPreferences file (live DataStore flow; LauncherPreferences remains the sole writer until the monolith split cuts call sites over)
  • WidgetPersistence — versioned JSON widget-ID store on its own DataStore file, bounds-checked decode (128 KB / 1024 entries) to contain corrupt-file blast radius
  • MotionScheme + ProvideMotionScheme — Standard / Reduced presets exposed as raw SpringParams, threaded through a LocalMotionScheme CompositionLocal. Platform ANIMATOR_DURATION_SCALE == 0 forces Reduced
  • WidgetBindContract — stateless ActivityResultContract for ACTION_APPWIDGET_BIND that round-trips the allocated widget ID through an Intent extra so process death during the bind dialog still deallocates correctly on cancel
  • WidgetPreviewLoaderpreviewLayout (API 31+) → previewImage → provider icon fallback
  • Dep bumps: Compose BOM 2024.01 → 2024.10.01 (Compose 1.7 / Material3 1.3), Kotlin 1.9.22 → 1.9.24, core-ktx / activity-compose / lifecycle / material advanced to current stable; datastore-preferences 1.1.1 added

Motion preset wiring is seeded at composition — live switch without Activity recreate ships when the settings toggle lands. Widget bind / preview / persistence are plumbed but not yet consumed by the picker UI; that's v0.2.x follow-up work alongside drop-to-edge page creation and widget resize handles.

Build the prototype

From repo root:

# Git Bash / Linux / macOS
cd prototype-android
JAVA_HOME="/c/Program Files/Android/openjdk/jdk-21.0.8" ./gradlew assembleDebug
# PowerShell
cd prototype-android
$env:JAVA_HOME='C:\Program Files\Android\openjdk\jdk-21.0.8'
$env:Path="$env:JAVA_HOME\bin;$env:Path"
.\gradlew.bat assembleDebug

APK output: prototype-android/app/build/outputs/apk/debug/app-debug.apk

Install as launcher

adb install -r prototype-android/app/build/outputs/apk/debug/app-debug.apk
adb shell am start -a android.intent.action.MAIN -c android.intent.category.HOME
# then select "One UI Home Clone" → "Always"

Roadmap

See ROADMAP.md. Near-term themes:

  1. Real AppWidgetHost integration (v0.2.x)
  2. Drop-to-edge page creation + widget resize handles (v0.2.x)
  3. Motion parity — 240fps reference captures → Compose spring() parameters (v0.3.x)
  4. Landscape + foldable posture support (v0.4.x)
  5. Optional tribalfs/oneui-design AndroidView interop for SwitchBar / ToolbarLayout fidelity (v0.5.x)

Samsung, One UI, and related marks are trademarks of Samsung Electronics Co., Ltd. This project ships no Samsung copyrighted assets, logos, wallpapers, or glyph sets. All visual elements are original, inspired-by, or CC-licensed. See references/clone-brief.md for the trademark boundary.

License

MIT — see LICENSE.

Read on GitHub → github.com/SysAdminDoc/one-ui-home-clone