| | |
| | | |
| | | @Query(""" |
| | | WITH RECURSIVE dates(date_value) AS ( |
| | | -- 从当前日期往前3周的周一开始 |
| | | SELECT date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0', '-21 days') as date_value |
| | | UNION ALL |
| | | -- 每次加7天,直到后2周 |
| | | SELECT date(date_value, '+7 days') |
| | | FROM dates |
| | | WHERE date_value < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'weekday 0', '+14 days') |
| | |
| | | SELECT |
| | | strftime('%Y-%m-%d', date_value) as date, |
| | | COUNT(c.id) as count, |
| | | date_value as weekStart |
| | | strftime('%Y-%m-%d', date_value) as weekStart |
| | | FROM dates d |
| | | LEFT JOIN code c ON strftime('%Y-%m-%d', c.createTime) BETWEEN |
| | | strftime('%Y-%m-%d', d.date_value) |
| | |
| | | SELECT |
| | | strftime('%Y', year_start) as date, |
| | | COUNT(code.id) as count, |
| | | year_start as week_start |
| | | strftime('%Y-%m-%d', year_start) as weekStart |
| | | FROM years |
| | | LEFT JOIN code ON strftime('%Y', code.createTime) = strftime('%Y', years.year_start) |
| | | GROUP BY years.year_start |
| | |
| | | WHERE date < date(datetime(:date/1000, 'unixepoch', 'localtime'), 'start of month', '+1 month', '-1 day') |
| | | ) |
| | | SELECT |
| | | strftime('%d', days.date) || '' as date, -- 确保 date 不为空 |
| | | strftime('%d', days.date) || '' as date, |
| | | COUNT(code.id) as count, |
| | | days.date as week_start |
| | | strftime('%Y-%m-%d', days.date) as weekStart |
| | | FROM days |
| | | LEFT JOIN code ON date(code.createTime) = days.date |
| | | GROUP BY days.date |
| | |
| | | SELECT |
| | | strftime('%m', month_start) as date, |
| | | COUNT(code.id) as count, |
| | | month_start as weekStart |
| | | strftime('%Y-%m-%d', month_start) as weekStart |
| | | FROM months |
| | | LEFT JOIN code ON strftime('%Y-%m', code.createTime) = strftime('%Y-%m', months.month_start) |
| | | GROUP BY months.month_start |
| | |
| | | SELECT |
| | | strftime('%Y-%m-%d', days.date) as date, |
| | | COUNT(code.id) as count, |
| | | days.date as weekStart |
| | | strftime('%Y-%m-%d', days.date) as weekStart |
| | | FROM days |
| | | LEFT JOIN code ON date(code.createTime) = days.date |
| | | GROUP BY days.date |
| | |
| | | SELECT |
| | | strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime')) as date, |
| | | COUNT(id) as count, |
| | | datetime(:date/1000, 'unixepoch', 'localtime') as weekStart |
| | | strftime('%Y-%m-%d', datetime(:date/1000, 'unixepoch', 'localtime')) as weekStart |
| | | FROM code |
| | | WHERE strftime('%Y', createTime) = strftime('%Y', datetime(:date/1000, 'unixepoch', 'localtime')) |
| | | """) |
| | |
| | | package com.example.firstapp.model |
| | | |
| | | import androidx.room.DatabaseView |
| | | import androidx.room.ColumnInfo |
| | | |
| | | @DatabaseView( |
| | | """ |
| | |
| | | data class DailyStat( |
| | | val date: String, |
| | | val count: Int, |
| | | val weekStart: Long? = null |
| | | @ColumnInfo(name = "weekStart") |
| | | val weekStart: String? = null |
| | | ) |
| | |
| | | <color name="light_blue_50">#E1F5FE</color> |
| | | <color name="tab_selected">#FF039BE5</color> |
| | | <color name="light_blue_new">#02A7F0</color> |
| | | <color name="light_grey">#F6F7FB </color> 灰色主题 |
| | | </resources> |
| | |
| | | <!-- <style name="Theme.FirstApp" parent="Theme.MaterialComponents.DayNight.DarkActionBar">--> |
| | | <style name="Theme.FirstApp" parent="Theme.MaterialComponents.DayNight.NoActionBar"> |
| | | <!-- Primary brand color. --> |
| | | <item name="colorPrimary">@color/light_blue_new</item> |
| | | <item name="colorPrimaryVariant">@color/light_blue_new</item> |
| | | <item name="colorPrimary">@color/black</item> |
| | | <item name="colorPrimaryVariant">@color/light_grey</item> |
| | | <item name="colorOnPrimary">@color/white</item> |
| | | <!-- Secondary brand color. --> |
| | | <item name="colorSecondary">@color/teal_200</item> |
| | |
| | | <item name="colorOnSecondary">@color/black</item> |
| | | <!-- Status bar color. --> |
| | | <item name="android:statusBarColor">?attr/colorPrimaryVariant</item> |
| | | |
| | | <!-- 关键属性:强制状态栏图标为深色(黑色) --> |
| | | <item name="android:windowLightStatusBar" tools:targetApi="m">true</item> |
| | | |
| | | <!-- 确保没有ActionBar --> |
| | | <item name="windowActionBar">false</item> |
| | | <item name="windowNoTitle">true</item> |