Initial commit - v1.1.9

This commit is contained in:
2026-02-22 12:03:04 +09:00
commit 27339dc7b7
180 changed files with 12908 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/primary" />
<item android:color="#20000000" /> <!-- Semi-transparent black instead of opaque gray -->
</selector>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:type="radial"
android:centerX="30%"
android:centerY="20%"
android:gradientRadius="800dp"
android:startColor="#6c4bb5"
android:centerColor="#120b2d"
android:endColor="#000000" />
</shape>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#20000000">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
<stroke
android:width="0.8dp"
android:color="@color/btn_today_text" />
<corners android:radius="6dp" />
</shape>
</item>
</ripple>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#20007AFF">
<item>
<shape android:shape="rectangle">
<solid android:color="#0D007AFF" />
<stroke
android:width="1dp"
android:color="#1A007AFF" />
<corners android:radius="32dp" />
</shape>
</item>
</ripple>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<corners android:radius="24dp"/>
<stroke android:width="0dp" android:color="#00000000"/>
</shape>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/white" />
<size
android:width="44dp"
android:height="44dp" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#007AFF"/>
</shape>

View File

@@ -0,0 +1,4 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#007AFF"/>
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#FF3B30"/>
</shape>

View File

@@ -0,0 +1,4 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#FF3B30"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/glass_panel_bg"/>
<corners android:radius="8dp"/>
<stroke android:width="1dp" android:color="@color/glass_panel_stroke"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#E7F1FF"/>
<corners android:radius="8dp"/>
<stroke android:width="2dp" android:color="#0D6EFD"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/glass_panel_bg"/>
<corners android:radius="12dp"/>
<stroke android:width="1dp" android:color="@color/glass_panel_stroke"/>
<gradient android:startColor="#10FFFFFF" android:endColor="#05FFFFFF" android:angle="45" />
</shape>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- Today's date highlight: Primary color tint with stronger glass effect -->
<gradient
android:startColor="#400D6EFD"
android:endColor="#200D6EFD"
android:angle="135"/>
<corners android:radius="10dp"/>
<stroke
android:width="2dp"
android:color="#800D6EFD"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Dialog background with more rounded corners for One UI 8 -->
<solid android:color="@color/dialog_bg"/>
<corners android:radius="28dp"/>
<stroke android:width="1dp" android:color="@color/glass_panel_stroke"/>
</shape>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="135"
android:startColor="#800381FE"
android:endColor="#805856D6"
android:type="linear"/>
<corners android:topLeftRadius="28dp" android:topRightRadius="28dp"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/dialog_bg"/>
<corners android:radius="32dp"/>
<stroke android:width="1dp" android:color="@color/grid_divider"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#0c091c" />
<stroke android:width="6dp" android:color="#998C6EFF" />
</shape>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 눌렸을 때 -->
<item android:state_pressed="true">
<shape>
<solid android:color="#30FFFFFF"/>
<corners android:radius="28dp"/>
<stroke android:width="1dp" android:color="#50FFFFFF"/>
</shape>
</item>
<!-- 기본 -->
<item>
<shape>
<solid android:color="#00FFFFFF"/>
<corners android:radius="28dp"/>
<stroke android:width="0.5dp" android:color="#20FFFFFF"/>
</shape>
</item>
</selector>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#40FFFFFF"/>
<corners android:radius="28dp"/>
<stroke android:width="1dp" android:color="#30FFFFFF"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#605C6BC0"/>
<corners android:radius="28dp"/>
<stroke android:width="1dp" android:color="#40FFFFFF"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/button_glass_bg"/>
<corners android:radius="28dp"/>
<stroke android:width="1dp" android:color="@color/glass_panel_stroke"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#E6FFFFFF"/>
<corners android:radius="20dp"/>
<stroke android:width="1dp" android:color="#20000000"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#30FFFFFF"/>
<corners android:radius="24dp"/>
<stroke android:width="1dp" android:color="#25FFFFFF"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#33FFFFFF"/>
<stroke android:width="1dp" android:color="#4DFFFFFF"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/glass_panel_bg"/>
<corners android:radius="16dp"/>
<stroke android:width="1dp" android:color="@color/glass_panel_stroke"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/glass_panel_bg"/>
<corners android:radius="32dp"/>
<stroke android:width="0.8dp" android:color="@color/glass_panel_stroke"/>
</shape>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- Glass Element: 20% Translucent White -->
<solid android:color="#33FFFFFF" />
<!-- Full Pill Shape -->
<corners android:radius="100dp" />
<!-- Subtle Border: 30% Translucent White -->
<stroke
android:width="1dp"
android:color="#4DFFFFFF" />
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="44dp" />
<solid android:color="#26FFFFFF" />
<stroke android:width="1.8dp" android:color="#4DFFFFFF" />
</shape>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#7C4DFF"
android:endColor="#5C6BC0"
android:angle="135"/>
<corners android:radius="16dp"/>
<stroke android:width="1dp" android:color="#40FFFFFF"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#20000000"/>
<corners android:radius="12dp"/>
<stroke android:width="1dp" android:color="#15000000"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#40FFFFFF"/>
<corners android:radius="40dp"/>
<stroke android:width="1.5dp" android:color="#501976D2"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#40FFFFFF"/>
<corners android:radius="40dp"/>
<stroke android:width="1.5dp" android:color="#50E53935"/>
</shape>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="#B0FFFFFF"/>
<size android:width="64dp" android:height="64dp"/>
<stroke android:width="2dp" android:color="#801976D2"/>
</shape>
</item>
<item android:left="16dp" android:top="16dp" android:right="16dp" android:bottom="16dp">
<shape android:shape="oval">
<gradient
android:startColor="#1976D2"
android:endColor="#42A5F5"
android:angle="135"/>
<size android:width="32dp" android:height="32dp"/>
</shape>
</item>
</layer-list>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="#B0FFFFFF"/>
<size android:width="64dp" android:height="64dp"/>
<stroke android:width="2dp" android:color="#80E53935"/>
</shape>
</item>
<item android:left="16dp" android:top="16dp" android:right="16dp" android:bottom="16dp">
<shape android:shape="oval">
<gradient
android:startColor="#E53935"
android:endColor="#EF5350"
android:angle="135"/>
<size android:width="32dp" android:height="32dp"/>
</shape>
</item>
</layer-list>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#C5E8F8"/>
<corners android:radius="12dp"/>
<stroke android:width="1dp" android:color="#60A5C8D8"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/transparent" />
<stroke
android:width="0.5dp"
android:color="@color/grid_divider" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/bg_grid_cell_today"/>
<stroke android:width="1dp" android:color="@color/primary" />
</shape>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/bg_grid_cell_default" />
<stroke android:width="0.5dp" android:color="@color/grid_divider" />
</shape>
</item>
</layer-list>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#1A000000"> <!-- Subtle dark gray for light theme ripple -->
<item android:id="@android:id/mask">
<shape>
<solid android:color="@color/white" />
<corners android:radius="28dp" />
</shape>
</item>
<item>
<selector>
<item android:state_pressed="true">
<shape>
<solid android:color="#0D000000" /> <!-- 5% gray overlay -->
<corners android:radius="28dp" />
</shape>
</item>
<item>
<shape>
<solid android:color="@color/glass_panel_bg" />
<corners android:radius="28dp" />
<stroke android:width="0.8dp" android:color="@color/glass_panel_stroke" />
</shape>
</item>
</selector>
</item>
</ripple>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="@color/background_mesh_start"
android:centerColor="@color/background_mesh_center"
android:endColor="@color/background_mesh_end"
android:type="linear"
android:angle="135"/>
<corners android:radius="0dp"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFFFF"/> <!-- Fully Opaque to hide everything behind -->
<corners android:radius="32dp"/>
<stroke android:width="1.2dp" android:color="#1A000000"/>
</shape>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#4DFFFFFF">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/primary" />
<corners android:radius="28dp" />
</shape>
</item>
</ripple>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/primary"/>
<corners android:radius="12dp"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/surface_variant"/>
<stroke android:width="1dp" android:color="@color/outline"/>
<corners android:radius="12dp"/>
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/primary"/>
<corners android:radius="20dp"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/button_glass_bg"/>
<corners android:radius="20dp"/>
<stroke android:width="1dp" android:color="@color/glass_panel_stroke"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#F2FFFFFF"/> <!-- 95% White -->
<corners android:radius="28dp"/>
<stroke android:width="0dp" android:color="@android:color/transparent"/>
</shape>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<gradient
android:type="radial"
android:gradientRadius="140dp"
android:centerX="50%"
android:centerY="50%"
android:startColor="#CC8C6EFF"
android:centerColor="#40785AFF"
android:endColor="#00000000" />
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<corners android:radius="16dp"/>
<padding android:left="16dp" android:top="16dp" android:right="16dp" android:bottom="16dp"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#E8F0FE"
android:endColor="#F5F7FF"
android:angle="135"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/white" />
<size android:width="32dp" android:height="32dp" />
</shape>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Left Half Vector -->
<item android:drawable="@drawable/ic_shift_half_red_vector" />
<!-- Full Circle Stroke Overlay -->
<item>
<shape android:shape="oval">
<stroke android:width="1.5dp" android:color="@color/shift_red"/>
<solid android:color="@android:color/transparent"/>
<size android:width="44dp" android:height="44dp"/>
</shape>
</item>
</layer-list>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/primary" />
<size android:width="44dp" android:height="44dp" />
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<stroke android:width="1.5dp" android:color="@color/primary" />
<size android:width="44dp" android:height="44dp" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#401976D2" /> <!-- 25% Opacity Blue -->
<corners android:radius="36dp" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#40D32F2F" /> <!-- 25% Opacity Red -->
<corners android:radius="36dp" />
</shape>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#1565C0"
android:centerColor="#1976D2"
android:endColor="#42A5F5"
android:angle="135"/>
<corners android:radius="40dp"/>
</shape>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#C62828"
android:centerColor="#E53935"
android:endColor="#EF5350"
android:angle="135"/>
<corners android:radius="40dp"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<corners android:radius="30dp"/>
<size android:width="60dp" android:height="60dp"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="40dp" /> <!-- Fully rounded corners for pill shape -->
<solid android:color="#00000000" /> <!-- Transparent fill -->
<stroke android:width="1.5dp" android:color="#40FFFFFF" /> <!-- Glass border -->
</shape>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="#FFFFFF"/>
<size android:width="64dp" android:height="64dp"/>
</shape>
</item>
<item android:left="18dp" android:top="18dp" android:right="18dp" android:bottom="18dp">
<shape android:shape="oval">
<solid android:color="#1976D2"/>
<size android:width="28dp" android:height="28dp"/>
</shape>
</item>
</layer-list>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="#FFFFFF"/>
<size android:width="64dp" android:height="64dp"/>
</shape>
</item>
<item android:left="18dp" android:top="18dp" android:right="18dp" android:bottom="18dp">
<shape android:shape="oval">
<solid android:color="#E53935"/>
<size android:width="28dp" android:height="28dp"/>
</shape>
</item>
</layer-list>

