Skip to content

feat: 설정 화면, 키 프리뷰, 상용구, 스킨 시스템 등 다수 기능 추가#12

Open
verlane wants to merge 20 commits into
AiOO:mainfrom
verlane:feature/settings
Open

feat: 설정 화면, 키 프리뷰, 상용구, 스킨 시스템 등 다수 기능 추가#12
verlane wants to merge 20 commits into
AiOO:mainfrom
verlane:feature/settings

Conversation

@verlane
Copy link
Copy Markdown

@verlane verlane commented Apr 21, 2026

Summary

  • 설정 화면 추가: 모아키 모드 전환, 롱키 시간, 스페이스바 롱키, 자동 마침표 등 설정 항목 추가
  • 키 프리뷰 팝업: 자음 키 입력 시 글자 프리뷰 표시 (1.5배 크기 확대, 전체 키 적용)
  • 상용구 입력 기능: ㅋ/ㅌ/ㅊ/ㅍ 및 쌍자음 키에 상용구 입력 지원, 한글/영문 통합 팝업 UI
  • 자음 롱키 숫자 입력: ㅂㅈㄷㄱㅅ/ㅁㄴㅇㄹㅎ 롱키에 숫자(1~0) 입력
  • 키보드 스킨 시스템: 스킨 추가 및 연동 개선
  • 엔터/한영 롱키 확장: 전체 키보드에 엔터 롱키 및 한/영 설정 롱키 적용
  • 방향키 한손모드 개선: 전체 복사/선택/자르기 2줄 표시
  • 버그 수정: Handler 누수 방지, 타입 안전성 개선, 프리뷰 복원, 스와이프 오동작 수정 등

Test plan

  • 한국어 키보드에서 자음 키 프리뷰 팝업 정상 표시 확인
  • 상용구 키 입력 및 팝업 UI 확인 (한글/영문 모두)
  • 자음 롱키로 숫자 입력 확인
  • 설정 화면 각 항목 정상 동작 확인 (롱키 시간, 스킨, 스페이스바 롱키 등)
  • 스킨 변경 시 키보드 UI 정상 반영 확인
  • 엔터 롱키 / 한영 롱키 전체 키보드에서 동작 확인
  • 방향키 한손모드 복사/선택/자르기 2줄 표시 확인
  • 기존 한글 입력 기능 회귀 없음 확인

verlane added 20 commits April 20, 2026 18:17
- 설정 화면(SettingsActivity) 추가: 한글 입력 모드, 키패드 높이, 한손 모드 설정
- 모아키 레이아웃(open_moa_view_moakey) 추가 및 OpenMoaView에서 모드 전환 지원
- LanguageKey 길게 누르면 설정 화면 열기(OPEN_SETTINGS 특수키 추가)
- HangulInputMode, KeypadHeight, OneHandMode config 클래스 추가
- SettingsPreferences로 SharedPreferences 접근 일원화
- 자음 키 터치 시 키 위쪽에 반투명 팝업으로 입력될 글자 표시
- 드래그 중 조합 글자 실시간 업데이트 (예: ㅇ → 오른쪽 스와이프 → 아)
- PopupWindow 사용으로 SYSTEM_ALERT_WINDOW 권한 불필요
- 설정 화면에서 키 미리보기 ON/OFF 토글 지원
- 자음 키 오른쪽 위에 상용구 첫 글자 뱃지 표시
- 탭: 상용구 전체 텍스트 입력
- 드래그: 기존 자음+모음 제스처 동작 유지
- 롱키: 팝업 메뉴 표시 (상용구 내용 / 수정 / 취소, 스와이프 선택)
  - 상용구 내용 선택 시 텍스트 입력
  - 수정 선택 시 QuickPhraseEditActivity 팝업 실행
