시스템 레벨 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() |
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();
});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 권한 불필요.
- Framework 파일 복사 →
frameworks/base/core/java/com/sk/ui/ - Service 파일 복사 →
frameworks/base/services/core/java/com/sk/server/ - SystemServer에 서비스 등록
- SELinux policy 추가
- Android.bp에 AIDL 경로 추가
자세한 내용은 system-integration/ 참고.
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 타입 정의
- 키오스크/POS: 상단 고정바 + 네비/상태바 숨김 + PIN 잠금
- 공장 모니터링: 실시간 상태바 + 경고 팝업 + 배너 알림
- MDM (기기 관리): 원격 팝업, 강제 잠금, 정책 안내
- IoT 게이트웨이: 상태 표시 + 에러 알림 + 프로그레스
- 디지털 사이니지: 키오스크 모드 + 스케줄링