View File

@@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,13m-8,0a8,8 0,1 1 16,0a8,8 0,1 1 -16,0"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M12,9v4l2,2"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M5,3L2,6"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M19,3L22,6"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
</vector>

View File

@@ -0,0 +1,35 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:pathData="M0,0h108v108h-108z"
android:fillColor="#2196F3"/>
<group android:translateX="30" android:translateY="30" android:scaleX="2" android:scaleY="2">
<path
android:pathData="M12,13m-8,0a8,8 0,1 1 16,0a8,8 0,1 1 -16,0"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M12,9v4l2,2"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M5,3L2,6"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M19,3L22,6"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
</group>
</vector>

View File

@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M6,8a6,6 0,0 1 12,0c0,7 3,9 3,9H3s3,-2 3,-9"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M10.3,21a1.94,1.94 0,0 0 3.4,0"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
</vector>

View File

@@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M8,2v4"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M16,2v4"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M5,4L19,4A2,2 0,0 1 21,6L21,20A2,2 0,0 1 19,22L5,22A2,2 0,0 1 3,20L3,6A2,2 0,0 1 5,4z"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M3,10h18"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="@color/secondary">
<path
android:fillColor="@android:color/white"
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41-1.41z"/>
</vector>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6V19zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
</vector>

View File

@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M11,4H4a2,2 0,0 0 -2,2v14a2,2 0,0 0 2,2h14a2,2 0,0 0 2,-2v-7"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M18.5,2.5a2.121,2.121 0,0 1 3,3L12,15l-4,1 1,-4 9.5,-9.5z"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
</vector>

View File

@@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,12m-10,0a10,10 0,1 1 20,0a10,10 0,1 1 -20,0"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M8,12h8"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M12,8v8"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
</vector>

View File

@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12.22,2h-0.44a2,2 0,0 0 -2,2v0.18a2,2 0,0 1 -1,1.73l-0.43,0.25a2,2 0,0 1 -2,0l-0.15,-0.08a2,2 0,0 0 -2.73,0.73l-0.22,0.38a2,2 0,0 0 0.73,2.73l0.15,0.1a2,2 0,0 1 1,1.72v0.51a2,2 0,0 1 -1,1.74l-0.15,0.09a2,2 0,0 0 -0.73,2.73l0.22,0.38a2,2 0,0 0 2.73,0.73l0.15,-0.08a2,2 0,0 1 2,0l0.43,0.25a2,2 0,0 1 1,1.73V20a2,2 0,0 0 2,2h0.44a2,2 0,0 0 2,-2v-0.18a2,2 0,0 1 1,-1.73l0.43,-0.25a2,2 0,0 1 2,0l0.15,0.08a2,2 0,0 0 2.73,-0.73l0.22,-0.39a2,2 0,0 0 -0.73,-2.73l-0.15,-0.1a2,2 0,0 1 -1,-1.72v-0.51a2,2 0,0 1 1,-1.74l0.15,-0.09a2,2 0,0 0 0.73,-2.73l-0.22,-0.38a2,2 0,0 0 -2.73,-0.73l-0.15,0.08a2,2 0,0 1 -2,0l-0.43,-0.25a2,2 0,0 1 -1,-1.73V4a2,2 0,0 0 -2,-2z"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M12,12m-3,0a3,3 0,1 1 6,0a3,3 0,1 1 -6,0"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
</vector>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="44dp"
android:height="44dp"
android:viewportWidth="44"
android:viewportHeight="44">
<!-- Left Half Red -->
<path
android:name="left_half"
android:fillColor="@color/shift_red"
android:pathData="M22,0 A22,22 0 0 0 22,44 L22,0 Z" />
</vector>

View File

@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M19,21v-2a4,4 0,0 0 -4,-4H9a4,4 0,0 0 -4,4v2"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
<path
android:pathData="M12,7m-4,0a4,4 0,1 1 8,0a4,4 0,1 1 -8,0"
android:strokeWidth="2"
android:strokeColor="#FFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"/>
</vector>

View File

