Skip to content

jamiepaak/AOSP-UiFramework

Repository files navigation

AOSP UI Framework

시스템 레벨 UI 컴포넌트 프레임워크. 모든 앱 위에 표시되는 시스템 UI를 SKManager.getUiManager() 한 줄로 사용.

컴포넌트

컴포넌트 용도 메서드
Top Bar 상단 고정 상태바 showTopBar(), updateTopBar(), hideTopBar()
Popup 시스템 팝업 (alert/confirm) alert(), confirm(), showPopup()
Banner 상단 슬라이드 배너 showBanner(), success(), error(), warning(), info()
Bottom Panel 하단 슬라이드업 메뉴 showBottomPanel()
Progress 프로그레스 오버레이 showProgress(), updateProgress(), hideProgress()
Floating Widget 드래그 가능 플로팅 위젯 showFloatingWidget(), removeFloatingWidget()
Kiosk Mode 키오스크 (상태바/네비바 숨김) enterKioskMode(), exitKioskMode()
Lock Screen PIN 잠금 화면 showLockScreen()

Quick Start

UiManager ui = SKManager.getUiManager();

// 시스템 팝업
ui.alert("알림", "작업 완료");
ui.confirm("삭제?", "되돌릴 수 없습니다", (id, result) -> {
    if (result == UiManager.PopupResult.POSITIVE) doDelete();
});

// 배너 (성공/에러/경고/정보)
ui.success("저장 완료");
ui.error("연결 실패");

// 상단 고정바
ui.showTopBar("status", "생산라인 정상", 0xFF4CAF50);

// 프로그레스
ui.showProgress("download", "다운로드 중...");
ui.updateProgress("download", 45, "45%...");
ui.hideProgress("download");

// 하단 패널
ui.showBottomPanel("선택", new String[]{"사진", "갤러리", "파일"}, (id, idx, item) -> {
    ui.info("선택: " + item);
});

// 키오스크 모드
ui.enterKioskMode("키오스크", 0xFF000000);
ui.showLockScreen("PIN 입력", 4, (id, pin) -> {
    if ("1234".equals(pin)) ui.exitKioskMode();
});

Architecture

App Process                          system_server
┌──────────────────┐                ┌──────────────────────────┐
│  SKManager       │                │                          │
│  └ getUiManager() ──Binder──→    │  UiManagerService        │
│     showTopBar()                  │    (sk_ui)               │
│     alert()                       │                          │
│     showBanner()                  │    WindowManager         │
│     showProgress()                │    TYPE_SYSTEM_OVERLAY   │
│     enterKioskMode()              │    TYPE_SYSTEM_ALERT     │
└──────────────────┘                └──────────────────────────┘

시스템 서비스이므로 SYSTEM_ALERT_WINDOW 권한 불필요.

AOSP Integration

  1. Framework 파일 복사 → frameworks/base/core/java/com/sk/ui/
  2. Service 파일 복사 → frameworks/base/services/core/java/com/sk/server/
  3. SystemServer에 서비스 등록
  4. SELinux policy 추가
  5. Android.bp에 AIDL 경로 추가

자세한 내용은 system-integration/ 참고.

File Structure

framework/core/java/com/sk/
├── SKManager.java              # 팩토리
└── ui/
    ├── IUiManager.aidl         # AIDL 인터페이스
    ├── IUiCallback.aidl        # 콜백 인터페이스
    └── UiManager.java          # 클라이언트 API

services/java/com/sk/server/
└── UiManagerService.java       # 서비스 구현 (WindowManager 기반)

sample-app/
└── MainActivity.java           # 전체 컴포넌트 데모

sepolicy/
├── service_contexts            # sk_ui 서비스 등록
└── sk_ui_service.te            # SELinux 타입 정의

Use Cases

  • 키오스크/POS: 상단 고정바 + 네비/상태바 숨김 + PIN 잠금
  • 공장 모니터링: 실시간 상태바 + 경고 팝업 + 배너 알림
  • MDM (기기 관리): 원격 팝업, 강제 잠금, 정책 안내
  • IoT 게이트웨이: 상태 표시 + 에러 알림 + 프로그레스
  • 디지털 사이니지: 키오스크 모드 + 스케줄링

About

AOSP system-level UI framework. Top bar, system popups, banners, bottom panels, progress overlay, floating widgets, kiosk mode — all via SKManager.getUiManager().

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors