Initial commit: HotDeal Alarm Android App
Features: - Multi-site hot deal scraping (Ppomppu, Clien, Ruriweb, Coolenjoy) - Site filter with color-coded badges - Board display names (e.g., ppomppu8 -> 알리뽐뿌) - Anti-bot protection with request delays and User-Agent rotation - Keyword matching and notifications - Material Design 3 UI
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M54,54m-40,0a40,40 0,1 1,80 0a40,40 0,1 1,-80 0"/>
|
||||
<path
|
||||
android:fillColor="#1976D2"
|
||||
android:pathData="M54,30L54,54L74,54A20,20 0,0 0,54 34L54,30A24,24 0,0 1,78 54L54,54L54,78A24,24 0,0 1,30 54A24,24 0,0 1,54 30Z"/>
|
||||
<path
|
||||
android:fillColor="#FF9800"
|
||||
android:pathData="M54,38m-8,0a8,8 0,1 1,16 0a8,8 0,1 1,-16 0"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#FFFFFF"/>
|
||||
<corners android:radius="16dp"/>
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="#E0E0E0"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/widget_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="12dp"
|
||||
android:background="@drawable/widget_background">
|
||||
|
||||
<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_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/app_name"
|
||||
android:textStyle="bold"
|
||||
android:textSize="14sp"
|
||||
android:textColor="@android:color/black"/>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/btn_refresh"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:src="@android:drawable/ic_menu_rotate"
|
||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="@string/action_refresh"/>
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_deal_1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:textSize="12sp"
|
||||
android:maxLines="2"
|
||||
android:ellipsize="end"
|
||||
android:textColor="@android:color/black"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_deal_2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:textSize="12sp"
|
||||
android:maxLines="2"
|
||||
android:ellipsize="end"
|
||||
android:textColor="@android:color/black"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_deal_3"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:textSize="12sp"
|
||||
android:maxLines="2"
|
||||
android:ellipsize="end"
|
||||
android:textColor="@android:color/black"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_empty"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:text="@string/deal_list_empty"
|
||||
android:textSize="12sp"
|
||||
android:textColor="@android:color/darker_gray"
|
||||
android:visibility="gone"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Dark Mode Colors -->
|
||||
<color name="primary">#FF90CAF9</color>
|
||||
<color name="primary_dark">#FF64B5F6</color>
|
||||
<color name="primary_light">#FFBBDEFB</color>
|
||||
<color name="secondary">#FFFFB74D</color>
|
||||
<color name="secondary_dark">#FFFFA726</color>
|
||||
<color name="background">#FF121212</color>
|
||||
<color name="surface">#FF1E1E1E</color>
|
||||
<color name="error">#FFCF6679</color>
|
||||
<color name="on_primary">#FF000000</color>
|
||||
<color name="on_secondary">#FF000000</color>
|
||||
<color name="on_background">#FFE0E0E0</color>
|
||||
<color name="on_surface">#FFE0E0E0</color>
|
||||
<color name="on_error">#FF000000</color>
|
||||
|
||||
<!-- Site Colors (Dark Mode) -->
|
||||
<color name="ppomppu">#FFF48FB1</color>
|
||||
<color name="clien">#FF81C784</color>
|
||||
<color name="ruriweb">#FF64B5F6</color>
|
||||
<color name="coolenjoy">#FFFFAB91</color>
|
||||
<color name="quasarzone">#FFCE93D8</color>
|
||||
</resources>
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="primary">#FF1976D2</color>
|
||||
<color name="primary_dark">#FF1565C0</color>
|
||||
<color name="primary_light">#FF42A5F5</color>
|
||||
<color name="secondary">#FFFF9800</color>
|
||||
<color name="secondary_dark">#FFF57C00</color>
|
||||
<color name="background">#FFFAFAFA</color>
|
||||
<color name="surface">#FFFFFFFF</color>
|
||||
<color name="error">#FFD32F2F</color>
|
||||
<color name="on_primary">#FFFFFFFF</color>
|
||||
<color name="on_secondary">#FF000000</color>
|
||||
<color name="on_background">#FF1C1B1F</color>
|
||||
<color name="on_surface">#FF1C1B1F</color>
|
||||
<color name="on_error">#FFFFFFFF</color>
|
||||
|
||||
<!-- Site Colors -->
|
||||
<color name="ppomppu">#FFE91E63</color>
|
||||
<color name="clien">#FF4CAF50</color>
|
||||
<color name="ruriweb">#FF2196F3</color>
|
||||
<color name="coolenjoy">#FFFF5722</color>
|
||||
<color name="quasarzone">#FF9C27B0</color>
|
||||
</resources>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#1976D2</color>
|
||||
</resources>
|
||||
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">핫딜 알람</string>
|
||||
|
||||
<!-- Navigation -->
|
||||
<string name="nav_home">홈</string>
|
||||
<string name="nav_settings">설정</string>
|
||||
<string name="nav_deals">핫딜 목록</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="settings_title">설정</string>
|
||||
<string name="site_selection">사이트 선택</string>
|
||||
<string name="keyword_settings">키워드 설정</string>
|
||||
<string name="polling_interval">폴링 간격</string>
|
||||
|
||||
<!-- Notifications -->
|
||||
<string name="notification_channel_name">핫딜 알림</string>
|
||||
<string name="notification_channel_description">새로운 핫딜이 올라오면 알림을 보냅니다.</string>
|
||||
<string name="notification_channel_urgent">긴급 핫딜</string>
|
||||
<string name="notification_channel_urgent_desc">키워드에 매칭된 핫딜 알림</string>
|
||||
<string name="notification_channel_normal">일반 핫딜</string>
|
||||
<string name="notification_channel_normal_desc">새로운 핫딜 알림</string>
|
||||
<string name="notification_channel_background">백그라운드</string>
|
||||
<string name="notification_channel_background_desc">폴링 상태 알림</string>
|
||||
<string name="notification_new_deal">새로운 핫딜</string>
|
||||
<string name="notification_keyword_match">키워드 매칭!</string>
|
||||
|
||||
<!-- Widget -->
|
||||
<string name="widget_title">최근 핫딜</string>
|
||||
|
||||
<!-- Deal List -->
|
||||
<string name="deal_list_empty">수집된 핫딜이 없습니다</string>
|
||||
<string name="deal_list_loading">불러오는 중…</string>
|
||||
<string name="deal_list_error">데이터를 불러오는데 실패했습니다</string>
|
||||
|
||||
<!-- Actions -->
|
||||
<string name="action_refresh">새로고침</string>
|
||||
<string name="action_share">공유</string>
|
||||
<string name="action_favorite">즐겨찾기</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<style name="Theme.HotDealAlarm" parent="android:Theme.Material.Light.NoActionBar">
|
||||
<item name="android:colorPrimary">@color/primary</item>
|
||||
<item name="android:colorPrimaryDark">@color/primary_dark</item>
|
||||
<item name="android:colorAccent">@color/secondary</item>
|
||||
<item name="android:statusBarColor">@color/primary_dark</item>
|
||||
<item name="android:navigationBarColor">@color/background</item>
|
||||
<item name="android:windowLightNavigationBar">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Sample backup rules file
|
||||
-->
|
||||
<full-backup-content>
|
||||
<include domain="sharedpref" path="."/>
|
||||
<exclude domain="sharedpref" path="device.xml"/>
|
||||
</full-backup-content>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Sample data extraction rules file
|
||||
-->
|
||||
<data-extraction-rules>
|
||||
<cloud-backup>
|
||||
<include domain="sharedpref" path="."/>
|
||||
<exclude domain="sharedpref" path="device.xml"/>
|
||||
</cloud-backup>
|
||||
<device-transfer>
|
||||
<include domain="sharedpref" path="."/>
|
||||
<exclude domain="sharedpref" path="device.xml"/>
|
||||
</device-transfer>
|
||||
</data-extraction-rules>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:minWidth="250dp"
|
||||
android:minHeight="110dp"
|
||||
android:updatePeriodMillis="1800000"
|
||||
android:initialLayout="@layout/widget_hot_deal"
|
||||
android:resizeMode="horizontal|vertical"
|
||||
android:widgetCategory="home_screen"
|
||||
android:previewImage="@drawable/ic_launcher_foreground"
|
||||
android:description="@string/app_name">
|
||||
</appwidget-provider>
|
||||
Reference in New Issue
Block a user