@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_mesh_gradient"
android:clipChildren="false"
android:clipToPadding="false">
<!-- Header / Info Section -->
<LinearLayout
android:id="@+id/headerContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="40dp"
android:paddingHorizontal="32dp"
android:paddingVertical="16dp">
<TextView
android:id="@+id/tvCurrentTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="오후 2:59"
android:textSize="88sp"
android:fontFamily="sans-serif-thin"
android:textColor="@color/white"
android:letterSpacing="0.02"/>
<TextView
android:id="@+id/tvDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2월 14일 토요일"
android:textSize="26sp"
android:textColor="@color/white"
android:alpha="0.5"
android:layout_marginTop="16dp"/>
<TextView
android:id="@+id/tvShiftType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="[주간] 근무 알람"
android:textSize="16sp"
android:textColor="@color/white"
android:alpha="0.4"
android:layout_marginTop="8dp"/>
</LinearLayout>
<!-- Center Control Area -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:layout_below="@id/headerContainer"
android:paddingBottom="80dp"
android:clipChildren="false"
android:clipToPadding="false">
<!-- Snooze Button (Glass style) -->
<TextView
android:id="@+id/btnSnooze"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="48dp"
android:paddingVertical="18dp"
android:text="다시 울림"
android:textSize="22sp"
android:textColor="@color/white"
android:alpha="0.9"
android:background="@drawable/bg_glass_pill_v4"
android:clickable="true"
android:focusable="true"/>
<!-- Stop Button Container with Pulse -->
<FrameLayout
android:layout_width="320dp"
android:layout_height="320dp"
android:layout_marginTop="20dp"
android:clipChildren="false"
android:clipToPadding="false">
<!-- Glowing Pulse View -->
<View
android:id="@+id/pulseCircle"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@drawable/bg_pulse_gradient"/>
<!-- Dismiss Button -->
<TextView
android:id="@+id/btnDismiss"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:gravity="center"
android:text="해제"
android:textSize="34sp"
android:textColor="@color/white"
android:background="@drawable/bg_dismiss_circle_v4"
android:clickable="true"
android:focusable="true"/>
</FrameLayout>
</LinearLayout>
</RelativeLayout>

View File

@@ -0,0 +1,265 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_mesh_gradient"
android:padding="0dp">
<!-- Compact Header Section -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/headerRoot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="12dp"
android:paddingBottom="8dp"
android:paddingHorizontal="20dp"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/appTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textSize="24sp"
android:textStyle="bold"
android:textColor="@color/text_primary"
android:letterSpacing="-0.03"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<TextView
android:id="@+id/todayStatusText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="오늘의 근무"
android:textSize="13sp"
android:textColor="@color/text_secondary"
android:fontFamily="sans-serif-medium"
android:layout_marginStart="12dp"
app:layout_constraintStart_toEndOf="@id/appTitle"
app:layout_constraintTop_toTopOf="@id/appTitle"
app:layout_constraintBottom_toBottomOf="@id/appTitle"
app:layout_constraintEnd_toStartOf="@id/btnSettings"/>
<ImageButton
android:id="@+id/btnSettings"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/ic_settings"
android:background="?attr/selectableItemBackgroundBorderless"
app:tint="@color/text_primary"
android:padding="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/appTitle"
app:layout_constraintBottom_toBottomOf="@id/appTitle" />
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- Maximized Calendar Card -->
<androidx.cardview.widget.CardView
android:id="@+id/calendarCard"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginHorizontal="12dp"
android:layout_marginBottom="8dp"
app:cardCornerRadius="28dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
app:layout_constraintTop_toBottomOf="@id/headerRoot"
app:layout_constraintBottom_toTopOf="@id/otherTeamsCard"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/calendarContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_glass_panel_v3">
<!-- Compact Month Controls -->
<LinearLayout
android:id="@+id/monthControlBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:paddingVertical="4dp"
android:paddingHorizontal="16dp"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/prevMonth"
android:layout_width="44dp"
android:layout_height="44dp"
android:text="&lt;"
android:textColor="@color/text_primary"
android:textSize="18sp"
android:background="?attr/selectableItemBackgroundBorderless"
style="@style/Widget.Material3.Button.TextButton"/>
<TextView
android:id="@+id/monthTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2026.02"
android:textSize="20sp"
android:textStyle="bold"
android:gravity="center"
android:textColor="@color/text_primary"
android:letterSpacing="-0.02"/>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnToday"
android:layout_width="56dp"
android:layout_height="28dp"
android:text="오늘"
android:textSize="12sp"
android:textStyle="bold"
android:textColor="@color/primary"
android:background="@drawable/bg_button_one_ui"
android:padding="0dp"
android:minWidth="0dp"
android:minHeight="0dp"
style="@style/Widget.Material3.Button.TextButton"/>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/nextMonth"
android:layout_width="44dp"
android:layout_height="44dp"
android:text="&gt;"
android:textColor="@color/text_primary"
android:textSize="18sp"
android:background="?attr/selectableItemBackgroundBorderless"
style="@style/Widget.Material3.Button.TextButton"/>
</LinearLayout>
<!-- Compact Alarm Info Bar -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/alarmInfoBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:paddingHorizontal="12dp"
android:paddingVertical="4dp"
android:clickable="true"
android:focusable="true"
app:layout_constraintTop_toBottomOf="@id/monthControlBar">
<TextView
android:id="@+id/alarmTimeText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="내 알람: 07:00"
android:textSize="12sp"
android:textStyle="bold"
android:textColor="@color/text_secondary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/btnTideLocation"/>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnTideLocation"
android:layout_width="wrap_content"
android:layout_height="24dp"
android:text="군산"
android:textSize="10sp"
android:textColor="@color/primary"
android:background="@drawable/bg_button_one_ui"
android:visibility="gone"
android:paddingHorizontal="8dp"
android:minWidth="0dp"
android:minHeight="0dp"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toStartOf="@id/cbShowHolidays"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<CheckBox
android:id="@+id/cbShowHolidays"
android:layout_width="wrap_content"
android:layout_height="24dp"
android:text="공휴일"
android:checked="false"
android:textSize="11sp"
android:textColor="@color/text_primary"
android:buttonTint="@color/primary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- Weekday Labels Header -->
<LinearLayout
android:id="@+id/weekdayLabels"
android:layout_width="match_parent"
android:layout_height="28dp"
android:orientation="horizontal"
android:layout_marginTop="8dp"
android:background="#08000000"
app:layout_constraintTop_toBottomOf="@id/alarmInfoBar">
<TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="일" android:gravity="center" android:textColor="@color/shift_red" android:textSize="11sp" android:textStyle="bold"/>
<TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="월" android:gravity="center" android:textColor="@color/text_secondary" android:textSize="11sp" android:textStyle="bold"/>
<TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="화" android:gravity="center" android:textColor="@color/text_secondary" android:textSize="11sp" android:textStyle="bold"/>
<TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="수" android:gravity="center" android:textColor="@color/text_secondary" android:textSize="11sp" android:textStyle="bold"/>
<TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="목" android:gravity="center" android:textColor="@color/text_secondary" android:textSize="11sp" android:textStyle="bold"/>
<TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="금" android:gravity="center" android:textColor="@color/text_secondary" android:textSize="11sp" android:textStyle="bold"/>
<TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="토" android:gravity="center" android:textColor="@color/primary" android:textSize="11sp" android:textStyle="bold"/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/calendarGrid"
android:layout_width="match_parent"
android:layout_height="0dp"
android:overScrollMode="never"
app:layout_constraintTop_toBottomOf="@id/weekdayLabels"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<!-- Other Teams Compact Section -->
<androidx.cardview.widget.CardView
android:id="@+id/otherTeamsCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="12dp"
android:layout_marginBottom="16dp"
app:cardCornerRadius="20dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
app:layout_constraintBottom_toBottomOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_glass_panel_v3"
android:paddingHorizontal="16dp"
android:paddingVertical="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="다른 반 근무"
android:textSize="13sp"
android:textColor="@color/text_primary"
android:textStyle="bold"
android:layout_marginBottom="8dp"
android:letterSpacing="-0.01"/>
<LinearLayout
android:id="@+id/otherTeamsContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/bg_mesh_gradient">
<!-- Header Section (One UI 8 Style) -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="32dp"
android:paddingBottom="16dp"
android:paddingStart="24dp"
android:paddingEnd="12dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignParentStart="true"
android:layout_centerVertical="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="사용 설명서"
android:textSize="32sp"
android:textStyle="bold"
android:textColor="@color/text_primary"
android:letterSpacing="-0.03"/>
<TextView
android:id="@+id/manualVersionText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="교대링(Shiftring)"
android:textSize="14sp"
android:textColor="@color/text_secondary"
android:layout_marginTop="2dp"/>
</LinearLayout>
<ImageButton
android:id="@+id/btnCloseManual"
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/ic_delete"
android:background="?attr/selectableItemBackgroundBorderless"
app:tint="@color/text_primary"
android:padding="12dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"/>
</RelativeLayout>
<!-- Content Card -->
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginHorizontal="8dp"
android:layout_marginBottom="16dp"
app:cardCornerRadius="28dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_glass_panel_v3"
android:padding="20dp"
android:fillViewport="true">
<TextView
android:id="@+id/manualContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="15sp"
android:textColor="@color/text_primary"
android:lineSpacingExtra="8dp"/>
</ScrollView>
</androidx.cardview.widget.CardView>
</LinearLayout>

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/bg_mesh_gradient">
<!-- Header Section (One UI 8 Style) -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="32dp"
android:paddingBottom="16dp"
android:paddingStart="24dp"
android:paddingEnd="12dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="업데이트 정보"
android:textSize="32sp"
android:textStyle="bold"
android:textColor="@color/text_primary"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:letterSpacing="-0.03"/>
<ImageButton
android:id="@+id/btnCloseNotice"
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/ic_delete"
android:background="?attr/selectableItemBackgroundBorderless"
app:tint="@color/text_primary"
android:padding="12dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"/>
</RelativeLayout>
<!-- Content RecyclerView -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/noticeRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:paddingBottom="16dp"
android:clipToPadding="false"/>
</LinearLayout>