- 상용구 키 터치 시 키 프리뷰 미표시
- QuickPhraseEditActivity: 스피너로 키 선택, EditText로 내용 편집
- SettingsActivity에 상용구 섹션 추가
- longPressThresholdTime은 Config 공통 설정값 사용
- JaumKeyTouchListener에 numberChar 파라미터 추가
- 롱프레스 시 프리뷰 팝업 자음→숫자로 전환, 손가락 뗄 때 숫자 전송
- 롱프레스 진입 후 드래그는 무시하고 숫자 입력 유지 (B안)
- 양손모드/모아키 모드 두 레이아웃에 1~0 숫자 뱃지 표시
- key_preview_popup.xml: 52dp→78dp, 32sp→48sp, 8dp→12dp (1.5배)
- SimpleKeyTouchListener: previewController 파라미터 추가, 문자 키 DOWN/UP/CANCEL 처리
- CrossKeyTouchListener: List<StringKeyMessage> 타입 강제, resolveKey() 추출, MOVE에서 방향별 실시간 업데이트
- FunctionalKeyTouchListener: previewController 추가, view.text로 프리뷰 표시, named param 명시
- OpenMoaView: 특수키 제외 모든 문자 키에 previewController 전달
- QuertyView: KoinComponent 추가, lazy previewController, 문자/숫자 키 프리뷰 적용
- PunctuationView: 동일 패턴으로 기호 키 프리뷰 적용
- SpaceLongPressAction enum 추가 (IME 선택 팝업/언어 전환/없음)
- SpaceKeyTouchListener 추가: 롱키 감지, 발동 시 공백 입력 억제 및 배경 수동 복원
- SpecialKey.SHOW_IME_PICKER 추가 및 OpenMoaIME에서 InputMethodManager.showInputMethodPicker() 호출
- 자동 마침표: 1초 이내 스페이스 두 번 입력 시 ". " 로 대체 (기본 Off)
- 7개 키보드 뷰(OpenMoaView x2, QuertyView, ArrowView, NumberView, PhoneView, PunctuationView) 스페이스 리스너 교체
- 설정 화면에 스페이스 롱키 기능(라디오), 자동 마침표 입력(스위치) 항목 추가
- KeyboardSkin enum 추가 (화이트/다크그레이/블랙/블루/그린, 기본값: 다크그레이)
- SkinApplier: 키 배경, 텍스트색, 프리뷰 배경, 키보드 배경색 생성 유틸
- 설정 화면에 키보드 스킨 선택 항목 추가
- 설정 변경 후 키보드로 돌아올 때 스킨 즉시 재적용 (onStartInputView 감지)
- 키 프리뷰 팝업 색상을 스킨에 맞게 적용
- 한손 입력 모드 빈 영역 및 네비게이션 바 배경색을 스킨 색상으로 설정
- 네비게이션 바 아이콘 색상을 스킨 밝기에 따라 자동 조정
- 키 탭 시 배경색이 흰색으로 변경되는 버그 수정 (BaseKeyTouchListener)
- Config를 data class에서 class로 변경하여 longPressThresholdTime, keyPreviewEnabled를 getter로 전환, 설정 변경 시 앱 재시작 없이 즉시 반영
- configModule을 Config(androidContext()) 형태로 단순화
- 한손모드 활성 시 이모티콘 키 크기를 20sp → 16sp(80%)로 축소
- PhraseKey 인터페이스 도입으로 QuickPhraseKey, QwertyLongKey 공통화
- QuickPhraseEditActivity + QwertyLongKeyEditActivity → PhraseEditActivity 하나로 통합
- 영문 롱키 팝업에 Spinner 추가하여 한글 팝업과 동일한 UX 제공
- 버튼 명칭 변경: OK → 저장, Cancel → 취소
- 버튼 순서 변경: [기본값] 왼쪽 고정, [취소][저장] 오른쪽 정렬
- 버튼 minWidth="0dp" 적용으로 Cancel 줄바꿈 현상 해결
- KeypadHeight 명칭 변경: 낮게 → 보통(기본)
- 팝업 인스턴스 공유 버그 수정: 키마다 QuickPhraseMenuPopup 개별 생성
- onWindowFocusChanged에서 keyHint 갱신하여 stale 표시 문제 해결
- PhraseKey 인터페이스에 name 추가로 unsafe cast 제거
- SettingsActivity commit() → apply() 변경 (메인 스레드 블로킹 방지)
- 상용구 수정 팝업 타이틀 한글/영문 통일
- QuertyView에 configurableLongKeyListeners 수집, onDetachedFromWindow/onWindowFocusChanged(false)에서 cancel() 호출
- importSettings에서 json.get() 런타임 타입 추측 제거 -> 알려진 Boolean/String 키를 optBoolean/optString으로 명시 처리
- UserCharKey enum 추가: ~ ^ ; * ! ? . 7개 키 (PhraseKey 구현)
- UserCharKeyTouchListener 추가: 탭→문자 입력, 롱탭→수정화면 바로 오픈
- PhraseEditActivity에 TYPE_USER_CHAR 추가, 첫 코드포인트만 저장
- OpenMoaView: 투핸드 4개(~^;*), 모아키 7개 전체 터치 리스너 교체
- 키보드 표시 시 onStartInputView에서 사용자 문자 라벨 갱신
- SettingsPreferences.ALL_KEYS에 UserCharKey prefKey 포함 (export/import 반영)
- 영문 자동 대문자 on/off 설정 추가
- 스페이스/엔터 길게 누름 기능 설정 추가 (방향키, 키보드 선택, 언어 전환, 없음)
- 한글/영문 단축키 명칭 정리 (상용구 → 단축키)
- 설정 메뉴 순서 정리 및 롱키 → 길게 누름 용어 통일
- importSettings 타입 안전성 개선 (optString null 전달 제거)
- 기호/방향키/숫자/전화/이모지 키보드의 엔터키를 SimpleKeyTouchListener에서
  EnterKeyTouchListener로 교체하여 롱키 동작 활성화
- 영문/기호/방향키/숫자 키보드의 한/영 키를 LanguageKeyTouchListener로 교체하여
  롱프레스(300ms) 시 설정 화면 열기 기능 추가
- LanguageKeyTouchListener에 cancel() 메서드 추가 (Timer 누수 방지)
- 각 뷰의 onDetachedFromWindow()에서 enterKeyListener/languageKeyListener cancel 처리
- 기호/영문/방향키/숫자 키보드 한/영 키 레이아웃을 LinearLayout으로 변경하여
  한글 키보드와 동일하게 '설정' 힌트 텍스트 표시
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant