Skip to content
Open
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 @@ -4,11 +4,13 @@ FiiO JM21(Android 13) 물리 키 전달 경로를 검증하기 위한 테스트

## 구현 포인트
- `MediaSessionService` 기반 포그라운드 서비스에서 미디어 키 수신
- 서비스 시작 시 앱 내부 저장소에 무음 WAV를 생성/반복 재생해 MediaSession 활성 상태를 유지(잠금/화면OFF 수신 안정화)
- `BroadcastReceiver`(`ACTION_MEDIA_BUTTON`) 보조 수신 경로 제공
- `Activity.dispatchKeyEvent` 로 foreground 수신도 함께 기록
- 수집 필드: timestamp, keyCode, action, repeatCount, longPress, eventTime, downTime, deviceId, flags
- 환경 필드: screen on/off, lock 상태, app foreground/background, service 상태, media session 활성 상태
- 로그 제어: 시작/정지/초기화/CSV 저장
- MP3 파일 열기/재생/±5초 탐색(수동 탐색 테스트용)

## 대상 키
- `KEYCODE_VOLUME_UP`
Expand Down
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ dependencies {

implementation("androidx.media3:media3-session:1.4.1")
implementation("androidx.media3:media3-exoplayer:1.4.1")
implementation("androidx.media:media:1.7.0")

debugImplementation("androidx.compose.ui:ui-tooling")
}
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

<application
android:allowBackup="true"
android:label="JM21 Key Logger"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.Material.Light.NoActionBar">

Expand Down
175 changes: 175 additions & 0 deletions app/src/main/assets/images/NOW_SCREEN/DESIGN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
---
name: Sonic Ember
colors:
surface: '#131313'
surface-dim: '#131313'
surface-bright: '#393939'
surface-container-lowest: '#0e0e0e'
surface-container-low: '#1c1b1b'
surface-container: '#201f1f'
surface-container-high: '#2a2a2a'
surface-container-highest: '#353534'
on-surface: '#e5e2e1'
on-surface-variant: '#ddc1ae'
inverse-surface: '#e5e2e1'
inverse-on-surface: '#313030'
outline: '#a48c7a'
outline-variant: '#564334'
surface-tint: '#ffb77d'
primary: '#ffb77d'
on-primary: '#4d2600'
primary-container: '#ff8c00'
on-primary-container: '#623200'
inverse-primary: '#904d00'
secondary: '#c8c6c5'
on-secondary: '#303030'
secondary-container: '#474746'
on-secondary-container: '#b7b5b4'
tertiary: '#ffb866'
on-tertiary: '#482900'
tertiary-container: '#e9982e'
on-tertiary-container: '#5b3600'
error: '#ffb4ab'
on-error: '#690005'
error-container: '#93000a'
on-error-container: '#ffdad6'
primary-fixed: '#ffdcc3'
primary-fixed-dim: '#ffb77d'
on-primary-fixed: '#2f1500'
on-primary-fixed-variant: '#6e3900'
secondary-fixed: '#e4e2e1'
secondary-fixed-dim: '#c8c6c5'
on-secondary-fixed: '#1b1c1c'
on-secondary-fixed-variant: '#474746'
tertiary-fixed: '#ffddba'
tertiary-fixed-dim: '#ffb866'
on-tertiary-fixed: '#2b1700'
on-tertiary-fixed-variant: '#673d00'
background: '#131313'
on-background: '#e5e2e1'
surface-variant: '#353534'
typography:
headline-xl:
fontFamily: Be Vietnam Pro
fontSize: 40px
fontWeight: '700'
lineHeight: 48px
letterSpacing: -0.02em
headline-lg:
fontFamily: Be Vietnam Pro
fontSize: 32px
fontWeight: '700'
lineHeight: 40px
letterSpacing: -0.01em
headline-md:
fontFamily: Be Vietnam Pro
fontSize: 24px
fontWeight: '600'
lineHeight: 32px
body-lg:
fontFamily: Be Vietnam Pro
fontSize: 18px
fontWeight: '400'
lineHeight: 28px
body-md:
fontFamily: Be Vietnam Pro
fontSize: 16px
fontWeight: '400'
lineHeight: 24px
label-md:
fontFamily: Be Vietnam Pro
fontSize: 14px
fontWeight: '600'
lineHeight: 20px
letterSpacing: 0.05em
label-sm:
fontFamily: Be Vietnam Pro
fontSize: 12px
fontWeight: '500'
lineHeight: 16px
letterSpacing: 0.03em
rounded:
sm: 0.25rem
DEFAULT: 0.5rem
md: 0.75rem
lg: 1rem
xl: 1.5rem
full: 9999px
spacing:
base: 4px
xs: 8px
sm: 16px
md: 24px
lg: 40px
xl: 64px
gutter: 20px
margin-mobile: 16px
margin-desktop: 32px
---