View File

@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_mesh_gradient"
android:id="@+id/settings_root">
<LinearLayout
android:id="@+id/settingsHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingTop="32dp"
android:paddingBottom="16dp"
android:paddingStart="24dp"
android:paddingEnd="24dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:id="@+id/settingsTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="설정"
android:textColor="@color/text_primary"
android:textSize="32sp"
android:textStyle="bold"
android:letterSpacing="-0.03"/>
</LinearLayout>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="12dp"
app:tabIndicatorHeight="3dp"
app:tabIndicatorFullWidth="false"
app:tabIndicatorColor="@color/primary"
app:tabSelectedTextColor="@color/primary"
app:tabTextColor="@color/text_secondary"
app:tabRippleColor="@android:color/transparent"
app:tabMode="fixed"
android:background="@android:color/transparent"
app:layout_constraintTop_toBottomOf="@id/settingsHeader"/>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/tabLayout"
app:layout_constraintBottom_toTopOf="@id/bottomActionLayout"/>
<LinearLayout
android:id="@+id/bottomActionLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"
android:background="@android:color/transparent"
app:layout_constraintBottom_toBottomOf="parent">
<com.google.android.material.button.MaterialButton
android:id="@+id/btnSave"
android:layout_width="match_parent"
android:layout_height="58dp"
android:text="닫기"
android:textSize="17sp"
android:textStyle="bold"
android:textColor="#FFFFFF"
app:cornerRadius="29dp"
android:backgroundTint="@color/primary"
android:elevation="6dp"
android:stateListAnimator="@null"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="300dp"
android:layout_height="wrap_content"
app:cardCornerRadius="28dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_dialog_glass"
android:padding="24dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="사용자 알람 추가"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/text_primary"
android:gravity="center"
android:layout_marginBottom="20dp"/>
<!-- Time Selection -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="알람 시간"
android:textColor="@color/text_secondary"
android:textSize="12sp"
android:layout_marginBottom="8dp"/>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnSelectTime"
android:layout_width="match_parent"
android:layout_height="56dp"
android:text="07:00"
android:textSize="24sp"
android:textStyle="bold"
android:textColor="@color/text_primary"
android:background="@drawable/bg_glass_button_light"
android:layout_marginBottom="16dp"/>
<!-- Shift Type Selection -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="근무 유형"
android:textColor="@color/text_secondary"
android:textSize="12sp"
android:layout_marginBottom="8dp"/>
<Spinner
android:id="@+id/spinnerShiftType"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="@drawable/bg_glass_button_light"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:layout_marginBottom="24dp"/>
<!-- Buttons -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btnCancel"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="취소"
android:textColor="@color/text_secondary"/>
<Button
android:id="@+id/btnSave"
style="@style/Widget.Material3.Button.TonalButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="저장"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -0,0 +1,229 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/dialog_bg">
<!-- Header / Full Screen Style -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<TextView
android:id="@+id/btnCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="취소"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:padding="8dp"
android:layout_alignParentStart="true"/>
<TextView
android:id="@+id/dialogTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="알람 추가"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/black"
android:layout_centerInParent="true"/>
<TextView
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="저장"
android:textColor="@color/primary"
android:textStyle="bold"
android:textSize="16sp"
android:padding="8dp"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="24dp">
<!-- High-Impact Time Picker Area -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="240dp"
android:orientation="horizontal"
android:gravity="center"
android:layout_marginBottom="24dp">
<!-- Native TimePicker but Styled via Code to match One UI as much as possible -->
<!-- If native is too limited, we'd use NumberPickers. For now, let's keep it but maximize size -->
<TimePicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timePickerMode="spinner"
android:theme="@style/OneUITimePickerTheme"/>
</LinearLayout>
<!-- Shift Selection (Custom only) -->
<androidx.cardview.widget.CardView
android:id="@+id/cardShiftSelector"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@color/white"
android:layout_marginBottom="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="근무 타입"
android:textSize="14sp"
android:textColor="@color/text_secondary"
android:layout_marginBottom="12dp"
android:textStyle="bold"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<TextView android:id="@+id/btnShiftJu" android:layout_width="44dp" android:layout_height="44dp" android:text="주" android:gravity="center" android:textStyle="bold" android:layout_marginEnd="8dp" android:background="@drawable/bg_shift_stroke_v4"/>
<TextView android:id="@+id/btnShiftSeok" android:layout_width="44dp" android:layout_height="44dp" android:text="석" android:gravity="center" android:textStyle="bold" android:layout_marginEnd="8dp" android:background="@drawable/bg_shift_stroke_v4"/>
<TextView android:id="@+id/btnShiftYa" android:layout_width="44dp" android:layout_height="44dp" android:text="야" android:gravity="center" android:textStyle="bold" android:layout_marginEnd="8dp" android:background="@drawable/bg_shift_stroke_v4"/>
<TextView android:id="@+id/btnShiftYaMat" android:layout_width="44dp" android:layout_height="44dp" android:text="야맞" android:gravity="center" android:textStyle="bold" android:layout_marginEnd="8dp" android:background="@drawable/bg_shift_stroke_v4" android:textSize="12sp"/>
<TextView android:id="@+id/btnShiftEtc" android:layout_width="44dp" android:layout_height="44dp" android:text="기타" android:gravity="center" android:textStyle="bold" android:background="@drawable/bg_shift_stroke_v4" android:textSize="12sp"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Sound Selection -->
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@color/white"
android:layout_marginBottom="16dp">
<LinearLayout
android:id="@+id/btnSelectSound"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="20dp"
android:gravity="center_vertical"
android:background="?attr/selectableItemBackground">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_alarm"
app:tint="@color/primary"
android:layout_marginEnd="16dp"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="알람음"
android:textSize="16sp"
android:textColor="@color/text_primary"
android:textStyle="bold"/>
<TextView
android:id="@+id/tvSoundName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="기본 알람음"
android:textSize="13sp"
android:textColor="@color/text_secondary"
android:layout_marginTop="2dp"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Snooze (Frequency/Repeat) Section -->
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@color/white"
android:layout_marginBottom="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="다시 울림 간격"
android:textSize="14sp"
android:textColor="@color/text_secondary"
android:textStyle="bold"
android:layout_marginBottom="12dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:layout_marginBottom="24dp">
<TextView android:id="@+id/snooze5" android:layout_width="0dp" android:layout_height="44dp" android:layout_weight="1" android:text="5분" android:gravity="center" android:layout_marginEnd="4dp" android:background="@drawable/bg_pill_rect_unselected"/>
<TextView android:id="@+id/snooze10" android:layout_width="0dp" android:layout_height="44dp" android:layout_weight="1" android:text="10분" android:gravity="center" android:layout_marginEnd="4dp" android:background="@drawable/bg_pill_rect_unselected"/>
<TextView android:id="@+id/snooze15" android:layout_width="0dp" android:layout_height="44dp" android:layout_weight="1" android:text="15분" android:gravity="center" android:layout_marginEnd="4dp" android:background="@drawable/bg_pill_rect_unselected"/>
<TextView android:id="@+id/snooze30" android:layout_width="0dp" android:layout_height="44dp" android:layout_weight="1" android:text="30분" android:gravity="center" android:background="@drawable/bg_pill_rect_unselected"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="반복 횟수"
android:textSize="14sp"
android:textColor="@color/text_secondary"
android:textStyle="bold"
android:layout_marginBottom="12dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<TextView android:id="@+id/repeat3" android:layout_width="0dp" android:layout_height="44dp" android:layout_weight="1" android:text="3회" android:gravity="center" android:layout_marginEnd="4dp" android:background="@drawable/bg_pill_rect_unselected"/>
<TextView android:id="@+id/repeat5" android:layout_width="0dp" android:layout_height="44dp" android:layout_weight="1" android:text="5회" android:gravity="center" android:layout_marginEnd="4dp" android:background="@drawable/bg_pill_rect_unselected"/>
<TextView android:id="@+id/repeatForever" android:layout_width="0dp" android:layout_height="44dp" android:layout_weight="1" android:text="계속" android:gravity="center" android:background="@drawable/bg_pill_rect_unselected"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Delete Button (Only for Custom) -->
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnDelete"
android:layout_width="match_parent"
android:layout_height="56dp"
android:text="알람 삭제"
android:textColor="@color/warning_red"
android:background="@drawable/bg_glass_panel_v3"
android:layout_marginBottom="40dp"
android:visibility="gone"/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>

