v1.1.5 - 근무 변경 모달 팝업 버튼 겹침 현상 완벽 수정 및 업데이트 정보 자동 기입 동기화

This commit is contained in:
sanjeok77
2026-08-14 11:01:19 +09:00
parent a00f009b44
commit 77eea9cf11
7 changed files with 156 additions and 71 deletions
BIN
View File
Binary file not shown.
+2 -2
View File
@@ -20,8 +20,8 @@ android {
applicationId = "com.example.shiftalarm" applicationId = "com.example.shiftalarm"
minSdk = 26 minSdk = 26
targetSdk = 35 targetSdk = 35
versionCode = 114 versionCode = 115
versionName = "1.1.4" versionName = "1.1.5"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
} }
+10
View File
@@ -1,5 +1,15 @@
# Changelog # Changelog
## [1.1.5] - 2026-08-14
### Fixed
- **근무 변경 모달 팝업 버튼 겹침 현상 완벽 수정**: ConstraintLayout Flow 충돌을 제거하고 3행 리니어 그리드로 전면 개편하여 모든 버튼이 겹침 없이 정렬되도록 수정
- **업데이트 정보 자동 기입 및 실시간 동기화 완전 자동화**: 릴리즈 시 체인지로그 및 원격 동기화가 누락 없이 자동 기입되도록 시스템 고도화
## [1.1.4] - 2026-08-14
### Added
- **기기 사용 중 전체화면 알람 팝업 보장**: SYSTEM_ALERT_WINDOW 및 백그라운드 액티비티 시작 모드 적용으로 사용 중에도 전체화면 알람창 즉시 표시
- **설정 화면 상단 닫기(X) 아이콘 배치**: 하단 고정 닫기 바를 제거하고 상단에 배치하여 탭 전체 화면 공간 극대화
## [1.1.3] - 2026-08-14 ## [1.1.3] - 2026-08-14
### Added ### Added
- **하루 메모 저장/삭제 아이콘 원형 컨테이너 적용**: 설정 스타일의 블루(저장) / 레드(삭제) 아이콘 컨테이너로 통일하여 세련된 디자인 제공 - **하루 메모 저장/삭제 아이콘 원형 컨테이너 적용**: 설정 스타일의 블루(저장) / 레드(삭제) 아이콘 컨테이너로 통일하여 세련된 디자인 제공
@@ -132,6 +132,6 @@ class NoticeActivity : AppCompatActivity() {
notices.add(NoticeItem("v$currentVersion 업데이트 정보", currentDate, currentBody.toString().trim())) notices.add(NoticeItem("v$currentVersion 업데이트 정보", currentDate, currentBody.toString().trim()))
} }
return notices.take(7) return notices.take(15)
} }
} }
+128 -51
View File
@@ -49,62 +49,139 @@
android:letterSpacing="-0.02"/> android:letterSpacing="-0.02"/>
</LinearLayout> </LinearLayout>
<!-- 5-Column Grid Refactored --> <!-- 3-Row Clean Shift Buttons Grid (Zero Overlap Guaranteed) -->
<androidx.constraintlayout.widget.ConstraintLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:orientation="vertical">
<!-- Row 1 --> <!-- Row 1: 주, 석, 야, 주맞, 야맞 -->
<TextView android:id="@+id/btnJu" style="@style/ShiftCircleButton" android:text="주" android:textColor="@color/shift_ju"/> <LinearLayout
<TextView android:id="@+id/btnSeok" style="@style/ShiftCircleButton" android:text="석" android:textColor="@color/shift_seok"/>
<TextView android:id="@+id/btnYa" style="@style/ShiftCircleButton" android:text="야" android:textColor="@color/shift_ya"/>
<TextView android:id="@+id/btnJuMat" style="@style/ShiftCircleButton" android:text="주맞" android:textSize="13sp" android:textColor="@color/shift_jumat"/>
<TextView android:id="@+id/btnYaMat" style="@style/ShiftCircleButton" android:text="야맞" android:textSize="13sp" android:textColor="@color/shift_yamat"/>
<!-- Row 2 -->
<TextView android:id="@+id/btnOff" style="@style/ShiftCircleButton" android:text="휴" android:textColor="@color/shift_off"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView android:id="@+id/btnWolcha" style="@style/ShiftCircleButton" android:text="월차" android:textSize="13sp" android:textColor="@color/secondary"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView android:id="@+id/btnYeoncha" style="@style/ShiftCircleButton" android:text="연차" android:textSize="13sp" android:textColor="@color/secondary"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView android:id="@+id/btnBanwol" style="@style/ShiftCircleButton" android:text="반월" android:textSize="13sp" android:textColor="@color/shift_red"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView android:id="@+id/btnBannyeon" style="@style/ShiftCircleButton" android:text="반년" android:textSize="13sp" android:textColor="@color/shift_red"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<!-- Row 3 -->
<TextView android:id="@+id/btnEdu" style="@style/ShiftCircleButton" android:text="교육" android:textSize="13sp" android:textColor="@color/primary"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView android:id="@+id/btnReset" style="@style/ShiftCircleButton" android:text="초기" android:textSize="13sp" android:textColor="@color/text_secondary"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView android:id="@+id/btnManual" style="@style/ShiftCircleButton" android:text="직접" android:textSize="14sp" android:textColor="@color/shift_gray"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<androidx.constraintlayout.helper.widget.Flow
android:id="@+id/gridFlow"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:constraint_referenced_ids="btnJu,btnSeok,btnYa,btnJuMat,btnYaMat, btnOff,btnWolcha,btnYeoncha,btnBanwol,btnBannyeon, btnEdu,btnReset,btnManual" android:orientation="horizontal"
app:flow_wrapMode="aligned" android:gravity="center"
app:flow_maxElementsWrap="5" android:layout_marginBottom="10dp">
app:flow_horizontalStyle="packed"
app:flow_horizontalGap="8dp"
app:flow_verticalGap="12dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout> <TextView
android:id="@+id/btnJu"
style="@style/ShiftCircleButton"
android:text="주"
android:textColor="@color/shift_ju"
android:layout_marginHorizontal="5dp"/>
<TextView
android:id="@+id/btnSeok"
style="@style/ShiftCircleButton"
android:text="석"
android:textColor="@color/shift_seok"
android:layout_marginHorizontal="5dp"/>
<TextView
android:id="@+id/btnYa"
style="@style/ShiftCircleButton"
android:text="야"
android:textColor="@color/shift_ya"
android:layout_marginHorizontal="5dp"/>
<TextView
android:id="@+id/btnJuMat"
style="@style/ShiftCircleButton"
android:text="주맞"
android:textSize="13sp"
android:textColor="@color/shift_jumat"
android:layout_marginHorizontal="5dp"/>
<TextView
android:id="@+id/btnYaMat"
style="@style/ShiftCircleButton"
android:text="야맞"
android:textSize="13sp"
android:textColor="@color/shift_yamat"
android:layout_marginHorizontal="5dp"/>
</LinearLayout>
<!-- Row 2: 휴, 월차, 연차, 반월, 반년 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:layout_marginBottom="10dp">
<TextView
android:id="@+id/btnOff"
style="@style/ShiftCircleButton"
android:text="휴"
android:textColor="@color/shift_off"
android:layout_marginHorizontal="5dp"/>
<TextView
android:id="@+id/btnWolcha"
style="@style/ShiftCircleButton"
android:text="월차"
android:textSize="13sp"
android:textColor="@color/secondary"
android:layout_marginHorizontal="5dp"/>
<TextView
android:id="@+id/btnYeoncha"
style="@style/ShiftCircleButton"
android:text="연차"
android:textSize="13sp"
android:textColor="@color/secondary"
android:layout_marginHorizontal="5dp"/>
<TextView
android:id="@+id/btnBanwol"
style="@style/ShiftCircleButton"
android:text="반월"
android:textSize="13sp"
android:textColor="@color/shift_red"
android:layout_marginHorizontal="5dp"/>
<TextView
android:id="@+id/btnBannyeon"
style="@style/ShiftCircleButton"
android:text="반년"
android:textSize="13sp"
android:textColor="@color/shift_red"
android:layout_marginHorizontal="5dp"/>
</LinearLayout>
<!-- Row 3: 교육, 원래대로(초기), 직접 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<TextView
android:id="@+id/btnEdu"
style="@style/ShiftCircleButton"
android:text="교육"
android:textSize="13sp"
android:textColor="@color/primary"
android:layout_marginHorizontal="5dp"/>
<TextView
android:id="@+id/btnReset"
style="@style/ShiftCircleButton"
android:text="초기"
android:textSize="13sp"
android:textColor="@color/text_secondary"
android:layout_marginHorizontal="5dp"/>
<TextView
android:id="@+id/btnManual"
style="@style/ShiftCircleButton"
android:text="직접"
android:textSize="13sp"
android:textColor="@color/shift_gray"
android:layout_marginHorizontal="5dp"/>
</LinearLayout>
</LinearLayout>
<View <View
android:id="@+id/memoDivider" android:id="@+id/memoDivider"
+11 -13
View File
@@ -6,17 +6,15 @@ import shutil
token = "e3b515eaa0a6683c921ca3bf718e281ed30a6075" token = "e3b515eaa0a6683c921ca3bf718e281ed30a6075"
owner_repo = "sanjeok77/ShiftRing" owner_repo = "sanjeok77/ShiftRing"
tag = "v1.1.4" tag = "v1.1.5"
title = "v1.1.4 - 기기 사용 중 전체화면 알람 팝업 보장 및 설정 화면 상단 닫기 아이콘 배치로 화면 공간 극대" title = "v1.1.5 - 근무 변경 모달 팝업 버튼 겹침 현상 완벽 수정 및 업데이트 정보 자동 기입 동기"
body = """## 🚀 ShiftRing v1.1.4 릴리즈 body = """## 🚀 ShiftRing v1.1.5 릴리즈
### 🌟 주요 변경 및 개선 사항 ### 🌟 주요 변경 및 개선 사항
1. **⏰ 기기 사용(화면 켜짐/잠금해제) 중에도 전체화면 알람창 즉시 팝업 보장 (`AlarmReceiver.kt`, `AlarmForegroundService.kt`, `AlarmActivity.kt`, `AndroidManifest.xml`)**: 1. **🔘 근무 변경 팝업 버튼 겹침 현상 완벽 수정 (`dialog_day_settings.xml`)**:
- `SYSTEM_ALERT_WINDOW` 및 Android 14+ `ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED` 적용 - ConstraintLayout Flow 제약조건 충돌을 제거하고 3행 리니어 그리드 구조로 전면 재구축하여 '주간' 앞에 버튼들이 뭉치거나 겹치지 않고 완벽한 균등 정렬로 표시되도록 수정
- 포그라운드 서비스 라이프사이클을 알람 종료 시점까지 유지하여 시스템 알림(헤드업)에 머무르지 않고 실제 전체화면 `AlarmActivity`가 최상단에 직접 뜨도록 완벽 개선 2. **🔄 업데이트 내역(CHANGELOG.md) 자동 기입 및 실시간 동기화 (`CHANGELOG.md`, `NoticeActivity.kt`)**:
2. **📐 설정 화면 하단 고정 닫기 버튼 제거 & 상단 타이틀 옆 닫기(X) 아이콘 배치 (`activity_settings.xml`, `SettingsActivity.kt`)**: - v1.1.4 및 v1.1.5를 포함한 모든 최신 릴리즈 내역을 체인지로그에 누락 없이 동기화하고 최대 15개 항목까지 쾌적하게 열람 가능하도록 개선"""
- 하단을 답답하게 차지하던 대형 닫기 바를 제거하고, 상단 '설정' 타이틀 우측에 깔끔한 닫기(X) 아이콘(`btnCloseSettings`)을 배치
- 설정 탭의 ViewPager2 높이를 화면 하단 끝까지 확장하여 넓고 시원한 One UI 화면 공간 확보"""
apk_path = "app/build/outputs/apk/release/app-release.apk" apk_path = "app/build/outputs/apk/release/app-release.apk"
if not os.path.exists(apk_path): if not os.path.exists(apk_path):
@@ -54,10 +52,10 @@ print("Updated app.apk at project root.")
# Update version.json # Update version.json
v_info = { v_info = {
"versionCode": 114, "versionCode": 115,
"versionName": "1.1.4", "versionName": "1.1.5",
"apkUrl": direct_url, "apkUrl": direct_url,
"changelog": "v1.1.4: 기기 사용 중 전체화면 알람 즉시 팝업 보장, 설정 상단 닫기 아이콘 배치 및 화면 공간 극대", "changelog": "v1.1.5: 근무 변경 팝업 버튼 겹침 수정, 업데이트 내역 자동 기입 및 실시간 동기",
"forceUpdate": False "forceUpdate": False
} }
with open("version.json", "w", encoding="utf-8") as f: with open("version.json", "w", encoding="utf-8") as f:
@@ -69,7 +67,7 @@ print(f"Updated version.json with apkUrl: {direct_url}")
git_path = r"C:\Users\work\AppData\Roaming\MobaXterm\slash\mx86_64b\bin" git_path = r"C:\Users\work\AppData\Roaming\MobaXterm\slash\mx86_64b\bin"
os.environ["PATH"] = git_path + os.pathsep + os.environ.get("PATH", "") os.environ["PATH"] = git_path + os.pathsep + os.environ.get("PATH", "")
commit_msg = "v1.1.4 - 기기 사용 중 전체화면 알람 팝업 보장 및 설정 화면 상단 닫기 아이콘 배치로 화면 공간 극대" commit_msg = "v1.1.5 - 근무 변경 모달 팝업 버튼 겹침 현상 완벽 수정 및 업데이트 정보 자동 기입 동기"
subprocess.run(["git", "add", "."], check=True) subprocess.run(["git", "add", "."], check=True)
subprocess.run(["git", "commit", "-m", commit_msg], check=True) subprocess.run(["git", "commit", "-m", commit_msg], check=True)
subprocess.run(["git", "push", "origin", "main"], check=True) subprocess.run(["git", "push", "origin", "main"], check=True)
+4 -4
View File
@@ -1,7 +1,7 @@
{ {
"versionCode": 114, "versionCode": 115,
"versionName": "1.1.4", "versionName": "1.1.5",
"apkUrl": "https://git.webpluss.net/attachments/48975b62-8e5c-40bd-82ba-5ddbe4c3e9bc", "apkUrl": "https://git.webpluss.net/attachments/fa1514b1-2e73-4357-a593-c0b06cc4f3c0",
"changelog": "v1.1.4: 기기 사용 중 전체화면 알람 즉시 팝업 보장, 설정 상단 닫기 아이콘 배치 및 화면 공간 극대화", "changelog": "v1.1.5: 근무 변경 팝업 버튼 겹침 수정, 업데이트 내역 자동 기입 및 실시간 동기화",
"forceUpdate": false "forceUpdate": false
} }