## Brand & Style

The brand personality of the design system is immersive, high-energy, and sophisticated. It is tailored for audiophiles and casual listeners alike who seek a premium, late-night listening experience. The UI evokes the feeling of a dark, high-end recording studio—intimate yet technologically advanced.

The design style combines **Minimalism** with **Glassmorphism**. By using deep charcoal foundations paired with translucent overlays, the system focuses the user's attention entirely on the album art and the music. The interaction model is fluid, utilizing subtle glows and motion to mimic the warmth of analog vacuum tubes and modern digital precision.

## Colors

The palette is centered on a high-energy primary orange against a void-like charcoal background.

- **Primary (#FF8C00):** Used sparingly for critical interaction points like play buttons, progress indicators, and active states.
- **Secondary (#282828):** Employed for elevated surfaces, such as card backgrounds or hover states, to provide depth without breaking the dark aesthetic.
- **Tertiary (#FFAB40):** A lighter, desaturated orange for hover states on primary elements or subtle iconography.
- **Neutral (#121212):** The true-dark canvas that ensures maximum contrast for text and vibrant album artwork.
- **Text:** Pure white (#FFFFFF) for headlines and high-emphasis labels; Medium Grey (#B3B3B3) for secondary metadata and body text.

## Typography

This design system utilizes **Be Vietnam Pro** for its contemporary, friendly, yet clean aesthetic. The typeface provides excellent readability in low-light environments.

Headlines use heavy weights and tight letter-spacing to create a bold, editorial feel for artist names and playlist titles. Labels utilize uppercase styling with slight tracking for utility elements like timestamps or category headers. All typography scales are optimized for a clear information hierarchy, ensuring track titles remain the focal point.

## Layout & Spacing

The design system employs a **Fluid Grid** model with a base-4 rhythm. On desktop, a 12-column grid is used for browsing, while the "Now Playing" view adopts a centered, focused layout.

Spacing is generous to prevent the UI from feeling cluttered. Gutters are fixed at 20px to maintain a breathable rhythm between album covers. Lateral margins scale from 16px on mobile to 32px on larger viewports. Consistent vertical rhythm is maintained by using the "md" (24px) spacing unit for most section headers and list groups.

## Elevation & Depth

Visual hierarchy is established through **Tonal Layers** and **Glassmorphism**. Because the background is a deep charcoal (#121212), elevation is conveyed by lightening the surface color rather than using traditional shadows.

- **Level 0:** Base background (#121212).
- **Level 1:** Navigation bars and sidebars using a semi-transparent blur (Backdrop Filter: 20px) to allow album art colors to bleed through subtly.
- **Level 2:** Player controls and cards, using the Secondary color (#282828).
- **Accents:** Active elements like the progress bar thumb or play button feature a soft orange outer glow (Box Shadow: 0 0 15px rgba(255, 140, 0, 0.4)) to simulate illumination.

## Shapes

The design system follows a **Rounded** shape language to evoke a modern, tactile feel.

- **Standard Elements:** Buttons, inputs, and track cards use a 0.5rem radius.
- **Containers:** Sidebars and main content areas use "rounded-xl" (1.5rem) when nested.
- **Media:** Album artwork maintains a 1rem radius to soften the visual impact of the grid.
- **Interactive:** Search bars and primary action buttons utilize the pill-shape style for maximum tap-target friendliness and visual distinction.

## Components

**Buttons:**
- Primary: Pill-shaped, #FF8C00 background with white text.
- Secondary: Ghost style with #FFFFFF borders and a subtle blur backdrop.

**Progress Bars:**
- Rail: 4px height, #282828 background.
- Fill: #FF8C00 with a 10px blurred "glow" at the leading edge.
- Thumb: Appears only on hover/scrub, 12px circle in #FFFFFF.

**Cards:**
- Artwork-centric. Titles are placed directly below the image. Hovering over a card reveals a floating play icon with a glassmorphic background.

**Lists:**
- Track lists use high-contrast white for titles and #B3B3B3 for artists/durations. Rows highlight with a #282828 background on hover.

**Additional Components:**
- **Visualizer:** A waveform component that reacts to audio, utilizing the Primary color with varying opacities.
- **Now Playing Bar:** A persistent bottom bar with a blurred background and a condensed view of the current track's metadata.
Loading