View File

@@ -0,0 +1,159 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="340dp"
android:layout_height="wrap_content"
app:cardCornerRadius="32dp"
app:cardElevation="8dp"
app:cardBackgroundColor="@android:color/transparent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_dialog_solid_v4"
android:padding="20dp">
<!-- Header: Date and Shift -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:paddingTop="8dp"
android:paddingBottom="20dp">
<TextView
android:id="@+id/dialogSubtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="내일의 근무"
android:textSize="14sp"
android:textColor="@color/text_secondary"
android:layout_marginBottom="4dp"/>
<TextView
android:id="@+id/dialogTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2월 12일 (주간)"
android:textSize="22sp"
android:textStyle="bold"
android:textColor="@color/text_primary"
android:letterSpacing="-0.02"/>
</LinearLayout>
<!-- 5-Column Grid Refactored -->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- Row 1 -->
<TextView android:id="@+id/btnJu" style="@style/ShiftCircleButton" android:text="주" android:textColor="@color/shift_ju"/>
<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"/>
<TextView android:id="@+id/btnWolcha" style="@style/ShiftCircleButton" android:text="월차" android:textSize="13sp" android:textColor="@color/secondary"/>
<TextView android:id="@+id/btnYeoncha" style="@style/ShiftCircleButton" android:text="연차" android:textSize="13sp" android:textColor="@color/secondary"/>
<TextView android:id="@+id/btnBanwol" style="@style/ShiftCircleButton" android:text="반월" android:textSize="13sp" android:textColor="@color/shift_red"/>
<TextView android:id="@+id/btnBannyeon" style="@style/ShiftCircleButton" android:text="반년" android:textSize="13sp" android:textColor="@color/shift_red"/>
<!-- Row 3 -->
<TextView android:id="@+id/btnEdu" style="@style/ShiftCircleButton" android:text="교육" android:textSize="13sp" android:textColor="@color/primary"/>
<TextView android:id="@+id/btnReset" style="@style/ShiftCircleButton" android:text="초기" android:textSize="13sp" android:textColor="@color/text_secondary"/>
<TextView android:id="@+id/btnManual" style="@style/ShiftCircleButton" android:text="직접" android:textSize="14sp" android:textColor="@color/shift_gray"/>
<androidx.constraintlayout.helper.widget.Flow
android:id="@+id/gridFlow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:constraint_referenced_ids="btnJu,btnSeok,btnYa,btnJuMat,btnYaMat, btnOff,btnWolcha,btnYeoncha,btnBanwol,btnBannyeon, btnEdu,btnReset,btnManual"
app:flow_wrapMode="aligned"
app:flow_maxElementsWrap="5"
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>
<View
android:id="@+id/memoDivider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/grid_divider"
android:layout_marginTop="20dp"/>
<!-- Memo Section -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="16dp"
android:background="@drawable/bg_glass_button_light"
android:padding="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="12dp">
<TextView
android:id="@+id/memoTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="하루 메모"
android:textSize="15sp"
android:textStyle="bold"
android:textColor="@color/text_primary"/>
<ImageView
android:id="@+id/btnClearMemo"
android:layout_width="28dp"
android:layout_height="28dp"
android:src="@drawable/ic_delete"
app:tint="@color/shift_red"
android:padding="6dp"
android:background="?attr/selectableItemBackgroundBorderless"/>
</LinearLayout>
<EditText
android:id="@+id/etMemo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="여기에 메모를 입력하세요"
android:inputType="textMultiLine|textNoSuggestions"
android:minLines="2"
android:maxLines="4"
android:gravity="top|start"
android:textSize="15sp"
android:textColor="@color/text_primary"
android:background="@android:color/transparent"
android:padding="0dp"/>
</LinearLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/btnClose"
android:layout_width="match_parent"
android:layout_height="56dp"
android:text="저장 및 닫기"
android:layout_marginTop="24dp"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="#FFFFFF"
app:cornerRadius="28dp"
android:backgroundTint="@color/primary"
android:elevation="2dp"/>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="32dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="32dp"
android:background="@drawable/bg_opaque_glass_dialog">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="날짜 이동"
android:textSize="24sp"
android:textStyle="bold"
android:textColor="@color/black"
android:layout_marginBottom="32dp"
android:layout_gravity="center_horizontal"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:layout_marginBottom="24dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:gravity="center">
<NumberPicker
android:id="@+id/yearPicker"
android:layout_width="wrap_content"
android:layout_height="180dp"
android:theme="@style/AppNumberPickerStyle"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="년"
android:textSize="18sp"
android:textColor="@color/text_secondary"
android:layout_marginStart="8dp"/>
</LinearLayout>
<View
android:layout_width="1.5dp"
android:layout_height="80dp"
android:background="#1A000000"
android:layout_marginHorizontal="20dp"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:gravity="center">
<NumberPicker
android:id="@+id/monthPicker"
android:layout_width="wrap_content"
android:layout_height="180dp"
android:theme="@style/AppNumberPickerStyle"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="월"
android:textSize="18sp"
android:textColor="@color/text_secondary"
android:layout_marginStart="8dp"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -0,0 +1,365 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/surface"
android:padding="16dp">
<!-- Header Section -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="20dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_plus_circle"
app:tint="@color/section_title"
android:layout_marginEnd="12dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="부가 기능 및 테마"
android:textSize="17sp"
android:textStyle="bold"
android:textColor="@color/section_title"/>
</LinearLayout>
<!-- Tide Section (Moved Up) -->
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
android:layout_marginBottom="24dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:background="@drawable/bg_glass_panel_v3"
android:padding="20dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="물때 정보 표시"
android:textColor="@color/text_primary"
android:textSize="14sp"
android:textStyle="bold"
android:layout_marginBottom="4dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="군산, 변산, 여수, 태안 물때 표시"
android:textSize="12sp"
android:textColor="@color/text_secondary"/>
</LinearLayout>
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/switchTide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Backup/Restore Section (Moved Up) -->
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
android:layout_marginBottom="24dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_glass_panel_v3"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="데이터 백업 및 복구"
android:textColor="@color/text_secondary"
android:textSize="13sp"
android:textStyle="bold"
android:layout_marginBottom="12dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnBackup"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:text="백업하기"
android:textColor="@color/text_primary"
android:textStyle="bold"
android:background="@drawable/bg_glass_button_light"
android:layout_marginEnd="4dp"/>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnRestore"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:text="복구하기"
android:textColor="@color/text_primary"
android:textStyle="bold"
android:background="@drawable/bg_glass_button_light"
android:layout_marginStart="4dp"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="근무 변경 내역, 메모, 환경 설정이 저장됩니다."
android:textSize="11sp"
android:textColor="@color/text_tertiary"
android:layout_marginTop="8dp"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Sharing Section (Moved Up) -->
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
android:layout_marginBottom="24dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_glass_panel_v3"
android:paddingVertical="8dp">
<LinearLayout
android:id="@+id/btnShareApp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="16dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_plus_circle"
app:tint="@color/primary"
android:layout_marginEnd="16dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="교대링 앱 친구에게 공유하기"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Theme Section -->
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
android:layout_marginBottom="24dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_glass_panel_v3"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="화면 테마 설정"
android:textColor="@color/text_secondary"
android:textSize="13sp"
android:textStyle="bold"
android:layout_marginBottom="12dp"/>
<Spinner
android:id="@+id/themeSpinner"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@drawable/bg_glass_button_light"
android:paddingStart="12dp"
android:paddingEnd="12dp"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Info & Support Section -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="정보 및 지원"
android:textColor="@color/text_secondary"
android:textSize="13sp"
android:textStyle="bold"
android:layout_marginBottom="8dp"
android:layout_marginStart="12dp"/>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
android:layout_marginBottom="24dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_glass_panel_v3"
android:paddingVertical="8dp">
<!-- Manual -->
<LinearLayout
android:id="@+id/btnManual"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="16dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_memo"
app:tint="@color/text_primary"
android:layout_marginEnd="16dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="사용 설명서"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/glass_panel_stroke"
android:layout_marginHorizontal="20dp"/>
<!-- Notice -->
<LinearLayout
android:id="@+id/btnNotice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="16dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_bell"
app:tint="@color/text_primary"
android:layout_marginEnd="16dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="업데이트 정보"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Reset Section (Very Bottom) -->
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
android:layout_marginBottom="24dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_glass_panel_v3"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="데이터 초기화"
android:textColor="@color/shift_red"
android:textSize="13sp"
android:textStyle="bold"
android:layout_marginBottom="12dp"/>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnResetOverrides"
android:layout_width="match_parent"
android:layout_height="48dp"
android:text="개별 근무/알람 설정 전체 삭제"
android:textColor="@color/shift_red"
android:background="@drawable/bg_glass_button_light"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="달력에서 개별적으로 바꾼 근무와 알람 시간이 모두 초기 설정으로 복구됩니다."
android:textSize="11sp"
android:textColor="@color/text_tertiary"
android:layout_marginTop="8dp"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/surface"
android:padding="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingHorizontal="8dp"
android:layout_marginBottom="8dp">
<TextView
android:id="@+id/tvMasterStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="전체 알람 켜짐"
android:textSize="13sp"
android:textStyle="bold"
android:textColor="@color/primary"
android:background="@drawable/bg_glass_pill_v4"
android:backgroundTint="#F2F2F7"
android:paddingHorizontal="12dp"
android:paddingVertical="6dp"
android:clickable="true"
android:focusable="true"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
<!-- Unified Alarm List Container (Background removed as items are now individual cards) -->
<LinearLayout
android:id="@+id/alarmListContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginBottom="16dp"/>
<!-- Add Custom Alarm Button (Premium Solid Style) -->
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnAddCustomAlarm"
android:layout_width="match_parent"
android:layout_height="56dp"
android:text="+ 알람 추가"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
android:background="@drawable/bg_pill_button_primary"
android:foreground="?attr/selectableItemBackground"
android:layout_marginBottom="24dp"
android:elevation="4dp"/>
<!-- Test Action -->
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btnTestAlarm"
android:layout_width="match_parent"
android:layout_height="56dp"
android:text="🔔 알람 사운드 테스트"
android:textColor="@color/text_secondary"
android:textSize="14sp"
android:background="@drawable/bg_glass_panel_v3"
android:foreground="?attr/selectableItemBackground"
android:layout_marginBottom="40dp"/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@@ -0,0 +1,342 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:overScrollMode="never">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<!-- Company & Team Section -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="소속 및 반 설정"
android:textColor="@color/section_title"
android:textSize="13sp"
android:textStyle="bold"
android:layout_marginBottom="8dp"
android:layout_marginStart="12dp"/>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
android:layout_marginBottom="24dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_glass_panel_v3"
android:padding="20dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="16dp">
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="근무 회사"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
<Spinner
android:id="@+id/factorySpinner"
android:layout_width="140dp"
android:layout_height="40dp"
android:entries="@array/factory_array"
android:background="@drawable/bg_glass_button_light"
android:paddingStart="12dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/glass_panel_stroke"
android:layout_marginBottom="16dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="나의 근무 반"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
<Spinner
android:id="@+id/teamSpinner"
android:layout_width="140dp"
android:layout_height="40dp"
android:background="@drawable/bg_glass_button_light"
android:paddingStart="12dp"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- App Stability (Permissions) -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="앱 안정성 설정 (필수)"
android:textColor="@color/shift_red"
android:textSize="13sp"
android:textStyle="bold"
android:layout_marginBottom="8dp"
android:layout_marginStart="12dp"/>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
android:layout_marginBottom="24dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_glass_panel_v3"
android:paddingVertical="8dp">
<!-- Battery Optimization -->
<LinearLayout
android:id="@+id/btnBatteryOptimize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="12dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="배터리 최적화 제외 (필수)"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
<TextView
android:id="@+id/tvBatteryStatus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="삼성/LG 폰 알람 누락 방지"
android:textColor="@color/text_secondary"
android:textSize="12sp"
android:layout_marginTop="2dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/glass_panel_stroke"
android:layout_marginHorizontal="20dp"/>
<!-- Exact Alarm -->
<LinearLayout
android:id="@+id/btnExactAlarm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="12dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="정확한 알람 허용"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
<TextView
android:id="@+id/tvExactStatus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="정해진 시간에 정확히 알람 울림"
android:textColor="@color/text_secondary"
android:textSize="12sp"
android:layout_marginTop="2dp"/>
</LinearLayout>
<View
android:id="@+id/dividerExact"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/glass_panel_stroke"
android:layout_marginHorizontal="20dp"/>
<!-- Overlay Permission -->
<LinearLayout
android:id="@+id/btnOverlayPermission"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="12dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="다른 앱 위에 표시"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
<TextView
android:id="@+id/tvOverlayStatus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="잠금 화면 위로 알람창 표시"
android:textColor="@color/text_secondary"
android:textSize="12sp"
android:layout_marginTop="2dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/glass_panel_stroke"
android:layout_marginHorizontal="20dp"/>
<!-- Full Screen Intent (Android 14+) -->
<LinearLayout
android:id="@+id/btnFullScreenIntent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="12dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="전체화면 알림 허용"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
<TextView
android:id="@+id/tvFullScreenStatus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="안드로이드 14 이상 잠금화면 필수 권한"
android:textColor="@color/text_secondary"
android:textSize="12sp"
android:layout_marginTop="2dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/glass_panel_stroke"
android:layout_marginHorizontal="20dp"/>
<!-- System Details Launcher -->
<LinearLayout
android:id="@+id/btnPermissionSettings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="12dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="시스템 전체 권한 설정"
android:textColor="@color/text_primary"
android:textSize="16sp"/>
<ImageView
android:layout_width="16dp"
android:layout_height="16dp"
android:src="@drawable/ic_settings"
app:tint="@color/text_tertiary"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Info & Support -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="앱 정보"
android:textColor="@color/text_secondary"
android:textSize="13sp"
android:layout_marginBottom="8dp"
android:layout_marginStart="12dp"/>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
android:layout_marginBottom="24dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_glass_panel_v3"
android:paddingVertical="8dp">
<LinearLayout
android:id="@+id/btnCheckUpdate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="16dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_settings"
app:tint="@color/primary"
android:layout_marginEnd="16dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="최신 버전 확인"
android:textColor="@color/primary"
android:textSize="16sp"
android:textStyle="bold"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<TextView
android:id="@+id/versionInfo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Ver. 1.0.0"
android:gravity="center"
android:textColor="@color/text_tertiary"
android:textSize="12sp"
android:layout_marginBottom="40dp"/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="24dp"
android:gravity="center">
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/ic_settings"
app:tint="@color/text_tertiary"
android:layout_marginBottom="16dp"
android:alpha="0.5"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="실험실 기능 준비 중"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/text_secondary"
android:layout_marginBottom="8dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="더욱 편리한 기능을 개발하고 있습니다.\n다음 업데이트를 기대해 주세요!"
android:textSize="14sp"
android:textColor="@color/text_tertiary"
android:gravity="center"
android:lineSpacingExtra="4dp"/>
</LinearLayout>

View File

@@ -0,0 +1,139 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="4dp"
android:layout_marginVertical="6dp"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent">
<LinearLayout
android:id="@+id/rowContents"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:background="@drawable/bg_item_ripple_oneui"
android:clickable="true"
android:focusable="true"
android:paddingVertical="4dp"
android:paddingHorizontal="4dp">
<!-- Time & Info Area -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingVertical="12dp"
android:paddingHorizontal="12dp"
android:background="@android:color/transparent">
<!-- Shift Indicator Circle (Pill style) -->
<TextView
android:id="@+id/shiftIndicator"
android:layout_width="48dp"
android:layout_height="48dp"
android:gravity="center"
android:text="주"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/black"
android:background="@drawable/bg_shift_stroke_v4"
android:layout_marginEnd="16dp"/>
<!-- Vertical Container for Text Info -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center_vertical"
android:layout_marginStart="16dp">
<!-- Time Row -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom">
<TextView
android:id="@+id/tvTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="07:00"
android:textSize="28sp"
android:textStyle="bold"
android:textColor="@color/black"
android:letterSpacing="-0.03"
android:includeFontPadding="false"/>
<TextView
android:id="@+id/tvAmPm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="오전"
android:textSize="12sp"
android:textColor="@color/text_secondary"
android:layout_marginStart="4dp"
android:layout_marginBottom="6dp"/>
</LinearLayout>
<!-- Interval & Count Info -->
<TextView
android:id="@+id/tvSummary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5분, 3회"
android:textSize="13sp"
android:textColor="@color/text_secondary"
android:layout_marginTop="2dp"/>
<!-- Sound Name Info -->
<TextView
android:id="@+id/tvSoundName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="기본음"
android:textSize="13sp"
android:textColor="@color/primary"
android:layout_marginTop="2dp"
android:singleLine="true"
android:ellipsize="end"/>
</LinearLayout>
</LinearLayout>
<!-- Vertical Divider -->
<View
android:layout_width="1dp"
android:layout_height="40dp"
android:background="@color/glass_panel_stroke"
android:alpha="0.2"/>
<!-- Separate Toggle Area -->
<LinearLayout
android:id="@+id/layoutAlarmSwitch"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:paddingHorizontal="16dp"
android:clickable="true"
android:focusable="true">
<com.google.android.material.materialswitch.MaterialSwitch
android:id="@+id/alarmSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:thumbTint="@color/white"
app:trackTint="@color/sl_switch_track"
app:thumbIcon="@null"
app:thumbIconSize="24dp"
android:clickable="false"
android:focusable="false"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/dayRoot"
android:layout_width="match_parent"
android:layout_height="92dp"
android:background="@drawable/bg_grid_cell_v4">
<!-- Day Number (top-left) -->
<TextView
android:id="@+id/dayNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="4dp"
android:text="12"
android:textColor="@color/text_primary"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- Tide Text (top-right) -->
<TextView
android:id="@+id/tvTide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:layout_marginTop="4dp"
android:text="08:20"
android:textColor="@color/text_tertiary"
android:textSize="9sp"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- Shift Abbreviation Circular Indicator (Center) -->
<TextView
android:id="@+id/shiftChar"
android:layout_width="40dp"
android:layout_height="40dp"
android:gravity="center"
android:text="주"
android:textSize="15sp"
android:textStyle="bold"
android:textColor="@color/text_primary"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintVertical_bias="0.45"/>
<!-- Memo Content Text (Below Shift) - Replacing icon logic for visibility -->
<TextView
android:id="@+id/memoContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="메모내용"
android:textSize="10sp"
android:textColor="@color/secondary"
android:maxLines="1"
android:ellipsize="end"
android:visibility="gone"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:paddingHorizontal="2dp"
app:layout_constraintTop_toBottomOf="@id/shiftChar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/memoIndicator"/>
<!-- Holiday Name Small (Bottom) -->
<TextView
android:id="@+id/holidayNameSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="설날"
android:textSize="9sp"
android:textColor="@color/shift_red"
android:layout_marginBottom="2dp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/memoIndicator"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<!-- Memo Indicator (bottom-right) -->
<ImageView
android:id="@+id/memoIndicator"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_marginEnd="4dp"
android:layout_marginBottom="4dp"
android:src="@drawable/ic_memo"
app:tint="@color/secondary"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardCornerRadius="12dp"
app:cardElevation="4dp"
app:cardBackgroundColor="@color/background_mesh_center">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:id="@+id/noticeTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="공지사항 제목"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/text_primary"
android:layout_marginBottom="4dp"/>
<TextView
android:id="@+id/noticeDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2026-02-07"
android:textSize="12sp"
android:textColor="@color/text_tertiary"
android:layout_marginBottom="12dp"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/glass_panel_stroke"
android:layout_marginBottom="12dp"/>
<TextView
android:id="@+id/noticeContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="공지사항 내용"
android:textSize="14sp"
android:lineSpacingExtra="4dp"
android:textColor="@color/text_secondary"/>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -0,0 +1,3 @@
<resources>
<string name="app_name">shiftring</string>
</resources>

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Brand Colors -->
<color name="primary">#0A84FF</color>
<color name="primary_variant">#0056B3</color>
<color name="secondary">#30D158</color>
<color name="black">#000000</color>
<color name="white">#FFFFFF</color>
<!-- Material 3 Containers -->
<color name="primary_container">#004785</color>
<color name="on_primary_container">#D1E4FF</color>
<color name="secondary_container">#1B5E20</color>
<color name="on_secondary_container">#E8F5E9</color>
<!-- UI Semantics -->
<color name="background_mesh_start">#000000</color>
<color name="background_mesh_center">#1C1C1E</color>
<color name="background_mesh_end">#000000</color>
<color name="glass_panel_bg">#FF2C2C2E</color>
<color name="glass_panel_stroke">#33FFFFFF</color>
<color name="text_primary">#FFFFFF</color>
<color name="text_secondary">#8E8E93</color>
<color name="text_tertiary">#48484A</color>
<color name="text_inverse">#000000</color>
<color name="button_glass_bg">#1C1C1E</color>
<color name="button_text">#FFFFFF</color>
<!-- Shift Colors (Desaturated but vibrant for Dark Mode) -->
<color name="shift_ju">#FFD60A</color>
<color name="shift_jumat">#FF9F0A</color>
<color name="shift_seok">#4DD0E1</color> <!-- Bright Teal -->
<color name="shift_ya">#FFFFFF</color> <!-- Bright White (for Dark Mode contrast) -->
<color name="shift_yamat">#BB86FC</color> <!-- Bright Purple -->
<color name="shift_off">#FF453A</color>
<color name="shift_lemon">#FFD60A</color>
<color name="shift_gray">#8E8E93</color>
<color name="shift_black">#FFFFFF</color>
<color name="shift_red">#FF453A</color>
<color name="team_a_color">#FF9F0A</color>
<color name="team_b_color">#4DD0E1</color>
<color name="team_c_color">#FFFFFF</color>
<color name="team_d_color">#BB86FC</color>
<!-- Theme-aware Grid Colors -->
<color name="bg_grid_cell_default">#1C1C1E</color>
<color name="bg_grid_cell_today">#003366</color>
<color name="grid_divider">#3A3A3C</color> <!-- Lighter divider -->
<color name="dialog_bg">#FF2C2C2E</color> <!-- Solid Dark Grey -->
<color name="section_title">#0A84FF</color>
<color name="btn_today_text">#0A84FF</color>
<color name="warning_red">#FF453A</color>
<color name="surface">#1C1C1E</color>
</resources>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.ShiftAlarm" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Main Brand Colors -->
<item name="colorPrimary">#BB86FC</item>
<item name="colorPrimaryVariant">#3700B3</item>
<item name="colorOnPrimary">#000000</item>
<!-- Backgrounds -->
<item name="android:windowBackground">#0D1117</item>
<item name="android:colorBackground">#0D1117</item>
<item name="android:statusBarColor">#010409</item>
<item name="android:windowLightStatusBar">false</item>
<!-- Typography -->
<item name="android:fontFamily">sans-serif</item>
</style>
</resources>

View File

@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Brand Colors (One UI 8.x) -->
<color name="primary">#007AFF</color>
<color name="primary_variant">#0056B3</color>
<color name="secondary">#34C759</color>
<color name="black">#1C1C1E</color>
<color name="white">#FFFFFF</color>
<!-- Material 3 Containers -->
<color name="primary_container">#D1E4FF</color>
<color name="on_primary_container">#001D36</color>
<color name="secondary_container">#E8F5E9</color>
<color name="on_secondary_container">#002107</color>
<!-- UI Semantics -->
<color name="background_mesh_start">#F2F2F7</color>
<color name="background_mesh_center">#FFFFFF</color>
<color name="background_mesh_end">#E5E5EA</color>
<color name="glass_panel_bg">#CEFFFFFF</color>
<color name="glass_panel_stroke">#12000000</color>
<color name="text_primary">#1C1C1E</color>
<color name="text_secondary">#636366</color>
<color name="text_tertiary">#AEAEB2</color>
<color name="text_inverse">#FFFFFF</color>
<color name="surface">#F2F2F7</color>
<color name="surface_variant">#FFFFFF</color>
<color name="outline">#D1D1D6</color>
<color name="button_glass_bg">#14000000</color>
<color name="button_text">#1C1C1E</color>
<!-- Shift Colors (Referencing clock.html) -->
<color name="shift_ju">#FFD60A</color> <!-- Yellow (Day) -->
<color name="shift_seok">#0097A7</color> <!-- Teal (Evening) - Distinct from Blue/Purple -->
<color name="shift_ya">#000000</color> <!-- Black (Night) -->
<color name="shift_off">#FF3B30</color> <!-- Red (Off) -->
<color name="shift_jumat">#FF9500</color> <!-- Orange (Day Split) -->
<color name="shift_yamat">#6200EE</color> <!-- Deep Purple (Night Split) -->
<color name="shift_red">#FF3B30</color>
<color name="shift_lemon">#FFD60A</color>
<color name="shift_gray">#8E8E93</color> <!-- Mid Gray (Etc) -->
<color name="shift_black">#000000</color>
<color name="team_a_color">#FF9500</color>
<color name="team_b_color">#0097A7</color>
<color name="team_c_color">#000000</color>
<color name="team_d_color">#6200EE</color>
<!-- Theme-aware Grid Colors -->
<color name="bg_grid_cell_default">#00000000</color>
<color name="bg_grid_cell_today">#1A007AFF</color> <!-- 10% Blue Overlay -->
<color name="grid_divider">#1A000000</color>
<color name="dialog_bg">#FFF7F7F7</color> <!-- Fully Opaque Surface Color -->
<color name="section_title">#007AFF</color>
<color name="btn_today_text">#007AFF</color>
<color name="warning_red">#FF3B30</color>
</resources>

View File

@@ -0,0 +1,32 @@
<resources>
<string name="app_name">교대링</string>
<string name="team_selection">반 선택</string>
<string name="current_shift">오늘 근무: %1$s</string>
<string name="next_shift">내일 근무: %1$s</string>
<string name="alarm_status">알람 상태</string>
<string name="company_selection">회사 선택</string>
<string name="tab_basic">기본 설정</string>
<string name="tab_alarm">알람 설정</string>
<string name="tab_additional">부가기능</string>
<string name="tab_lab">실험실</string>
<string-array name="factory_array">
<item>전주</item>
<item>논산</item>
</string-array>
<string-array name="team_array">
<item>A반</item>
<item>B반</item>
<item>C반</item>
<item>D반</item>
</string-array>
<string-array name="theme_array">
<item>시스템 설정</item>
<item>라이트 모드</item>
<item>다크 모드</item>
</string-array>
</resources>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="ShiftCircleButton">
<item name="android:layout_width">48dp</item>
<item name="android:layout_height">48dp</item>
<item name="android:gravity">center</item>
<item name="android:textSize">15sp</item>
<item name="android:textStyle">bold</item>
<item name="android:clickable">true</item>
<item name="android:focusable">true</item>
<item name="android:elevation">2dp</item>
<item name="android:stateListAnimator">@null</item>
</style>
</resources>

View File

@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.ShiftAlarm" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Main Brand Colors -->
<item name="colorPrimary">@color/primary</item>
<item name="colorOnPrimary">@color/white</item>
<item name="colorPrimaryContainer">@color/primary_container</item>
<item name="colorOnPrimaryContainer">@color/on_primary_container</item>
<!-- Secondary Colors -->
<item name="colorSecondary">@color/secondary</item>
<item name="colorOnSecondary">@color/white</item>
<item name="colorSecondaryContainer">@color/secondary_container</item>
<item name="colorOnSecondaryContainer">@color/on_secondary_container</item>
<!-- Surface and Backgrounds -->
<item name="android:windowBackground">@color/background_mesh_start</item>
<item name="android:colorBackground">@color/background_mesh_center</item>
<item name="colorSurface">@color/surface</item>
<item name="colorOnSurface">@color/text_primary</item>
<item name="colorSurfaceVariant">@color/surface_variant</item>
<item name="colorOnSurfaceVariant">@color/text_secondary</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">true</item>
<item name="android:windowLightNavigationBar" tools:targetApi="o_mr1">true</item>
<!-- Typography -->
<item name="android:fontFamily">sans-serif</item>
<item name="textAppearanceHeadlineLarge">@style/OneUI8.Headline</item>
<item name="textAppearanceTitleMedium">@style/OneUI8.Title</item>
</style>
<style name="OneUI8.Headline" parent="TextAppearance.Material3.HeadlineLarge">
<item name="android:textStyle">bold</item>
<item name="android:textColor">@color/text_primary</item>
<item name="android:textSize">32sp</item>
<item name="android:letterSpacing">-0.02</item>
</style>
<style name="OneUI8.Title" parent="TextAppearance.Material3.TitleMedium">
<item name="android:textStyle">bold</item>
<item name="android:textColor">@color/text_primary</item>
<item name="android:textSize">20sp</item>
<item name="android:letterSpacing">-0.01</item>
</style>
<style name="ShiftAlarm.TonalButton" parent="Widget.Material3.Button.TonalButton">
<item name="cornerRadius">28dp</item>
<item name="android:paddingHorizontal">24dp</item>
<item name="android:paddingVertical">12dp</item>
</style>
<style name="CardStyle">
<item name="android:background">@drawable/bg_glass_panel_v3</item>
<item name="android:elevation">0dp</item>
</style>
<style name="OneUITimePickerTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:textColorPrimary">@color/text_primary</item>
<item name="android:textColorSecondary">@color/text_secondary</item>
<item name="android:editTextColor">@color/primary</item>
<item name="android:textSize">24sp</item>
</style>
<style name="AppNumberPickerStyle">
<item name="android:textSize">22sp</item>
<item name="android:textColorPrimary">@color/text_primary</item>
</style>
<style name="OneUI8_Dialog" parent="Theme.Material3.DayNight.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
</style>
</resources>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
<cache-path name="cache" path="."/>
<files-path name="files" path="."/>
</paths>