From 9720622da8a0cea0e7d1908b959eb07d72fa4fa2 Mon Sep 17 00:00:00 2001 From: GKF Date: Wed, 29 May 2019 14:15:16 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9Rule?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/App.kt | 82 +++++ app/src/main/res/values/strings.xml | 437 +++++++++++++++++++++++++ 2 files changed, 519 insertions(+) diff --git a/app/src/main/java/io/legado/app/App.kt b/app/src/main/java/io/legado/app/App.kt index 6ef0e877d..e62d513bc 100644 --- a/app/src/main/java/io/legado/app/App.kt +++ b/app/src/main/java/io/legado/app/App.kt @@ -1,7 +1,20 @@ package io.legado.app import android.app.Application +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.appcompat.app.AppCompatDelegate +import io.legado.app.constant.AppConst.channelIdDownload +import io.legado.app.constant.AppConst.channelIdReadAloud +import io.legado.app.constant.AppConst.channelIdWeb import io.legado.app.data.AppDatabase +import io.legado.app.lib.theme.ThemeStore +import io.legado.app.utils.getPrefBoolean +import io.legado.app.utils.getPrefInt +import java.util.* class App : Application() { @@ -19,5 +32,74 @@ class App : Application() { super.onCreate() INSTANCE = this db = AppDatabase.createDatabase(INSTANCE) + initNightTheme() + upThemeStore() + } + + fun initNightTheme() { + if (getPrefBoolean("isNightTheme", false)) { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) + } else { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) + } + } + + fun upThemeStore() { + if (getPrefBoolean("isNightTheme", false)) { + ThemeStore.editTheme(this) + .primaryColor(getPrefInt("colorPrimaryNight", resources.getColor(R.color.md_grey_800))) + .accentColor(getPrefInt("colorAccentNight", resources.getColor(R.color.md_pink_800))) + .backgroundColor(getPrefInt("colorBackgroundNight", resources.getColor(R.color.md_grey_800))) + .apply() + } else { + ThemeStore.editTheme(this) + .primaryColor(getPrefInt("colorPrimary", resources.getColor(R.color.md_grey_100))) + .accentColor(getPrefInt("colorAccent", resources.getColor(R.color.md_pink_600))) + .backgroundColor(getPrefInt("colorBackground", resources.getColor(R.color.md_grey_100))) + .apply() + } + } + + /** + * 创建通知ID + */ + @RequiresApi(Build.VERSION_CODES.O) + private fun createChannelId() { + val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + //用唯一的ID创建渠道对象 + val downloadChannel = NotificationChannel( + channelIdDownload, + getString(R.string.download_offline), + NotificationManager.IMPORTANCE_LOW + ) + //初始化channel + downloadChannel.enableLights(false) + downloadChannel.enableVibration(false) + downloadChannel.setSound(null, null) + + //用唯一的ID创建渠道对象 + val readAloudChannel = NotificationChannel( + channelIdReadAloud, + getString(R.string.read_aloud), + NotificationManager.IMPORTANCE_LOW + ) + //初始化channel + readAloudChannel.enableLights(false) + readAloudChannel.enableVibration(false) + readAloudChannel.setSound(null, null) + + //用唯一的ID创建渠道对象 + val webChannel = NotificationChannel( + channelIdWeb, + getString(R.string.web_service), + NotificationManager.IMPORTANCE_LOW + ) + //初始化channel + webChannel.enableLights(false) + webChannel.enableVibration(false) + webChannel.setSound(null, null) + + //向notification manager 提交channel + notificationManager.createNotificationChannels(Arrays.asList(downloadChannel, readAloudChannel, webChannel)) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 104e439e4..aaf582f1a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,4 +31,441 @@ 净化替换 暂无 启用 + + 书架 + 最后阅读 + 让阅读成为一种习惯。 + 更新日志 + 阅读·搜索 + 书架还空着,先去添加吧! + 搜索 + 下载任务 + 列表视图 + 网格视图 + 列表/网格 + 书城 + 添加本地 + 书源管理 + 设置 + 主题设置 + 关于 + 捐赠 + 退出 + 还未保存,是否继续编辑 + 阅读样式设置 + + 本地 + 搜索 + 没有网络 + 网络连接超时 + 数据解析失败 + 来源: %s + 最近: %s + 书名 + 最新: %s + 是否将《%s》放入书架? + 共%s个Text文件 + 加载中… + 获取数据失败! + 重试 + web服务 + web编辑书源 + http://%s:%d + 离线下载 + 离线下载 + 下载选择的章节到本地 + 换源 + + \u3000\u3000这是一款开源的阅读软件,你可以fork我们的代码自己编译APK。欢迎提交代码帮助改善应用。\n\u3000\u3000公众号[开源阅读软件]! + + Version %s + 自动刷新 + 打开软件时自动更新书籍 + 自动下载最新章节 + 更新书籍时自动下载最新章节 + 备份 + 恢复 + 备份请给与存储权限 + 恢复请给与存储权限 + 确认 + 取消 + 确认备份吗? + 新备份会替换原有备份。\n备份文件夹YueDu + 确认恢复吗? + 恢复书架会覆盖现有书架。 + 备份成功 + 备份失败 + 正在恢复 + 恢复成功 + 恢复失败 + 屏幕方向 + 跟随传感器 + 横向 + 竖向 + 跟随系统 + 免责声明 + 共%d章 + 界面 + 亮度 + 目录 + 下一章 + 上一章 + 隐藏状态栏 + 阅读界面隐藏状态栏 + 阅读行数调整 + 阅读行数减一行,如阅读界面显示不全可启用 + 朗读 + 正在朗读 + 点击打开阅读界面 + 返回 + 重新加载 + 开始 + 停止 + 暂停 + 继续 + 定时 + 朗读暂停 + 正在朗读(还剩%d分钟) + 阅读界面隐藏虚拟按键 + 隐藏导航栏 + 导航栏颜色 + GitHub + 评分 + 发送邮件 + 无法打开 + 无章节 + 添加网址 + 添加书籍网址 + 背景 + 作者 + 站点暂时不支持解析,请反馈 + 朗读停止 + 清除缓存 + 保存 + 编辑书源 + 禁用书源 + 新建书源 + 添加书籍 + 扫描 + 拷贝书源 + 粘贴书源 + 书源规则说明 + 检查更新 + 扫描二维码 + 扫描本地图片 + 规则说明 + 分享 + 软件分享 + 跟随系统 + 添加 + 导入书源 + 本地导入 + 网络导入 + 替换净化 + 替换规则编辑 + 替换规则 + 替换为 + 封面 + + 音量键翻页 + 点击翻页 + 点击总是翻下一页 + 翻页动画 + 屏幕超时 + 返回 + 菜单 + 调节 + 滚动条 + 清除缓存会删除所有已保存章节,是否确认删除? + 书源共享 + 替换规则名称 + 全选 + 夜间模式 + 启动页 + 开始下载 + 取消下载 + 暂无任务 + 导入选择书籍 + 更新和搜索线程数,如感觉卡顿请减小线程数,量力而行 + 切换图标 + 删除书籍 + 开始阅读 + 加载数据中… + 加载失败,点击重试 + 内容简介 + 打开外部书籍 + 来源 + 本地导入 + 网络导入 + 书架排序 + 检查更新间隔 + 按阅读时间排序 + 按更新时间排序 + 手动排序 + 阅读方式 + 删除所选 + 是否确认删除? + 默认字体 + 发现 + 发现管理 + 没有内容,去书源里自定义吧! + 删除所有 + 搜索历史 + 清除 + 正文显示标题 + 书源同步 + 无最新章节信息 + 显示时间和电量 + 显示分隔线 + 深色状态栏图标 + 内容 + 拷贝内容 + 一键缓存 + 这是一段测试文字\n\u3000\u3000只是让你看看效果的 + 文字颜色和背景(长按自定义) + 沉浸式状态栏 + 还剩%d章未下载 + 长按输入颜色值 + 加载中… + 追更区 + 养肥区 + 书签 + 添加书签 + 删除 + 加载超时 + 关注:%s + 已拷贝 + 整理书架 + 这将会删除所有书籍,请谨慎操作。 + 搜索书源 + 搜索(共%d个书源) + 目录(%d) + 加粗 + 字体 + 文字 + 软件主页 + + + + + 边距: + 上边距 + 下边距 + 左边距 + 右边距 + 校验书源 + 校验所选 + 进度 %d/%d + 请安装并选择中文TTS! + TTS初始化失败! + 简繁转换 + 关闭 + 简转繁 + 繁转简 + 翻页模式 + %1$d 项 + 存储卡: + 加入书架 + 加入书架(%1$d) + 成功添加%1$d本书 + 请将字体文件放到SD根目录Fonts文件夹下重新选择 + 默认字体 + 选择字体 + 字号 + 行距 + 段距 + 置顶 + 自动展开发现 + 默认展开第一组发现 + 当前线程数 %s + 朗读语速 + 自动翻页 + 停止自动翻页 + 自动翻页间隔 + 书籍信息 + 默认打开书架 + 自动跳转最近阅读 + 替换范围,选填书名或者源名 + 分组 + 内容缓存路径 + 系统文件选择器 + 新版本 + 下载更新 + 朗读时音量键翻页 + Tip边距跟随边距调整 + 禁止更新 + 允许更新 + 反转选择 + 搜索书名、作者 + 书名、作者、URL + 常见问题 + 显示所有发现 + 关闭则只显示勾选源的发现 + 更新目录 + txt目录正则 + 设置编码 + 倒序-顺序 + 排序 + 智能排序 + 手动排序 + 拼音排序 + 滚动到顶部 + 滚动到底部 + 已读: %s + 追更 + 养肥 + 完结 + 所有书籍 + 追更书籍 + 养肥书籍 + 完结书籍 + 本地书籍 + 状态栏颜色透明 + 导航栏变色 + 导航栏根据夜间模式变化 + 放入书架 + 继续阅读 + 封面地址 + 覆盖 + 仿真 + 滑动 + 滚动 + 无动画 + 此书源使用了高级功能,请到捐赠里点击支付宝红包搜索码领取红包开启。 + 后台更新换源最新章节 + 开启则会在软件打开1分钟后开始更新 + 书架ToolBar自动隐藏 + 滚动书架时ToolBar自动隐藏与显示 + 登录 + 登录%s + 成功 + 当前源没有配置登陆地址 + 书源名称(bookSourceName) + 书源URL(bookSourceUrl) + 书源分组(bookSourceGroup) + 登录URL(loginUrl) + 作者规则(ruleBookAuthor) + 正文规则(ruleBookContent) + 书名规则(ruleBookName) + 目录列表规则(ruleChapterList) + 章节名称规则(ruleChapterName) + 目录URL规则(ruleChapterUrl) + 目录下一页规则(ruleChapterUrlNext) + 章节URL规则(ruleContentUrl) + 封面规则(ruleCoverUrl) + 简介规则(ruleIntroduce) + 搜索作者规则(ruleSearchAuthor) + 发现作者规则(ruleFindAuthor) + 搜索封面规则(ruleSearchCoverUrl) + 发现封面规则(ruleFindCoverUrl) + 搜索分类规则(ruleSearchKind) + 发现分类规则(ruleFindKind) + 搜索最新章节规则(ruleSearchLastChapter) + 发现最新章节规则(ruleFindLastChapter) + 搜索列表规则(ruleSearchList) + 发现列表规则(ruleFindList) + 搜索书名规则(ruleSearchName) + 发现书名规则(ruleFindName) + 搜索书籍URL规则(ruleSearchNoteUrl) + 发现书籍URL规则(ruleFindNoteUrl) + 搜索简介规则(ruleSearchIntroduce) + 发现简介规则(ruleFindIntroduce) + 搜索地址(ruleSearchUrl) + 发现规则(ruleFindUrl) + 正文下一页URL规则(ruleContentUrlNext) + 书籍详情URL正则(ruleBookUrlPattern) + 书籍详情预处理规则(ruleBookInfoInit) + 分类规则(ruleBookKind) + 最新章节规则(ruleBookLastChapter) + HttpUserAgent + 调试书源 + 二维码导入 + 扫描二维码 + \@ + + 选中时点击可弹出菜单 + 主题 + 默认主题 + 恢复主题为默认配色 + 加入QQ群 + 文件读取失败 + 获取背景图片需存储权限 + 输入书源网址 + 删除文件 + 删除文件成功 + 确定删除文件吗? + 手机目录 + 智能导入 + 发现 + 切换显示样式 + 导入本地书籍需存储权限 + 点击可切换到白天模式 + 点击可切换到夜间模式 + 本软件需要存储权限来存储备份书籍信息 + 再按一次退出程序 + 导入本地书籍需存储权限 + 网络连接不可用 + + + 是否删除全部书籍? + 是否同时删除已下载的书籍目录? + 扫描二维码需相机权限 + 朗读正在运行,不能自动翻页 + 输入编码 + TXT目录规则 + 打开外部书籍需获取存储权限 + 书籍信息获取失败 + 内容获取失败 + 目录获取失败 + 访问网站失败:%s + 未获取到书名 + 输入替换规则网址 + 搜索列表获取成功%d + 书源名称和URL不能为空 + 图库 + 领支付宝红包 + 没有获取到更新地址 + 正在打开首页,成功自动返回主界面 + 登录成功后请点击右上角图标进行首页访问测试 + + 章节: + + 使用正则表达式 + 缩进 + 无缩进 + 一字符缩进 + 二字符缩进 + 三字符缩进 + 四字符缩进 + 选择SD卡 + 没有发现,可以在书源里添加。 + 恢复默认 + 自定义缓存路径需要存储权限 + 黑色 + 文章内容为空 + 正在换源请等待… + 目录列表为空 + 加载失败\n%s + 正文边距 + Tip边距 + 字距 + + E-Ink 模式 + 去除动画,优化电纸书使用体验 + Web服务 + web端口 + 当前端口 %s + 二维码分享 + wifi分享 + 请给于存储权限 + 上一个 + 下一个 + 音乐 + 音频 + 启用 + 全部书源 + 输入不能为空 + 清空发现缓存 + 编辑发现 + 切换软件显示在桌面的图标 From 90a1ada010a0b8a5f05e254b4741d50e4e34a11b Mon Sep 17 00:00:00 2001 From: GKF Date: Wed, 29 May 2019 14:46:54 +0800 Subject: [PATCH 02/13] up App --- app/src/main/java/io/legado/app/App.kt | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/App.kt b/app/src/main/java/io/legado/app/App.kt index e62d513bc..868748389 100644 --- a/app/src/main/java/io/legado/app/App.kt +++ b/app/src/main/java/io/legado/app/App.kt @@ -4,6 +4,7 @@ import android.app.Application import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context +import android.content.pm.PackageManager import android.os.Build import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatDelegate @@ -28,12 +29,24 @@ class App : Application() { private set } + private var versionCode = 0 + override fun onCreate() { super.onCreate() INSTANCE = this db = AppDatabase.createDatabase(INSTANCE) + versionCode = try { + packageManager.getPackageInfo(packageName, 0).versionCode + } catch (e: PackageManager.NameNotFoundException) { + 0 + } initNightTheme() - upThemeStore() + if (!ThemeStore.isConfigured(this, versionCode)) { + upThemeStore() + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + createChannelId() + } } fun initNightTheme() { @@ -44,6 +57,9 @@ class App : Application() { } } + /** + * 更新主题 + */ fun upThemeStore() { if (getPrefBoolean("isNightTheme", false)) { ThemeStore.editTheme(this) @@ -63,6 +79,7 @@ class App : Application() { /** * 创建通知ID */ + @RequiresApi(Build.VERSION_CODES.O) private fun createChannelId() { val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager From 9bbe7dd7d53ba25266890cee8ce8bacfe7b2bf26 Mon Sep 17 00:00:00 2001 From: GKF Date: Thu, 30 May 2019 13:49:25 +0800 Subject: [PATCH 03/13] remove dataBinding --- .../java/io/legado/app/base/BaseActivity.kt | 10 +-- .../io/legado/app/ui/main/MainActivity.kt | 4 +- .../app/ui/replacerule/ReplaceRuleActivity.kt | 21 ++--- .../ui/replacerule/ReplaceRuleViewModel.java | 11 +++ .../io/legado/app/ui/search/SearchActivity.kt | 3 +- app/src/main/res/drawable-v21/bg_ib_pre.xml | 5 ++ .../main/res/drawable-v21/bg_ib_pre_round.xml | 3 + .../res/drawable/bg_chapter_item_divider.xml | 10 +++ app/src/main/res/drawable/bg_edit.xml | 6 ++ app/src/main/res/drawable/bg_ib_pre.xml | 5 ++ .../main/res/drawable/bg_shadow_bottom.png | Bin 0 -> 3127 bytes .../res/drawable/bg_shadow_bottom_night.png | Bin 0 -> 418 bytes app/src/main/res/drawable/bg_shadow_top.png | Bin 0 -> 340 bytes .../main/res/drawable/bg_shadow_top_night.png | Bin 0 -> 424 bytes .../main/res/drawable/bg_textfield_search.xml | 10 +++ .../main/res/drawable/fastscroll_bubble.xml | 39 +++++++++ .../main/res/drawable/fastscroll_handle.xml | 31 ++++++++ .../main/res/drawable/fastscroll_track.xml | 27 +++++++ app/src/main/res/drawable/ic_about.xml | 11 +++ app/src/main/res/drawable/ic_add.xml | 11 +++ app/src/main/res/drawable/ic_add_online.xml | 11 +++ app/src/main/res/drawable/ic_arrange.xml | 17 ++++ app/src/main/res/drawable/ic_arrow_back.xml | 9 +++ .../main/res/drawable/ic_arrow_drop_down.xml | 9 +++ .../main/res/drawable/ic_arrow_drop_up.xml | 9 +++ app/src/main/res/drawable/ic_author.xml | 12 +++ app/src/main/res/drawable/ic_auto_page.xml | 14 ++++ .../main/res/drawable/ic_auto_page_stop.xml | 17 ++++ app/src/main/res/drawable/ic_back_last.xml | 11 +++ app/src/main/res/drawable/ic_backup.xml | 29 +++++++ app/src/main/res/drawable/ic_book_has.xml | 14 ++++ app/src/main/res/drawable/ic_book_last.xml | 15 ++++ .../res/drawable/ic_book_source_manage.xml | 20 +++++ app/src/main/res/drawable/ic_bookmark.xml | 11 +++ app/src/main/res/drawable/ic_brightness.xml | 11 +++ app/src/main/res/drawable/ic_cancel.xml | 14 ++++ app/src/main/res/drawable/ic_chapter_list.xml | 20 +++++ app/src/main/res/drawable/ic_check.xml | 9 +++ app/src/main/res/drawable/ic_check_source.xml | 14 ++++ app/src/main/res/drawable/ic_copy.xml | 17 ++++ app/src/main/res/drawable/ic_daytime.xml | 35 ++++++++ app/src/main/res/drawable/ic_disclaimer.xml | 17 ++++ app/src/main/res/drawable/ic_donate.xml | 11 +++ app/src/main/res/drawable/ic_download.xml | 9 +++ .../main/res/drawable/ic_download_line.xml | 14 ++++ app/src/main/res/drawable/ic_exchange.xml | 17 ++++ .../main/res/drawable/ic_expand_less_24dp.xml | 9 +++ .../main/res/drawable/ic_expand_more_24dp.xml | 9 +++ app/src/main/res/drawable/ic_faq.xml | 17 ++++ app/src/main/res/drawable/ic_find_replace.xml | 14 ++++ app/src/main/res/drawable/ic_folder.xml | 10 +++ .../res/drawable/ic_format_line_spacing.xml | 20 +++++ app/src/main/res/drawable/ic_groups.xml | 20 +++++ app/src/main/res/drawable/ic_history.xml | 12 +++ app/src/main/res/drawable/ic_import.xml | 19 +++++ .../res/drawable/ic_interface_setting.xml | 14 ++++ app/src/main/res/drawable/ic_last_read.xml | 7 ++ app/src/main/res/drawable/ic_launch.xml | 14 ++++ app/src/main/res/drawable/ic_list.xml | 26 ++++++ app/src/main/res/drawable/ic_mail.xml | 11 +++ app/src/main/res/drawable/ic_more_vert.xml | 9 +++ .../main/res/drawable/ic_network_check.xml | 9 +++ app/src/main/res/drawable/ic_pause_24dp.xml | 9 +++ .../res/drawable/ic_pause_outline_24dp.xml | 14 ++++ app/src/main/res/drawable/ic_play_24dp.xml | 9 +++ .../res/drawable/ic_play_outline_24dp.xml | 11 +++ app/src/main/res/drawable/ic_qq_group.xml | 11 +++ app/src/main/res/drawable/ic_read_aloud.xml | 11 +++ .../res/drawable/ic_refresh_black_24dp.xml | 14 ++++ .../res/drawable/ic_refresh_white_24dp.xml | 9 +++ app/src/main/res/drawable/ic_restore.xml | 26 ++++++ app/src/main/res/drawable/ic_save.xml | 14 ++++ app/src/main/res/drawable/ic_scan.xml | 11 +++ app/src/main/res/drawable/ic_scoring.xml | 11 +++ app/src/main/res/drawable/ic_search.xml | 17 ++++ app/src/main/res/drawable/ic_select_all.xml | 23 ++++++ app/src/main/res/drawable/ic_settings.xml | 14 ++++ app/src/main/res/drawable/ic_share.xml | 14 ++++ app/src/main/res/drawable/ic_skip_next.xml | 9 +++ .../main/res/drawable/ic_skip_previous.xml | 9 +++ .../main/res/drawable/ic_stop_black_24dp.xml | 9 +++ .../res/drawable/ic_swap_outline_24dp.xml | 20 +++++ app/src/main/res/drawable/ic_theme.xml | 20 +++++ .../main/res/drawable/ic_time_add_24dp.xml | 10 +++ .../main/res/drawable/ic_timer_black_24dp.xml | 20 +++++ app/src/main/res/drawable/ic_toc.xml | 26 ++++++ app/src/main/res/drawable/ic_top_source.xml | 14 ++++ app/src/main/res/drawable/ic_translate.xml | 14 ++++ app/src/main/res/drawable/ic_tune.xml | 17 ++++ app/src/main/res/drawable/ic_update.xml | 14 ++++ app/src/main/res/drawable/ic_version.xml | 11 +++ app/src/main/res/drawable/ic_view_quilt.xml | 26 ++++++ app/src/main/res/drawable/ic_volume_up.xml | 9 +++ app/src/main/res/drawable/ic_web_outline.xml | 13 +++ .../main/res/drawable/ic_web_service_noti.xml | 10 +++ .../res/drawable/ic_web_service_phone.xml | 17 ++++ app/src/main/res/drawable/icon_read_book.png | Bin 0 -> 10462 bytes app/src/main/res/drawable/image_welcome.xml | 75 ++++++++++++++++++ app/src/main/res/drawable/image_yue_du.webp | Bin 0 -> 7540 bytes .../main/res/drawable/img_cover_default.jpg | Bin 0 -> 6927 bytes app/src/main/res/drawable/img_cover_gs.jpg | Bin 0 -> 3753 bytes .../main/res/drawable/selector_common_bg.xml | 10 +++ .../res/drawable/selector_fillet_btn_bg.xml | 5 ++ .../main/res/drawable/selector_tv_black.xml | 6 ++ app/src/main/res/drawable/shape_card_view.xml | 6 ++ .../main/res/drawable/shape_fillet_btn.xml | 6 ++ .../res/drawable/shape_fillet_btn_press.xml | 6 ++ .../drawable/shape_pop_checkaddshelf_bg.xml | 6 ++ .../main/res/drawable/shape_radius_1dp.xml | 7 ++ .../main/res/drawable/shape_space_divider.xml | 8 ++ .../main/res/drawable/shape_text_cursor.xml | 7 ++ app/src/main/res/layout/activity_main.xml | 43 +++++----- app/src/main/res/layout/activity_search.xml | 51 +++++------- app/src/main/res/values/dimens.xml | 25 ++++++ 114 files changed, 1486 insertions(+), 74 deletions(-) create mode 100644 app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.java create mode 100644 app/src/main/res/drawable-v21/bg_ib_pre.xml create mode 100644 app/src/main/res/drawable-v21/bg_ib_pre_round.xml create mode 100644 app/src/main/res/drawable/bg_chapter_item_divider.xml create mode 100644 app/src/main/res/drawable/bg_edit.xml create mode 100644 app/src/main/res/drawable/bg_ib_pre.xml create mode 100644 app/src/main/res/drawable/bg_shadow_bottom.png create mode 100644 app/src/main/res/drawable/bg_shadow_bottom_night.png create mode 100644 app/src/main/res/drawable/bg_shadow_top.png create mode 100644 app/src/main/res/drawable/bg_shadow_top_night.png create mode 100644 app/src/main/res/drawable/bg_textfield_search.xml create mode 100644 app/src/main/res/drawable/fastscroll_bubble.xml create mode 100644 app/src/main/res/drawable/fastscroll_handle.xml create mode 100644 app/src/main/res/drawable/fastscroll_track.xml create mode 100644 app/src/main/res/drawable/ic_about.xml create mode 100644 app/src/main/res/drawable/ic_add.xml create mode 100644 app/src/main/res/drawable/ic_add_online.xml create mode 100644 app/src/main/res/drawable/ic_arrange.xml create mode 100644 app/src/main/res/drawable/ic_arrow_back.xml create mode 100644 app/src/main/res/drawable/ic_arrow_drop_down.xml create mode 100644 app/src/main/res/drawable/ic_arrow_drop_up.xml create mode 100644 app/src/main/res/drawable/ic_author.xml create mode 100644 app/src/main/res/drawable/ic_auto_page.xml create mode 100644 app/src/main/res/drawable/ic_auto_page_stop.xml create mode 100644 app/src/main/res/drawable/ic_back_last.xml create mode 100644 app/src/main/res/drawable/ic_backup.xml create mode 100644 app/src/main/res/drawable/ic_book_has.xml create mode 100644 app/src/main/res/drawable/ic_book_last.xml create mode 100644 app/src/main/res/drawable/ic_book_source_manage.xml create mode 100644 app/src/main/res/drawable/ic_bookmark.xml create mode 100644 app/src/main/res/drawable/ic_brightness.xml create mode 100644 app/src/main/res/drawable/ic_cancel.xml create mode 100644 app/src/main/res/drawable/ic_chapter_list.xml create mode 100644 app/src/main/res/drawable/ic_check.xml create mode 100644 app/src/main/res/drawable/ic_check_source.xml create mode 100644 app/src/main/res/drawable/ic_copy.xml create mode 100644 app/src/main/res/drawable/ic_daytime.xml create mode 100644 app/src/main/res/drawable/ic_disclaimer.xml create mode 100644 app/src/main/res/drawable/ic_donate.xml create mode 100644 app/src/main/res/drawable/ic_download.xml create mode 100644 app/src/main/res/drawable/ic_download_line.xml create mode 100644 app/src/main/res/drawable/ic_exchange.xml create mode 100644 app/src/main/res/drawable/ic_expand_less_24dp.xml create mode 100644 app/src/main/res/drawable/ic_expand_more_24dp.xml create mode 100644 app/src/main/res/drawable/ic_faq.xml create mode 100644 app/src/main/res/drawable/ic_find_replace.xml create mode 100644 app/src/main/res/drawable/ic_folder.xml create mode 100644 app/src/main/res/drawable/ic_format_line_spacing.xml create mode 100644 app/src/main/res/drawable/ic_groups.xml create mode 100644 app/src/main/res/drawable/ic_history.xml create mode 100644 app/src/main/res/drawable/ic_import.xml create mode 100644 app/src/main/res/drawable/ic_interface_setting.xml create mode 100644 app/src/main/res/drawable/ic_last_read.xml create mode 100644 app/src/main/res/drawable/ic_launch.xml create mode 100644 app/src/main/res/drawable/ic_list.xml create mode 100644 app/src/main/res/drawable/ic_mail.xml create mode 100644 app/src/main/res/drawable/ic_more_vert.xml create mode 100644 app/src/main/res/drawable/ic_network_check.xml create mode 100644 app/src/main/res/drawable/ic_pause_24dp.xml create mode 100644 app/src/main/res/drawable/ic_pause_outline_24dp.xml create mode 100644 app/src/main/res/drawable/ic_play_24dp.xml create mode 100644 app/src/main/res/drawable/ic_play_outline_24dp.xml create mode 100644 app/src/main/res/drawable/ic_qq_group.xml create mode 100644 app/src/main/res/drawable/ic_read_aloud.xml create mode 100644 app/src/main/res/drawable/ic_refresh_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_refresh_white_24dp.xml create mode 100644 app/src/main/res/drawable/ic_restore.xml create mode 100644 app/src/main/res/drawable/ic_save.xml create mode 100644 app/src/main/res/drawable/ic_scan.xml create mode 100644 app/src/main/res/drawable/ic_scoring.xml create mode 100644 app/src/main/res/drawable/ic_search.xml create mode 100644 app/src/main/res/drawable/ic_select_all.xml create mode 100644 app/src/main/res/drawable/ic_settings.xml create mode 100644 app/src/main/res/drawable/ic_share.xml create mode 100644 app/src/main/res/drawable/ic_skip_next.xml create mode 100644 app/src/main/res/drawable/ic_skip_previous.xml create mode 100644 app/src/main/res/drawable/ic_stop_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_swap_outline_24dp.xml create mode 100644 app/src/main/res/drawable/ic_theme.xml create mode 100644 app/src/main/res/drawable/ic_time_add_24dp.xml create mode 100644 app/src/main/res/drawable/ic_timer_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_toc.xml create mode 100644 app/src/main/res/drawable/ic_top_source.xml create mode 100644 app/src/main/res/drawable/ic_translate.xml create mode 100644 app/src/main/res/drawable/ic_tune.xml create mode 100644 app/src/main/res/drawable/ic_update.xml create mode 100644 app/src/main/res/drawable/ic_version.xml create mode 100644 app/src/main/res/drawable/ic_view_quilt.xml create mode 100644 app/src/main/res/drawable/ic_volume_up.xml create mode 100644 app/src/main/res/drawable/ic_web_outline.xml create mode 100644 app/src/main/res/drawable/ic_web_service_noti.xml create mode 100644 app/src/main/res/drawable/ic_web_service_phone.xml create mode 100644 app/src/main/res/drawable/icon_read_book.png create mode 100644 app/src/main/res/drawable/image_welcome.xml create mode 100644 app/src/main/res/drawable/image_yue_du.webp create mode 100644 app/src/main/res/drawable/img_cover_default.jpg create mode 100644 app/src/main/res/drawable/img_cover_gs.jpg create mode 100644 app/src/main/res/drawable/selector_common_bg.xml create mode 100644 app/src/main/res/drawable/selector_fillet_btn_bg.xml create mode 100644 app/src/main/res/drawable/selector_tv_black.xml create mode 100644 app/src/main/res/drawable/shape_card_view.xml create mode 100644 app/src/main/res/drawable/shape_fillet_btn.xml create mode 100644 app/src/main/res/drawable/shape_fillet_btn_press.xml create mode 100644 app/src/main/res/drawable/shape_pop_checkaddshelf_bg.xml create mode 100644 app/src/main/res/drawable/shape_radius_1dp.xml create mode 100644 app/src/main/res/drawable/shape_space_divider.xml create mode 100644 app/src/main/res/drawable/shape_text_cursor.xml diff --git a/app/src/main/java/io/legado/app/base/BaseActivity.kt b/app/src/main/java/io/legado/app/base/BaseActivity.kt index c85db5b5c..0de007342 100644 --- a/app/src/main/java/io/legado/app/base/BaseActivity.kt +++ b/app/src/main/java/io/legado/app/base/BaseActivity.kt @@ -3,15 +3,9 @@ package io.legado.app.base import android.os.Bundle import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity -import androidx.databinding.DataBindingUtil -import androidx.databinding.ViewDataBinding import androidx.lifecycle.ViewModel -import com.google.android.material.bottomnavigation.BottomNavigationView -abstract class BaseActivity : AppCompatActivity() { - - protected lateinit var dataBinding: BD - private set +abstract class BaseActivity : AppCompatActivity() { protected abstract val viewModel: VM @@ -19,7 +13,7 @@ abstract class BaseActivity : AppCompatAct override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - dataBinding = DataBindingUtil.setContentView(this, layoutID) + setContentView(layoutID) onViewModelCreated(viewModel, savedInstanceState) } diff --git a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt index 8e9de7e29..246533e56 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt @@ -16,12 +16,12 @@ import io.legado.app.help.storage.Backup import io.legado.app.help.storage.Restore import io.legado.app.ui.replacerule.ReplaceRuleActivity import io.legado.app.ui.search.SearchActivity -import io.legado.app.utils.* +import io.legado.app.utils.getViewModel import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.app_bar_main.* import org.jetbrains.anko.startActivity -class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedListener { +class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedListener { override val viewModel: MainViewModel get() = getViewModel(MainViewModel::class.java) diff --git a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt index 5d0ebadc6..2c282e458 100644 --- a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt +++ b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt @@ -2,34 +2,37 @@ package io.legado.app.ui.replacerule import android.os.Bundle import android.util.Log -import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.lifecycle.LiveData import androidx.lifecycle.Observer import androidx.paging.LivePagedListBuilder import androidx.paging.PagedList import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import io.legado.app.App import io.legado.app.R +import io.legado.app.base.BaseActivity +import io.legado.app.constant.AppConst.APP_TAG import io.legado.app.data.entities.ReplaceRule +import io.legado.app.utils.getViewModel import kotlinx.android.synthetic.main.activity_replace_rule.* import org.jetbrains.anko.doAsync import org.jetbrains.anko.toast -import androidx.recyclerview.widget.RecyclerView -import androidx.recyclerview.widget.ItemTouchHelper -import io.legado.app.constant.AppConst.APP_TAG -import kotlinx.android.synthetic.main.item_relace_rule.* -class ReplaceRuleActivity : AppCompatActivity() { +class ReplaceRuleActivity : BaseActivity() { + override val viewModel: ReplaceRuleViewModel + get() = getViewModel(ReplaceRuleViewModel::class.java) + override val layoutID: Int + get() = R.layout.activity_replace_rule private lateinit var adapter: ReplaceRuleAdapter private var rulesLiveData: LiveData>? = null private var allEnabled = false - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_replace_rule) + override fun onViewModelCreated(viewModel: ReplaceRuleViewModel, savedInstanceState: Bundle?) { + super.onViewModelCreated(viewModel, savedInstanceState) initRecyclerView() initDataObservers() initSwipeToDelete() diff --git a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.java b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.java new file mode 100644 index 000000000..fac35d61d --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.java @@ -0,0 +1,11 @@ +package io.legado.app.ui.replacerule; + +import android.app.Application; +import io.legado.app.base.BaseViewModel; +import org.jetbrains.annotations.NotNull; + +public class ReplaceRuleViewModel extends BaseViewModel { + public ReplaceRuleViewModel(@NotNull Application application) { + super(application); + } +} diff --git a/app/src/main/java/io/legado/app/ui/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/search/SearchActivity.kt index c58c611a9..da55af76a 100644 --- a/app/src/main/java/io/legado/app/ui/search/SearchActivity.kt +++ b/app/src/main/java/io/legado/app/ui/search/SearchActivity.kt @@ -3,11 +3,10 @@ package io.legado.app.ui.search import android.os.Bundle import io.legado.app.R import io.legado.app.base.BaseActivity -import io.legado.app.data.entities.rule.Rule import io.legado.app.utils.getViewModel import org.jetbrains.anko.startActivity -class SearchActivity : BaseActivity() { +class SearchActivity : BaseActivity() { override val viewModel: SearchViewModel get() = getViewModel(SearchViewModel::class.java) diff --git a/app/src/main/res/drawable-v21/bg_ib_pre.xml b/app/src/main/res/drawable-v21/bg_ib_pre.xml new file mode 100644 index 000000000..9fdfe8c17 --- /dev/null +++ b/app/src/main/res/drawable-v21/bg_ib_pre.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/bg_ib_pre_round.xml b/app/src/main/res/drawable-v21/bg_ib_pre_round.xml new file mode 100644 index 000000000..c43b5c490 --- /dev/null +++ b/app/src/main/res/drawable-v21/bg_ib_pre_round.xml @@ -0,0 +1,3 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_chapter_item_divider.xml b/app/src/main/res/drawable/bg_chapter_item_divider.xml new file mode 100644 index 000000000..423a6bb03 --- /dev/null +++ b/app/src/main/res/drawable/bg_chapter_item_divider.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_edit.xml b/app/src/main/res/drawable/bg_edit.xml new file mode 100644 index 000000000..8a3c4e59e --- /dev/null +++ b/app/src/main/res/drawable/bg_edit.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_ib_pre.xml b/app/src/main/res/drawable/bg_ib_pre.xml new file mode 100644 index 000000000..d44a8b2f0 --- /dev/null +++ b/app/src/main/res/drawable/bg_ib_pre.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_shadow_bottom.png b/app/src/main/res/drawable/bg_shadow_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..ac0124b670691689ed19d44fb1498230f91cbf68 GIT binary patch literal 3127 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 F699})m_h&m literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/bg_shadow_top.png b/app/src/main/res/drawable/bg_shadow_top.png new file mode 100644 index 0000000000000000000000000000000000000000..cb8fee03db41e424234fce1f138671c15d338c3d GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^M}XLlg&9b;HLg?#QbGYfA+8+iZY**Ztctck5`t!a zDt86SvXun+1&cEZvGQ`(?r9eRioEu8aSVw#{Pxnt%)<@>t{2;_3^EfW?=(o>IbgKv zfc4+)lcqLF$b711HrgeB`k$;^PmbC)O`RsKMK9M*7FrfRx5%}b_jmF!&+rXxZ#&oc zCq%l4rKtq9tmNs)xbgH_*R?f{vMiN5FY@{cCI-0P*(kepQMt%PkwX_me(>Zvl`!-2 z-U(ovTO@PedWz8eg)F^FZU&+U-)bbq&Qx@r;2~(~mZaGqre!zopr0Bb^kD*ylh literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/bg_shadow_top_night.png b/app/src/main/res/drawable/bg_shadow_top_night.png new file mode 100644 index 0000000000000000000000000000000000000000..7984c35dbd2cdb35c16cf7942de030ed4e225565 GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^M}XLlgAGWQtluI6q!^2X+?^QKos)S9a~60+7BevL9R^{>lk;;^Bllfrk9fQG{C_uv)`~2aO-8k* zOuKLEZ#dQRBZsA^?Z& zY!)NMJgG*Xj_Ym;!jEuF4af=70@2Ctw%C zHruCTGf2Zm!4oYOxhyrOgxc2ll=nJ>Et~A-pqOyt)DwQE4W5d7{_#q0_c3_FQ+S6X zCG}I0e9jslpsiL}Kw}TPDWrGo2f4)&X!f5>77-@4>+1|soZgr-sj=_?k*14W!cqZ) zB|PT@Hw1D>1a<5=&$0%n>a`FL7h|(_I736c&T0Oe4XlDe@&eO=q08Xu>gTe~DWM4f Du2h!N literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/bg_textfield_search.xml b/app/src/main/res/drawable/bg_textfield_search.xml new file mode 100644 index 000000000..9db913814 --- /dev/null +++ b/app/src/main/res/drawable/bg_textfield_search.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/fastscroll_bubble.xml b/app/src/main/res/drawable/fastscroll_bubble.xml new file mode 100644 index 000000000..566919858 --- /dev/null +++ b/app/src/main/res/drawable/fastscroll_bubble.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/fastscroll_handle.xml b/app/src/main/res/drawable/fastscroll_handle.xml new file mode 100644 index 000000000..7cc91b9ea --- /dev/null +++ b/app/src/main/res/drawable/fastscroll_handle.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/fastscroll_track.xml b/app/src/main/res/drawable/fastscroll_track.xml new file mode 100644 index 000000000..d60893c04 --- /dev/null +++ b/app/src/main/res/drawable/fastscroll_track.xml @@ -0,0 +1,27 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_about.xml b/app/src/main/res/drawable/ic_about.xml new file mode 100644 index 000000000..1c6a7f643 --- /dev/null +++ b/app/src/main/res/drawable/ic_about.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add.xml b/app/src/main/res/drawable/ic_add.xml new file mode 100644 index 000000000..67a246c89 --- /dev/null +++ b/app/src/main/res/drawable/ic_add.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_online.xml b/app/src/main/res/drawable/ic_add_online.xml new file mode 100644 index 000000000..1b1387f70 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_online.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_arrange.xml b/app/src/main/res/drawable/ic_arrange.xml new file mode 100644 index 000000000..130079315 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrange.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_arrow_back.xml b/app/src/main/res/drawable/ic_arrow_back.xml new file mode 100644 index 000000000..e1d42df18 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_arrow_drop_down.xml b/app/src/main/res/drawable/ic_arrow_drop_down.xml new file mode 100644 index 000000000..f7def8a08 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_drop_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_arrow_drop_up.xml b/app/src/main/res/drawable/ic_arrow_drop_up.xml new file mode 100644 index 000000000..a6d5895e2 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_drop_up.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_author.xml b/app/src/main/res/drawable/ic_author.xml new file mode 100644 index 000000000..d14ffaf39 --- /dev/null +++ b/app/src/main/res/drawable/ic_author.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_auto_page.xml b/app/src/main/res/drawable/ic_auto_page.xml new file mode 100644 index 000000000..f720abd23 --- /dev/null +++ b/app/src/main/res/drawable/ic_auto_page.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_auto_page_stop.xml b/app/src/main/res/drawable/ic_auto_page_stop.xml new file mode 100644 index 000000000..bebcd8680 --- /dev/null +++ b/app/src/main/res/drawable/ic_auto_page_stop.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_back_last.xml b/app/src/main/res/drawable/ic_back_last.xml new file mode 100644 index 000000000..243d0386e --- /dev/null +++ b/app/src/main/res/drawable/ic_back_last.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_backup.xml b/app/src/main/res/drawable/ic_backup.xml new file mode 100644 index 000000000..8b17ca37c --- /dev/null +++ b/app/src/main/res/drawable/ic_backup.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_book_has.xml b/app/src/main/res/drawable/ic_book_has.xml new file mode 100644 index 000000000..0b7941616 --- /dev/null +++ b/app/src/main/res/drawable/ic_book_has.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_book_last.xml b/app/src/main/res/drawable/ic_book_last.xml new file mode 100644 index 000000000..3ee254c91 --- /dev/null +++ b/app/src/main/res/drawable/ic_book_last.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_book_source_manage.xml b/app/src/main/res/drawable/ic_book_source_manage.xml new file mode 100644 index 000000000..ac9acfc6c --- /dev/null +++ b/app/src/main/res/drawable/ic_book_source_manage.xml @@ -0,0 +1,20 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bookmark.xml b/app/src/main/res/drawable/ic_bookmark.xml new file mode 100644 index 000000000..0eccdac3f --- /dev/null +++ b/app/src/main/res/drawable/ic_bookmark.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_brightness.xml b/app/src/main/res/drawable/ic_brightness.xml new file mode 100644 index 000000000..095df912f --- /dev/null +++ b/app/src/main/res/drawable/ic_brightness.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_cancel.xml b/app/src/main/res/drawable/ic_cancel.xml new file mode 100644 index 000000000..8b2b5cbb4 --- /dev/null +++ b/app/src/main/res/drawable/ic_cancel.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_chapter_list.xml b/app/src/main/res/drawable/ic_chapter_list.xml new file mode 100644 index 000000000..c667fa24e --- /dev/null +++ b/app/src/main/res/drawable/ic_chapter_list.xml @@ -0,0 +1,20 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml new file mode 100644 index 000000000..a4f01346c --- /dev/null +++ b/app/src/main/res/drawable/ic_check.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_check_source.xml b/app/src/main/res/drawable/ic_check_source.xml new file mode 100644 index 000000000..7384b9986 --- /dev/null +++ b/app/src/main/res/drawable/ic_check_source.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_copy.xml b/app/src/main/res/drawable/ic_copy.xml new file mode 100644 index 000000000..54c020707 --- /dev/null +++ b/app/src/main/res/drawable/ic_copy.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_daytime.xml b/app/src/main/res/drawable/ic_daytime.xml new file mode 100644 index 000000000..363491941 --- /dev/null +++ b/app/src/main/res/drawable/ic_daytime.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_disclaimer.xml b/app/src/main/res/drawable/ic_disclaimer.xml new file mode 100644 index 000000000..fd6ad6dd2 --- /dev/null +++ b/app/src/main/res/drawable/ic_disclaimer.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_donate.xml b/app/src/main/res/drawable/ic_donate.xml new file mode 100644 index 000000000..b86f39cb5 --- /dev/null +++ b/app/src/main/res/drawable/ic_donate.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_download.xml b/app/src/main/res/drawable/ic_download.xml new file mode 100644 index 000000000..0e2c939be --- /dev/null +++ b/app/src/main/res/drawable/ic_download.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_download_line.xml b/app/src/main/res/drawable/ic_download_line.xml new file mode 100644 index 000000000..854a3ec99 --- /dev/null +++ b/app/src/main/res/drawable/ic_download_line.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_exchange.xml b/app/src/main/res/drawable/ic_exchange.xml new file mode 100644 index 000000000..2eb01190b --- /dev/null +++ b/app/src/main/res/drawable/ic_exchange.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_expand_less_24dp.xml b/app/src/main/res/drawable/ic_expand_less_24dp.xml new file mode 100644 index 000000000..4ac9d39c4 --- /dev/null +++ b/app/src/main/res/drawable/ic_expand_less_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_expand_more_24dp.xml b/app/src/main/res/drawable/ic_expand_more_24dp.xml new file mode 100644 index 000000000..82e7ee5de --- /dev/null +++ b/app/src/main/res/drawable/ic_expand_more_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_faq.xml b/app/src/main/res/drawable/ic_faq.xml new file mode 100644 index 000000000..00835615d --- /dev/null +++ b/app/src/main/res/drawable/ic_faq.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_find_replace.xml b/app/src/main/res/drawable/ic_find_replace.xml new file mode 100644 index 000000000..3e9c524b1 --- /dev/null +++ b/app/src/main/res/drawable/ic_find_replace.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_folder.xml b/app/src/main/res/drawable/ic_folder.xml new file mode 100644 index 000000000..7f16bd7c1 --- /dev/null +++ b/app/src/main/res/drawable/ic_folder.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_format_line_spacing.xml b/app/src/main/res/drawable/ic_format_line_spacing.xml new file mode 100644 index 000000000..b1586f195 --- /dev/null +++ b/app/src/main/res/drawable/ic_format_line_spacing.xml @@ -0,0 +1,20 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_groups.xml b/app/src/main/res/drawable/ic_groups.xml new file mode 100644 index 000000000..8a46a8295 --- /dev/null +++ b/app/src/main/res/drawable/ic_groups.xml @@ -0,0 +1,20 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_history.xml b/app/src/main/res/drawable/ic_history.xml new file mode 100644 index 000000000..7a17e5efd --- /dev/null +++ b/app/src/main/res/drawable/ic_history.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_import.xml b/app/src/main/res/drawable/ic_import.xml new file mode 100644 index 000000000..f2ebb9ced --- /dev/null +++ b/app/src/main/res/drawable/ic_import.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_interface_setting.xml b/app/src/main/res/drawable/ic_interface_setting.xml new file mode 100644 index 000000000..12377d124 --- /dev/null +++ b/app/src/main/res/drawable/ic_interface_setting.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_last_read.xml b/app/src/main/res/drawable/ic_last_read.xml new file mode 100644 index 000000000..b74e62b0b --- /dev/null +++ b/app/src/main/res/drawable/ic_last_read.xml @@ -0,0 +1,7 @@ + + + diff --git a/app/src/main/res/drawable/ic_launch.xml b/app/src/main/res/drawable/ic_launch.xml new file mode 100644 index 000000000..fd066a65a --- /dev/null +++ b/app/src/main/res/drawable/ic_launch.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_list.xml b/app/src/main/res/drawable/ic_list.xml new file mode 100644 index 000000000..447de0d25 --- /dev/null +++ b/app/src/main/res/drawable/ic_list.xml @@ -0,0 +1,26 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_mail.xml b/app/src/main/res/drawable/ic_mail.xml new file mode 100644 index 000000000..1a141c9ab --- /dev/null +++ b/app/src/main/res/drawable/ic_mail.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_more_vert.xml b/app/src/main/res/drawable/ic_more_vert.xml new file mode 100644 index 000000000..e708a4db1 --- /dev/null +++ b/app/src/main/res/drawable/ic_more_vert.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_network_check.xml b/app/src/main/res/drawable/ic_network_check.xml new file mode 100644 index 000000000..c6ef1b857 --- /dev/null +++ b/app/src/main/res/drawable/ic_network_check.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_pause_24dp.xml b/app/src/main/res/drawable/ic_pause_24dp.xml new file mode 100644 index 000000000..a4eba8213 --- /dev/null +++ b/app/src/main/res/drawable/ic_pause_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_pause_outline_24dp.xml b/app/src/main/res/drawable/ic_pause_outline_24dp.xml new file mode 100644 index 000000000..556cddae7 --- /dev/null +++ b/app/src/main/res/drawable/ic_pause_outline_24dp.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_play_24dp.xml b/app/src/main/res/drawable/ic_play_24dp.xml new file mode 100644 index 000000000..cf5976472 --- /dev/null +++ b/app/src/main/res/drawable/ic_play_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_play_outline_24dp.xml b/app/src/main/res/drawable/ic_play_outline_24dp.xml new file mode 100644 index 000000000..b41d03091 --- /dev/null +++ b/app/src/main/res/drawable/ic_play_outline_24dp.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_qq_group.xml b/app/src/main/res/drawable/ic_qq_group.xml new file mode 100644 index 000000000..e97350048 --- /dev/null +++ b/app/src/main/res/drawable/ic_qq_group.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_read_aloud.xml b/app/src/main/res/drawable/ic_read_aloud.xml new file mode 100644 index 000000000..f0ab5860a --- /dev/null +++ b/app/src/main/res/drawable/ic_read_aloud.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_refresh_black_24dp.xml b/app/src/main/res/drawable/ic_refresh_black_24dp.xml new file mode 100644 index 000000000..6f22d5f31 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh_black_24dp.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_refresh_white_24dp.xml b/app/src/main/res/drawable/ic_refresh_white_24dp.xml new file mode 100644 index 000000000..5c2f53873 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh_white_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_restore.xml b/app/src/main/res/drawable/ic_restore.xml new file mode 100644 index 000000000..12c95ce76 --- /dev/null +++ b/app/src/main/res/drawable/ic_restore.xml @@ -0,0 +1,26 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_save.xml b/app/src/main/res/drawable/ic_save.xml new file mode 100644 index 000000000..27c5b36ce --- /dev/null +++ b/app/src/main/res/drawable/ic_save.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_scan.xml b/app/src/main/res/drawable/ic_scan.xml new file mode 100644 index 000000000..ed5b5f201 --- /dev/null +++ b/app/src/main/res/drawable/ic_scan.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_scoring.xml b/app/src/main/res/drawable/ic_scoring.xml new file mode 100644 index 000000000..b716b3ef8 --- /dev/null +++ b/app/src/main/res/drawable/ic_scoring.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 000000000..c7370b2d3 --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,17 @@ + + + + diff --git a/app/src/main/res/drawable/ic_select_all.xml b/app/src/main/res/drawable/ic_select_all.xml new file mode 100644 index 000000000..6e73c7002 --- /dev/null +++ b/app/src/main/res/drawable/ic_select_all.xml @@ -0,0 +1,23 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml new file mode 100644 index 000000000..fe8892929 --- /dev/null +++ b/app/src/main/res/drawable/ic_settings.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_share.xml b/app/src/main/res/drawable/ic_share.xml new file mode 100644 index 000000000..0ed7a1688 --- /dev/null +++ b/app/src/main/res/drawable/ic_share.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_skip_next.xml b/app/src/main/res/drawable/ic_skip_next.xml new file mode 100644 index 000000000..4ad2389e0 --- /dev/null +++ b/app/src/main/res/drawable/ic_skip_next.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_skip_previous.xml b/app/src/main/res/drawable/ic_skip_previous.xml new file mode 100644 index 000000000..1f558a617 --- /dev/null +++ b/app/src/main/res/drawable/ic_skip_previous.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_stop_black_24dp.xml b/app/src/main/res/drawable/ic_stop_black_24dp.xml new file mode 100644 index 000000000..27eec317a --- /dev/null +++ b/app/src/main/res/drawable/ic_stop_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_swap_outline_24dp.xml b/app/src/main/res/drawable/ic_swap_outline_24dp.xml new file mode 100644 index 000000000..52e3355c1 --- /dev/null +++ b/app/src/main/res/drawable/ic_swap_outline_24dp.xml @@ -0,0 +1,20 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_theme.xml b/app/src/main/res/drawable/ic_theme.xml new file mode 100644 index 000000000..7af5b372e --- /dev/null +++ b/app/src/main/res/drawable/ic_theme.xml @@ -0,0 +1,20 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_time_add_24dp.xml b/app/src/main/res/drawable/ic_time_add_24dp.xml new file mode 100644 index 000000000..9114c9848 --- /dev/null +++ b/app/src/main/res/drawable/ic_time_add_24dp.xml @@ -0,0 +1,10 @@ + + + + diff --git a/app/src/main/res/drawable/ic_timer_black_24dp.xml b/app/src/main/res/drawable/ic_timer_black_24dp.xml new file mode 100644 index 000000000..a7338a31f --- /dev/null +++ b/app/src/main/res/drawable/ic_timer_black_24dp.xml @@ -0,0 +1,20 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_toc.xml b/app/src/main/res/drawable/ic_toc.xml new file mode 100644 index 000000000..e21bcf95c --- /dev/null +++ b/app/src/main/res/drawable/ic_toc.xml @@ -0,0 +1,26 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_top_source.xml b/app/src/main/res/drawable/ic_top_source.xml new file mode 100644 index 000000000..2c973959a --- /dev/null +++ b/app/src/main/res/drawable/ic_top_source.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_translate.xml b/app/src/main/res/drawable/ic_translate.xml new file mode 100644 index 000000000..0d5f42df1 --- /dev/null +++ b/app/src/main/res/drawable/ic_translate.xml @@ -0,0 +1,14 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_tune.xml b/app/src/main/res/drawable/ic_tune.xml new file mode 100644 index 000000000..b9bd12b85 --- /dev/null +++ b/app/src/main/res/drawable/ic_tune.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml new file mode 100644 index 000000000..0d0e1fe81 --- /dev/null +++ b/app/src/main/res/drawable/ic_update.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_version.xml b/app/src/main/res/drawable/ic_version.xml new file mode 100644 index 000000000..0eccdac3f --- /dev/null +++ b/app/src/main/res/drawable/ic_version.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_view_quilt.xml b/app/src/main/res/drawable/ic_view_quilt.xml new file mode 100644 index 000000000..30f5e324c --- /dev/null +++ b/app/src/main/res/drawable/ic_view_quilt.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_volume_up.xml b/app/src/main/res/drawable/ic_volume_up.xml new file mode 100644 index 000000000..e1e30c7c1 --- /dev/null +++ b/app/src/main/res/drawable/ic_volume_up.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_web_outline.xml b/app/src/main/res/drawable/ic_web_outline.xml new file mode 100644 index 000000000..7bcbe7ca6 --- /dev/null +++ b/app/src/main/res/drawable/ic_web_outline.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/ic_web_service_noti.xml b/app/src/main/res/drawable/ic_web_service_noti.xml new file mode 100644 index 000000000..edb48575d --- /dev/null +++ b/app/src/main/res/drawable/ic_web_service_noti.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_web_service_phone.xml b/app/src/main/res/drawable/ic_web_service_phone.xml new file mode 100644 index 000000000..4c8c83a40 --- /dev/null +++ b/app/src/main/res/drawable/ic_web_service_phone.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_read_book.png b/app/src/main/res/drawable/icon_read_book.png new file mode 100644 index 0000000000000000000000000000000000000000..016b8cf1677585100b3a89252402b4524e17cd7f GIT binary patch literal 10462 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 GVgC;_7WV=G literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/image_welcome.xml b/app/src/main/res/drawable/image_welcome.xml new file mode 100644 index 000000000..4f5b613b8 --- /dev/null +++ b/app/src/main/res/drawable/image_welcome.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/image_yue_du.webp b/app/src/main/res/drawable/image_yue_du.webp new file mode 100644 index 0000000000000000000000000000000000000000..2d3652cdb529062dd27818be7d2958b33cfb37cf GIT binary patch literal 7540 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 KC-mJCKmY)CblHIb literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/img_cover_default.jpg b/app/src/main/res/drawable/img_cover_default.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6504a4e7e8857ff417e2564aec97897265ef3289 GIT binary patch literal 6927 zcmb7{cTm&8xAwnuh*AwrLX#i~0aTiyHz^4{ARR@iK|#6#(gg*P5}I_7gx;itB3)WU zqy#}AAkwP^L7K?r_r7=L-hc1eo!Omv&VJ4_yR$p9XJ5`105-G^N(Z2#q5|~J8*nxY zXaV%Jbo6wz^z?M}3=H&)AT|()i3tQ|VZF%44d&tD26J&;<`)&b%qIfj;u4Y&61ge{ z7l-o-N?wB2_ph@V;35sxxn~-7Kn?gz+9DN@4rCz~0md!W=M%cz zlSG+~Q-hB+>0rCOMWNy9M3yFD4<$k*{@5Mkm@h@bSGUX>!$Gy{(rX+oM*(@CM>lB=zphD^ol`*ptYrOeo zg+C!axVOT7=cYoUg2FVrdAG~?W4^iRKbda1!7d^@2tBq{*Av_^29~nMeh(>=&}NUNK6dt= zI!xT|ahdi;1eQcn62>TLOCW)Jr_DlaO8*c-{sU0uUq}R|DSdE8I`FS$W*OF z8-_A{&x5`VhpC(a-)awCgX|E>Zuz$Ce=pyf*7}crgzSRL_9% zy*NeaPosY}p>FdJ^FKMwKtKA}!8{o^v`l*-7~UD2&TboI;hPnI{V#LdKZS`El{@_n z_SGhieaAJLVm-4DS*_x-!a--)&_d771b z5VK6gMUf;?-4x2{X}Q(Ry zSvY06)AW+;$gi{_B{nN+bv0UJeJVUA_@RyUaTs+h5n1 z35~+~HlPbe%)JC4(zhp&XRT>5ITkr4?g7FCl;Sy55){B*GU~5ATDJ5Q3-WTZ#^dv8 z#K7i8ZZTzEDD$z_kcyCEj+H)>X3^TTOj^YTHe+pp;FGVXup)iWh4>>A%8d+4%HEsDC3>i|7k7 z#Y>`0u+b=aQ~w`jXy=ZN(@Mz+=>@EJ=^$eKyM;YCW|6?>Zpt>*gvcdRzuR~jI^$~WS>Jw)~{%>@I zUOKPCv*r7lFdvmIb7!eudzx+Ro8Qd~WSNvVB9`vR%SQdDlPm3pL`)Ld3SpBr$`Z;d zmLQ&Z!PM|G3n|Rx#?>L`gfHILkA6cr#eAp-*YX&dsB8V7)=0j(fTcqk)&zplD z_58R_F_Ke83NH;4CRgkg{yPosrc+*j^2<`SRK*5;vrB@mEbDn=d% zWhWLLJ&5UF9r6_4)5)tJS^~d+!q}K#FVHY`?Q~HoJ=q#CLNIG@qhz*JE?X7Vc*j3_ z-uT4HBDVz{!1aad5KF^Jlk)4UZK{B6miZ$yY0eQx&d za~qUyNhQQKk&~1=vsE;|$B=OO<=n^bTi;4fOEc@feE;Q4SS@JThf+Z#YfT6>!f>H~ zi_*F?#8+~v_KE6ML*wz7?paO*6$nnJnge=dKV#Kp&= zTFYivC2AL@?T9wEhOLUD_>zq-I=Z{fu4O0WR#|Ijo?z6eDx<&cXSWFF``Y79(QmJd zg8KCf1JNdL^Ds$Xic8cvBu}f1C(OP6%Zf4YU9{eRu;!tI3pM~gz7yk~)AHF1sfnvx ze7}=oC^H~jw6o9&&5o{!3fz>L0qWqAr8;U8QNA9F;METyK2dQOoz3bQ)YK85csOts z?H9P&w`e1a*S0O}e_GartJ%0GtOY4zDCr2w`EBuB_k{qg80kUWz8tuV$3=6z$??DA zMeyUlk?7v1(W10|%xW?cr(j;|_4)T{-0cc&_bTY$*zujJ*VV}TCBYxCKDFjygofyg z+YCA0aa;Vk`?j{MeReLk&W);zE5thU@A}Rns;Q+vH9pNBmX0Jo6&JI76ZHI>oWSyt zIr-!+sdm<{jnGG)RH!k;9*k~x?FA0`<0W~zx{(+RqiPxib^;pp9HI|NG;U2B@pm`K z6u(1G&)RH^yzbMUt1xm<1hH9On_P=A66)~$H-F(GvhsaA<;ma|vLllbY5gx-%p4WM~1YOI>9>v;>?nuBG&#A$ARxJx8?7zWN}BOeJ?CaC{gFps5g zDnv!_O3CwCVTJYd0O*4Ez-o?YXB=Lhv%jBC&NnLm;rNkg(j`8G-|}kq>GkgjzYPJu z&+o3kxic`6Nru)H1_g(vK0Oxu+~1exo&H0(ZEL>B3aN8 zp23xO9Up-4^8IqUm97BBFLn%!ZThtYw6#20si8n$+Naphyip6Puln;P(76~7TLCe+ zccNP%ej`W4Hxn8C{0`qaS{G^JX23jwIQ;fqXExRf`UVA?Cv_efNfLQnJ@N0wa|7O~ z+=xby0+b02F)2CE3VD(1GT(JV#e)sk|7=^5xMk<1eot)Qj73F~EM5>y1g(-BP(R!TJw+c}`@0C$3HDq4U_j zo^f^)p9VuQt8XMC`|_7LLCY%R+i^09oR5yemcv|$U5(NWT@KRZI0PJBmy?GN>qD1- zXdrRx+rNq_xkI&j{a!HdF1#UiC>@|oW`q9H?#BYit|Ab9WW}#rkhR4KpfCYm-^LzC z+mEsL$e+sDuiP@(vc2`7qO$x6NQa7%PF=9MJa!m4&F3(B%=xYy5*?80^GtS#DX$@C zNtsPU8Nsv8qTB8^Y0v9GY|Xegi+PTDl|8XIS#TrXDQB;ACg{?L!nhr@w4V5ZgT_sL zb^=r))(iX4(!&4JeCoAZYL!QcPe1ZhgsAI#+d^~M*JsMKu=mALqv09QC#i>R((`cj zq(UwyrzB?ivYY`y8Svtm^bG#SN>O9gI*y1r-Gqrh3DMUc4>cfCl6Q^+ZmqIidXCcr zL7kRP77KWOQ9q2`eAb`;+Xb3rt%WaTpK5aFcxx);FMs|On2`=UL7bNRIPWqOUc_~x zTrP|h1$;~cbfg*h>tKbZcgV;8I6p1yVar@DKc*cJM%(0xTG8L~z5~#diGfYlu@9#%NtM}DwR##f6ol82v%|%{#=UN&RGTeV$w*wA&C~?7 zO{Goz0UWc$pH0!p^jQxX77iLZHUI1xaY#I>Q6+f@uTZb^Y%?>G1lk-}B7}foP>Ms4 zHUiE#Pq;!?>^H!*$uT5uv6|eDTH*Oc-}{R0M! zJ{*DgsL76121(sqX$hH{v3P&Q?;yRj3Vx7J)dEPA^}I<=N@;@l#+!X*y!lnma9r~{ zHxrx3(0i(Zi2?#=DYWKo7wyvgOTKR``FL_d*%MR5}V<`7!2PW~6I$i}JFC%*I ztdb4M+g@YI_HBmbkwMRZi6(i?iE%HVO6ZQlCz<>>ZVfx`S=|?kxb5bA-8Xp>B>3)E zvn}QwwdM*J`GaA-!>FKasx@mzz3R;#$4mPwwYJXaPhNUE-J7uW+a#l(Z_H;g{661G zP|v`30=5tN?iV%$)v7D+FR-CxL&9n#9_KQi5G_(?{cb8T(*3}K+(j+U1=4|0881(T{UQhL%3-)4nB)J2pcyUg65`f^D$bts5sxR$h?!x<=X_IR!MI*Q?@;V=oLis3=&Om-P1EE)mpE;;eh+;y)RREf z4bQN_+*R433tdpSK9D1z=<-%yzNVEz<~Z`6uuT8H=>|nkrgH=caXJW7;uBDVG&MmL za*+#JO`A%+*;)S*E$%*>)?!hty26KGGX7z$0`Q}{IPd-A^OsvQ@9z*_y1~*NQ=Az; z`;a(}A$UT=Qxm$vg6OB{?jL#i_I>5es_XJblP7Wb)=gtPF)hqA%)gYDHC$Z(u>2jP z#qbT+cxsvo?}>&yk{+Wv&62E@Wp}fUu=t!ylZIfitV`x!0&uyn^957Z_-ChgYF9$u zDq1-1^tns3XVO9hj8w)^YbD^=M5oRO3l(%O;^N%$>}NuWmhH!GEurSM>@%RW(yv=A zYJ|G1L$$kU`g^Mu+Dcf4j>FFEgGc3V6GR^?rT|?Ca}Tf_=J?uMS+H}WjeSw{Z*!y| zfP$CJ|H*k;&R~sdxpM}*zh@akU;l9VhP;#BupY-_?b#MIfTw8|P_Zum zsK)S-C%!Lgk%gGZn|l7h`cj)bO9-dx0uP&SF!=Vk-tjO*O&t&a;gWA2U-N3nEBMQ9 zF&moLI3tVCRVzuVP_~>gb6)QXY%!U!Y_YdYkjBP-bo`e8+#-xs$S~2>=hpM9$h3D? zjOJG0Jm@F<3}U}cJ4BxtV}DWaaD>dP`NlO@1~NDCxllaC#U_|YBZqjt4)vdBKu@rI zTnAr+ZQA4tRNnTXkr!OjwLF}EaB166W3G*c{MZ`j^r_9AuIj*Iw>t@!`vICmou5Td zAi-UJJ~E!EVX8op`GtPb6UL?f1f9X|~ zUbDh#S;SX|0os%OlgD(O;aMj=J8D%mm2)*d)rM&2)Y=FEbxlkvPKRD`MK`OusEhw{ zM(VBc$TJIZ1@ zVk@HsP@Jz}X)v6Rp^WwzUjRrl-mf&mz_p&LyNFniaeA(2VWyWc=vTszP$2b}HdiPd zKnz^y7RDy}faz+gyOvsMXuY73M`402{xH5T52 zIm9{lz542;7%yIwLzE~@WhZ9pR{b945pXv!<6>b$R&V;6!ltotP;Wb&#sPS=b=hm? z?R*a5R-7Z)kd;1JT~y&V%+wGRGtQeJB-zIl0a{o9=huTXb%q03+iW4RVY z*h$!C9zpg~N-pCroO7S^O1+#Z0}$nshVl{3%U0uY;*hk1=x@WMSR8P2EWWId|5m z$CGl78CA3;I};Sg6HYrVU1f=1$)gSa2%5(>LDP#3k->rBe34X`BlzJN;9ea8VSzCf zI0(Qw_hi}nw~!>+5Bdfzxg>@wFQv2bPRAMg(`izAq4OW?OvSuDczI7nB^*_{`?q{C z6NooyJVL`M9Dzp_Z*Hs{x|UQArBk%aDKmCStW4J5Zj*BG6zjOs?~lCsUWPmK(m*d+ zb=V)?jK?<{<@zXI z{Rw^;BW!T2O6BzZl&HZBrqOz%z-UMJlt$YSE#4zALBeMayq@`U9ga`4aOuZ!KFfM# zHjOM!d+p?hY3$a20Mb)RL~`nL9G~9<8$X8@Ir7Bmx=+YprP~&rxX^xyM}?3{e;ddl zps=6<3AxPUQN`NU*lNKQ0#|GBuYUTa1g>eiaqb@K$g5-D5WUuS>yWkgNh)y{gaSBn z4pv{UpQ_Gh5f#`or3TRyDNkP--gQ85wcP5ai}h1}wkf3B8lmRnc0Rg(!u0omsjWDY z`Vy*i!HlXQ!PbI7rM&foz{2Khc`4iU!5e|S88L0|I>4GoGttrd*@+WTR8qhU?;3e2 z$$iF!&1Etuzn%GhK!gs+#arZ=Ha_3SPDh^m0QDf3^xaF9j(MHMOyL!eubjts*Md{WcQ{mOO zzw`f`r&vDkmikXE7r*+7Qea!qq$F1Pvi23JGr%i=GGrvfZ|r$zoP$Zou?GB4DbCgn z6T<{7eHRDk{Yj{7cD%?=dfKEFGZmHPleX6G<_n@5Yl;J?YqAXWm$CqjzSSh_0t0QG z6ok;Idh%xIo-A{&y}HnL=v!k3EmUfh$QkhU0RMc;k}`4aqo4B`5F=RXcR{eM-gnG0tZm>C{;qq3qH&Jaed>>G4>d1%{jksesit4#@O6Z?pr_}7vX;r z0IaPw0b$^maX$i**f2sM6957HJhw3baNmM8{1^-x8U~|;>fnh~Uy=@i8VrlT(_jc4 zI1DhxM9}brKoSGuOCtMIOrZZXwL&5OL=&hx$_{Qvvmp8TTSd}IE|K=GgvdaGArXo( zg&0SmBZ6tcBnBQ55gbGbMMs!GzmcPP>n%473i+182sDA3ZB>PM*f~NhsB{tpr32qj zfa}8{`Uo9_uAYH`fi?sQN5EllBn*Mvk1#;%BGGU-iiI=Xr z1*V}b=p;OYN_VAFgMOT%qaT$)4fUhaAQmnth`T?9NDUADmThN;wx)zK@Du{c8fyaO z;dT7|iD;ZIN*8NjVW^8k=pzug1Li1QbDTcb5U!8YL&8zWA6P7v5Ee|LFn(Z(zp!S% z#cmBkFpXCkOQQRqA`uVKslkwM4Ws>kuf^cEeBZIe-)lMWTP%zx2DWvr|8dPfT)f%Y zTK*hb-sb1nlPJ7dr}KuI`w5WvHmU%zjrVv!+?T*PK#-rGUw~gwKtNDLkoSoS3knL0 zif!8_x^0`-cCl}^T}x76B-IhfDQ+p28R(7s>%WzKV(f# z1kSB*9=%ZV`dvqJB04hK6f@yHyu59+#y+zJHngzm9&+X1cBav1yyC#s(d|djz2_tm z{4`5`P5j|(8Em!f3nk(g<%EVL$^*9Bbe3%M*m1?m3zQOLV&Cj|>viaaLx7IPXg%l3hAU za4dn&{HchvHpD+*38~{^>^g_U1<(?zrJGRkvogpXZ|*o8~%qAP;u*-Fe__V zV(Cn`WGqd(epDKIPYczrnBrLa=;D(M&%uobjjEWGogtovmV=9Op%hJV;+WyWW}Qj% zBRbi1;{AHFR{d_3ti7Tt$2L+;{h4qh;tbvC%0eawYpvh$MMbbieE8vwLy0Bi?%gbe*d8 zrk$$re2>)*8Br-RWeL8fIk|;nb4ri8>qpYmB*y-^efmb@?BZtZ9uI0{Z_oY3wU`(q zxn_6b)V`|R>9VZZ)%>_2J3Gt0l)yJps}r6qS1)%V%d?4;#--09u6gIwWIwyJ2B1!) z{8t%KQ-&v<)R>W%&ijO1mPHT0<+n|V(AtyxhMk)jz|#?gvlV(TIc2cyqr*h7noqNx znt~e0M&9d_E-`A%gupLIZVq;NcGWbl&gWj%a`)NBIZp7NYb8)JU9 z>`bn2hv=B7@*H;6bi$)+_AOe;gitE|zPxq)bFX4t}t`dx>B z+&+8v3xCaX=26YCqwglN_lj{gj=l~G-T4hj4ZxXEp>EQ~pE| zE&L{-Za17SQhEl%ObVTTiO4Wyk<8e=1 zmb>DMBQ~@gs!RE6be`S-?fxoLj%j1t6L&u=m?rwPQ0SR*Tl- z#`R*;i^IECL21629t$P5gyB_mm*rsMDE>M^pH!@a%`6w+_;9DX# zsY_5>gPoiZ!6#@lr`M#pfW?{&;-8~0;K^R{jNua3PK4(BqQ+6T_IbsWz4+%S!eq6o z+h|X3x13@WYovQ;L#sBEPyE=ERpYqmk~^>Dc7w*pLynszan?i(Cgu06Or=3O0-G%5 zTWs!?z5GPFvH}(umi~h7faT-+ve)+ z=P@d!UD*e6Z&Gsg7$)Dz8F1(xRx;PusLIi@JpQ=L0XC!jL3K@s3)E$HlP;{bE)j2~ z)oNw*$Gz;M9m$Snd3|y?^R#NJwYtHN8sxA*C=EvPF5v)^*K)>K z#iN`=907RhouAnMb$4-DVF(w<%uVOm8-v}}^7t}i{V+Cm1tU_yocKjn6Dy(hKm?-pQV^ z8}}vM52uQKOmQFb}UrM+~&b-bqV#hNzf@^hhaww8^`GBQTPC$*6s zF%QibuLyX|w``O@ht?}x*E!yP^K`O+qcVdK;}*NEvk8GHT1XY1vA$!hwF27gBgbH+z|vo)_$EGB$a zokf)-Q8bUf+!Gn;gMPY>R@K>7iQqxe^x~kxOc5t)f{WO*@P?sPtt$egse*b2GAqkT zGq69(wDi&6U&Ui`d{Qw~FM*L~Quz`=4@{kE>Lgzc?GKyI&}_a#J~DsJYd&ehGUe_vq&yr0xmQzLuGOJ-o?Mojw<&JZPS%^`4s zZZ0sKBCyeN_V(Vr))v+oe=)*4pKCLw*#Q-$wgJo6y=bXc6Mk$>agh^A#@Z?+5AwdM z%|6L@s9CRz$^EnVz9&j62c!P{3GqHyU!nX;9otQ5G=!AVRrzowyVJ%?vCD)QD~ri_ zbBpDbO%I7obrijcgESh$aYHwUECwZP`vXK2N8)0L^@yTs|OS%e#7~LdeZhS) + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_fillet_btn_bg.xml b/app/src/main/res/drawable/selector_fillet_btn_bg.xml new file mode 100644 index 000000000..817bb3499 --- /dev/null +++ b/app/src/main/res/drawable/selector_fillet_btn_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_tv_black.xml b/app/src/main/res/drawable/selector_tv_black.xml new file mode 100644 index 000000000..eab98a451 --- /dev/null +++ b/app/src/main/res/drawable/selector_tv_black.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_card_view.xml b/app/src/main/res/drawable/shape_card_view.xml new file mode 100644 index 000000000..20d4d7656 --- /dev/null +++ b/app/src/main/res/drawable/shape_card_view.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_fillet_btn.xml b/app/src/main/res/drawable/shape_fillet_btn.xml new file mode 100644 index 000000000..5a29bf37e --- /dev/null +++ b/app/src/main/res/drawable/shape_fillet_btn.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_fillet_btn_press.xml b/app/src/main/res/drawable/shape_fillet_btn_press.xml new file mode 100644 index 000000000..417341636 --- /dev/null +++ b/app/src/main/res/drawable/shape_fillet_btn_press.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_pop_checkaddshelf_bg.xml b/app/src/main/res/drawable/shape_pop_checkaddshelf_bg.xml new file mode 100644 index 000000000..951803c38 --- /dev/null +++ b/app/src/main/res/drawable/shape_pop_checkaddshelf_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_radius_1dp.xml b/app/src/main/res/drawable/shape_radius_1dp.xml new file mode 100644 index 000000000..ffcc8c82c --- /dev/null +++ b/app/src/main/res/drawable/shape_radius_1dp.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_space_divider.xml b/app/src/main/res/drawable/shape_space_divider.xml new file mode 100644 index 000000000..9a699b89d --- /dev/null +++ b/app/src/main/res/drawable/shape_space_divider.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_text_cursor.xml b/app/src/main/res/drawable/shape_text_cursor.xml new file mode 100644 index 000000000..721c358c6 --- /dev/null +++ b/app/src/main/res/drawable/shape_text_cursor.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 92789a7fb..8e1943029 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,29 +1,24 @@ - - - - - + + + + - - - - + app:headerLayout="@layout/nav_header_main" + app:menu="@menu/activity_main_drawer"/> - - + diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index 4b23ca3d4..33b3b9ddb 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -1,39 +1,32 @@ - - - - + + + - + android:layout_height="0dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@id/title_bar"> - - - - - - + android:layout_height="match_parent"/> - - + - + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 68b3b25a3..9f8946337 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -10,4 +10,29 @@ 14sp 16sp 18sp + + 24dp + + 0.8dp + 10dp + + 18sp + + 4dp + + 44dp + 88dp + 48sp + 16dp + + 40dp + 8dp + 0dp + + 2dp + + 8dp + 8dp + 8dp + 8dp \ No newline at end of file From 9c5f7f9716f59e7819cc9bdb54c74c9161f6c25f Mon Sep 17 00:00:00 2001 From: GKF Date: Thu, 30 May 2019 13:51:00 +0800 Subject: [PATCH 04/13] remove dataBinding --- app/build.gradle | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f1c81febc..e90ef8109 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,9 +9,6 @@ androidExtensions { android { compileSdkVersion 28 - dataBinding { - enabled = true - } defaultConfig { applicationId "io.legado.app" minSdkVersion 21 From 61a32247376e5308728cfc08a4ba540ab1203651 Mon Sep 17 00:00:00 2001 From: GKF Date: Thu, 30 May 2019 13:58:25 +0800 Subject: [PATCH 05/13] up build.gradle --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e90ef8109..64de5fe3b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -85,6 +85,6 @@ dependencies { implementation 'com.squareup.retrofit2:retrofit:2.5.0' testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' } From 5b5c660e02bf36ec249a3afb512bf92fb58461d1 Mon Sep 17 00:00:00 2001 From: GKF Date: Thu, 30 May 2019 14:22:35 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E9=A2=9C=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/base/BaseActivity.kt | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/app/src/main/java/io/legado/app/base/BaseActivity.kt b/app/src/main/java/io/legado/app/base/BaseActivity.kt index 0de007342..a1e6d5cc7 100644 --- a/app/src/main/java/io/legado/app/base/BaseActivity.kt +++ b/app/src/main/java/io/legado/app/base/BaseActivity.kt @@ -1,9 +1,17 @@ package io.legado.app.base +import android.annotation.SuppressLint +import android.graphics.PorterDuff import android.os.Bundle +import android.view.Menu import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.ViewModel +import io.legado.app.R +import io.legado.app.lib.theme.ColorUtil +import io.legado.app.lib.theme.MaterialValueHelper +import io.legado.app.lib.theme.ThemeStore +import java.util.* abstract class BaseActivity : AppCompatActivity() { @@ -21,6 +29,52 @@ abstract class BaseActivity : AppCompatActivity() { } + /** + * 设置MENU图标颜色 + */ + override fun onCreateOptionsMenu(menu: Menu): Boolean { + val primaryTextColor = + MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(ThemeStore.primaryColor(this))) + for (i in 0 until menu.size()) { + val drawable = menu.getItem(i).icon + if (drawable != null) { + drawable.mutate() + drawable.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_ATOP) + } + } + return super.onCreateOptionsMenu(menu) + } + + @SuppressLint("PrivateApi") + override fun onMenuOpened(featureId: Int, menu: Menu?): Boolean { + if (menu != null) { + //展开菜单显示图标 + if (menu.javaClass.simpleName.equals("MenuBuilder", ignoreCase = true)) { + try { + var method = menu.javaClass.getDeclaredMethod("setOptionalIconsVisible", java.lang.Boolean.TYPE) + method.isAccessible = true + method.invoke(menu, true) + method = menu.javaClass.getDeclaredMethod("getNonActionItems") + val menuItems = method.invoke(menu) as ArrayList + if (!menuItems.isEmpty()) { + for (menuItem in menuItems) { + val drawable = menuItem.icon + if (drawable != null) { + drawable.mutate() + drawable.setColorFilter( + resources.getColor(R.color.tv_text_default), + PorterDuff.Mode.SRC_ATOP + ) + } + } + } + } catch (ignored: Exception) { + } + } + } + return super.onMenuOpened(featureId, menu) + } + override fun onOptionsItemSelected(item: MenuItem?): Boolean { item?.let { if (it.itemId == android.R.id.home) { From f87efa47cad838b5ec07cbad647b78eeb2bdd330 Mon Sep 17 00:00:00 2001 From: GKF Date: Thu, 30 May 2019 14:25:41 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E9=A2=9C=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/base/BaseActivity.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/base/BaseActivity.kt b/app/src/main/java/io/legado/app/base/BaseActivity.kt index a1e6d5cc7..368f60519 100644 --- a/app/src/main/java/io/legado/app/base/BaseActivity.kt +++ b/app/src/main/java/io/legado/app/base/BaseActivity.kt @@ -33,8 +33,8 @@ abstract class BaseActivity : AppCompatActivity() { * 设置MENU图标颜色 */ override fun onCreateOptionsMenu(menu: Menu): Boolean { - val primaryTextColor = - MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(ThemeStore.primaryColor(this))) + val primaryTextColor = MaterialValueHelper + .getPrimaryTextColor(this, ColorUtil.isColorLight(ThemeStore.primaryColor(this))) for (i in 0 until menu.size()) { val drawable = menu.getItem(i).icon if (drawable != null) { @@ -56,7 +56,7 @@ abstract class BaseActivity : AppCompatActivity() { method.invoke(menu, true) method = menu.javaClass.getDeclaredMethod("getNonActionItems") val menuItems = method.invoke(menu) as ArrayList - if (!menuItems.isEmpty()) { + if (menuItems.isNotEmpty()) { for (menuItem in menuItems) { val drawable = menuItem.icon if (drawable != null) { From 369663073e3d67568b3871c38db5cb3d60d04d37 Mon Sep 17 00:00:00 2001 From: GKF Date: Thu, 30 May 2019 16:16:11 +0800 Subject: [PATCH 08/13] Theme View --- .../lib/theme/prefs/ATEPreferenceCategory.kt | 36 +++++++ .../lib/theme/prefs/ATESwitchPreference.kt | 52 ++++++++++ .../app/lib/theme/prefs/IconListPreference.kt | 95 +++++++++++++++++++ .../app/lib/theme/view/ATEAccentBgTextView.kt | 33 +++++++ .../lib/theme/view/ATEAccentStrokeTextView.kt | 39 ++++++++ .../lib/theme/view/ATEAutoCompleteTextView.kt | 33 +++++++ .../legado/app/lib/theme/view/ATECheckBox.kt | 29 ++++++ .../legado/app/lib/theme/view/ATEEditText.kt | 29 ++++++ .../app/lib/theme/view/ATEPrimaryTextView.kt | 28 ++++++ .../app/lib/theme/view/ATEProgressBar.kt | 41 ++++++++ .../app/lib/theme/view/ATERadioButton.kt | 29 ++++++ .../app/lib/theme/view/ATERadioNoButton.kt | 37 ++++++++ .../lib/theme/view/ATESecondaryTextView.kt | 28 ++++++ .../legado/app/lib/theme/view/ATESeekBar.kt | 29 ++++++ .../app/lib/theme/view/ATEStockSwitch.kt | 34 +++++++ .../app/lib/theme/view/ATEStrokeTextView.kt | 41 ++++++++ .../io/legado/app/lib/theme/view/ATESwitch.kt | 34 +++++++ .../app/lib/theme/view/ATETextInputLayout.kt | 31 ++++++ .../io/legado/app/utils/FloatExtensions.kt | 16 ++++ .../java/io/legado/app/utils/IntExtensions.kt | 13 +++ .../main/res/layout/item_icon_preference.xml | 31 ++++++ app/src/main/res/layout/view_icon.xml | 5 + app/src/main/res/values/attrs.xml | 56 ++++++++++- 23 files changed, 798 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/io/legado/app/lib/theme/prefs/ATEPreferenceCategory.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/prefs/ATESwitchPreference.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/prefs/IconListPreference.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATEAccentBgTextView.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATEAccentStrokeTextView.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATEAutoCompleteTextView.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATECheckBox.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATEEditText.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATEPrimaryTextView.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATEProgressBar.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATERadioButton.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATERadioNoButton.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATESecondaryTextView.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATESeekBar.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATEStockSwitch.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATEStrokeTextView.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATESwitch.kt create mode 100644 app/src/main/java/io/legado/app/lib/theme/view/ATETextInputLayout.kt create mode 100644 app/src/main/java/io/legado/app/utils/FloatExtensions.kt create mode 100644 app/src/main/java/io/legado/app/utils/IntExtensions.kt create mode 100644 app/src/main/res/layout/item_icon_preference.xml create mode 100644 app/src/main/res/layout/view_icon.xml diff --git a/app/src/main/java/io/legado/app/lib/theme/prefs/ATEPreferenceCategory.kt b/app/src/main/java/io/legado/app/lib/theme/prefs/ATEPreferenceCategory.kt new file mode 100644 index 000000000..2029744ed --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/prefs/ATEPreferenceCategory.kt @@ -0,0 +1,36 @@ +package io.legado.app.lib.theme.prefs + +import android.content.Context +import android.os.Build +import android.preference.PreferenceCategory +import android.util.AttributeSet +import android.view.View +import android.widget.TextView +import androidx.annotation.RequiresApi +import io.legado.app.lib.theme.ThemeStore + + +class ATEPreferenceCategory : PreferenceCategory { + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super( + context, + attrs, + defStyleAttr, + defStyleRes + ) + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) + + constructor(context: Context) : super(context) + + override fun onBindView(view: View) { + super.onBindView(view) + if (view is TextView) { + view.setTextColor(ThemeStore.accentColor(view.getContext()))//设置title文本的颜色 + } + } + +} diff --git a/app/src/main/java/io/legado/app/lib/theme/prefs/ATESwitchPreference.kt b/app/src/main/java/io/legado/app/lib/theme/prefs/ATESwitchPreference.kt new file mode 100644 index 000000000..8d3ca5f56 --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/prefs/ATESwitchPreference.kt @@ -0,0 +1,52 @@ +package io.legado.app.lib.theme.prefs + +import android.content.Context +import android.os.Build +import android.preference.SwitchPreference +import android.util.AttributeSet +import android.view.View +import android.view.ViewGroup +import android.widget.Switch +import androidx.annotation.RequiresApi +import io.legado.app.lib.theme.ATH +import io.legado.app.lib.theme.ThemeStore +import java.util.* + +class ATESwitchPreference : SwitchPreference { + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super( + context, + attrs, + defStyleAttr, + defStyleRes + ) + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) + + constructor(context: Context) : super(context) + + override fun onBindView(view: View) { + super.onBindView(view) + + if (view is ViewGroup) { + val queue = LinkedList() + queue.add(view) + while (!queue.isEmpty()) { + val current = queue.removeFirst() + for (i in 0 until current.childCount) { + if (current.getChildAt(i) is Switch) { + ATH.setTint(current.getChildAt(i), ThemeStore.accentColor(view.getContext())) + return + } else if (current.getChildAt(i) is ViewGroup) { + queue.addLast(current.getChildAt(i) as ViewGroup) + } + } + } + } + + } + +} diff --git a/app/src/main/java/io/legado/app/lib/theme/prefs/IconListPreference.kt b/app/src/main/java/io/legado/app/lib/theme/prefs/IconListPreference.kt new file mode 100644 index 000000000..f1389a989 --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/prefs/IconListPreference.kt @@ -0,0 +1,95 @@ +package io.legado.app.lib.theme.prefs + +import android.annotation.SuppressLint +import android.app.Activity +import android.app.AlertDialog.Builder +import android.content.Context +import android.graphics.drawable.Drawable +import android.preference.ListPreference +import android.util.AttributeSet +import android.view.View +import android.view.ViewGroup +import android.widget.ArrayAdapter +import android.widget.CheckedTextView +import android.widget.ImageView +import android.widget.ListAdapter +import io.legado.app.R +import java.util.* + + +class IconListPreference(context: Context, attrs: AttributeSet) : ListPreference(context, attrs) { + + private val mEntryDrawables = ArrayList() + + init { + + val a = context.theme.obtainStyledAttributes(attrs, R.styleable.IconListPreference, 0, 0) + + val drawables: Array + + try { + drawables = a.getTextArray(R.styleable.IconListPreference_icons) + } finally { + a.recycle() + } + + for (drawable in drawables) { + val resId = context.resources.getIdentifier(drawable.toString(), "mipmap", context.packageName) + + val d = context.resources.getDrawable(resId) + + mEntryDrawables.add(d) + } + + widgetLayoutResource = R.layout.view_icon + } + + protected fun createListAdapter(): ListAdapter { + val selectedValue = value + val selectedIndex = findIndexOfValue(selectedValue) + return AppArrayAdapter(context, R.layout.item_icon_preference, entries, mEntryDrawables, selectedIndex) + } + + override fun onBindView(view: View) { + super.onBindView(view) + + val selectedValue = value + val selectedIndex = findIndexOfValue(selectedValue) + + val drawable = mEntryDrawables[selectedIndex] + + (view.findViewById(R.id.preview) as ImageView).setImageDrawable(drawable) + } + + override fun onPrepareDialogBuilder(builder: Builder) { + builder.setAdapter(createListAdapter(), this) + super.onPrepareDialogBuilder(builder) + } + + inner class AppArrayAdapter( + context: Context, textViewResourceId: Int, + objects: Array, imageDrawables: List, + selectedIndex: Int + ) : ArrayAdapter(context, textViewResourceId, objects) { + private var mImageDrawables: List? = null + private var mSelectedIndex = 0 + + init { + mSelectedIndex = selectedIndex + mImageDrawables = imageDrawables + } + + @SuppressLint("ViewHolder") + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val inflater = (context as Activity).layoutInflater + val view = inflater.inflate(R.layout.item_icon_preference, parent, false) + val textView = view.findViewById(R.id.label) as CheckedTextView + textView.text = getItem(position) + textView.isChecked = position == mSelectedIndex + + val imageView = view.findViewById(R.id.icon) as ImageView + imageView.setImageDrawable(mImageDrawables!![position]) + return view + } + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATEAccentBgTextView.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATEAccentBgTextView.kt new file mode 100644 index 000000000..ae66905dd --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATEAccentBgTextView.kt @@ -0,0 +1,33 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.graphics.Color +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatTextView +import io.legado.app.lib.theme.ColorUtil +import io.legado.app.lib.theme.Selector +import io.legado.app.lib.theme.ThemeStore +import io.legado.app.utils.dp + +class ATEAccentBgTextView : AppCompatTextView { + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + background = Selector.shapeBuild() + .setCornerRadius(3.dp) + .setDefaultBgColor(ThemeStore.accentColor(context)) + .setPressedBgColor(ColorUtil.darkenColor(ThemeStore.accentColor(context))) + .create() + setTextColor(Color.WHITE) + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATEAccentStrokeTextView.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATEAccentStrokeTextView.kt new file mode 100644 index 000000000..def0146f3 --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATEAccentStrokeTextView.kt @@ -0,0 +1,39 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatTextView +import io.legado.app.R +import io.legado.app.lib.theme.Selector +import io.legado.app.lib.theme.ThemeStore +import io.legado.app.utils.dp + +class ATEAccentStrokeTextView : AppCompatTextView { + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + background = Selector.shapeBuild() + .setCornerRadius(3.dp) + .setStrokeWidth(1.dp) + .setDisabledStrokeColor(context.resources.getColor(R.color.md_grey_500)) + .setDefaultStrokeColor(ThemeStore.accentColor(context)) + .setPressedBgColor(context.resources.getColor(R.color.transparent30)) + .create() + setTextColor( + Selector.colorBuild() + .setDefaultColor(ThemeStore.accentColor(context)) + .setDisabledColor(context.resources.getColor(R.color.md_grey_500)) + .create() + ) + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATEAutoCompleteTextView.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATEAutoCompleteTextView.kt new file mode 100644 index 000000000..4a4688fbb --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATEAutoCompleteTextView.kt @@ -0,0 +1,33 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.os.Build +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatAutoCompleteTextView +import io.legado.app.lib.theme.Selector +import io.legado.app.lib.theme.ThemeStore + + +class ATEAutoCompleteTextView : AppCompatAutoCompleteTextView { + + constructor(context: Context) : super(context) { + init(context) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context) + } + + private fun init(context: Context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + backgroundTintList = Selector.colorBuild() + .setFocusedColor(ThemeStore.accentColor(context)) + .setDefaultColor(ThemeStore.textColorPrimary(context)) + .create() + } + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATECheckBox.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATECheckBox.kt new file mode 100644 index 000000000..15e3b5f14 --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATECheckBox.kt @@ -0,0 +1,29 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatCheckBox +import io.legado.app.lib.theme.ATH +import io.legado.app.lib.theme.ThemeStore + +/** + * @author Aidan Follestad (afollestad) + */ +class ATECheckBox : AppCompatCheckBox { + + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + ATH.setTint(this, ThemeStore.accentColor(context)) + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATEEditText.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATEEditText.kt new file mode 100644 index 000000000..c70ea4eda --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATEEditText.kt @@ -0,0 +1,29 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatEditText +import io.legado.app.lib.theme.ATH +import io.legado.app.lib.theme.ThemeStore + +/** + * @author Aidan Follestad (afollestad) + */ +class ATEEditText : AppCompatEditText { + + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + ATH.setTint(this, ThemeStore.accentColor(context)) + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATEPrimaryTextView.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATEPrimaryTextView.kt new file mode 100644 index 000000000..b39385688 --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATEPrimaryTextView.kt @@ -0,0 +1,28 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatTextView +import io.legado.app.lib.theme.ThemeStore + +/** + * @author Aidan Follestad (afollestad) + */ +class ATEPrimaryTextView : AppCompatTextView { + + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + setTextColor(ThemeStore.textColorPrimary(context)) + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATEProgressBar.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATEProgressBar.kt new file mode 100644 index 000000000..3a1809f16 --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATEProgressBar.kt @@ -0,0 +1,41 @@ +package io.legado.app.lib.theme.view + +import android.annotation.TargetApi +import android.content.Context +import android.os.Build +import android.util.AttributeSet +import android.widget.ProgressBar +import io.legado.app.lib.theme.ATH +import io.legado.app.lib.theme.ThemeStore + +/** + * @author Aidan Follestad (afollestad) + */ +class ATEProgressBar : ProgressBar { + + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super( + context, + attrs, + defStyleAttr, + defStyleRes + ) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + ATH.setTint(this, ThemeStore.accentColor(context)) + } +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATERadioButton.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATERadioButton.kt new file mode 100644 index 000000000..583d5e054 --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATERadioButton.kt @@ -0,0 +1,29 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatRadioButton +import io.legado.app.lib.theme.ATH +import io.legado.app.lib.theme.ThemeStore + +/** + * @author Aidan Follestad (afollestad) + */ +class ATERadioButton : AppCompatRadioButton { + + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + ATH.setTint(this, ThemeStore.accentColor(context)) + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATERadioNoButton.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATERadioNoButton.kt new file mode 100644 index 000000000..138f05992 --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATERadioNoButton.kt @@ -0,0 +1,37 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.graphics.Color +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatRadioButton +import io.legado.app.lib.theme.Selector +import io.legado.app.lib.theme.ThemeStore +import io.legado.app.utils.dp + +/** + * @author Aidan Follestad (afollestad) + */ +class ATERadioNoButton : AppCompatRadioButton { + + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + background = Selector.shapeBuild() + .setCornerRadius(3.dp) + .setStrokeWidth(3.dp) + .setCheckedBgColor(ThemeStore.accentColor(context)) + .setCheckedStrokeColor(ThemeStore.accentColor(context)) + .setDefaultStrokeColor(Color.WHITE) + .create() + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATESecondaryTextView.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATESecondaryTextView.kt new file mode 100644 index 000000000..dec5d938e --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATESecondaryTextView.kt @@ -0,0 +1,28 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatTextView +import io.legado.app.lib.theme.ThemeStore + +/** + * @author Aidan Follestad (afollestad) + */ +class ATESecondaryTextView : AppCompatTextView { + + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + setTextColor(ThemeStore.textColorSecondary(context)) + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATESeekBar.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATESeekBar.kt new file mode 100644 index 000000000..4a49b34f3 --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATESeekBar.kt @@ -0,0 +1,29 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatSeekBar +import io.legado.app.lib.theme.ATH +import io.legado.app.lib.theme.ThemeStore + +/** + * @author Aidan Follestad (afollestad) + */ +class ATESeekBar : AppCompatSeekBar { + + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + ATH.setTint(this, ThemeStore.accentColor(context)) + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATEStockSwitch.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATEStockSwitch.kt new file mode 100644 index 000000000..a22f3ee47 --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATEStockSwitch.kt @@ -0,0 +1,34 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import android.widget.Switch +import io.legado.app.lib.theme.ATH +import io.legado.app.lib.theme.ThemeStore + +/** + * @author Aidan Follestad (afollestad) + */ +class ATEStockSwitch : Switch { + + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + ATH.setTint(this, ThemeStore.accentColor(context)) + } + + override fun isShown(): Boolean { + return parent != null && visibility == View.VISIBLE + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATEStrokeTextView.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATEStrokeTextView.kt new file mode 100644 index 000000000..ee6697224 --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATEStrokeTextView.kt @@ -0,0 +1,41 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatTextView +import io.legado.app.R +import io.legado.app.lib.theme.Selector +import io.legado.app.lib.theme.ThemeStore +import io.legado.app.utils.dp + +class ATEStrokeTextView : AppCompatTextView { + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + background = Selector.shapeBuild() + .setCornerRadius(1.dp) + .setStrokeWidth(1.dp) + .setDisabledStrokeColor(context.resources.getColor(R.color.md_grey_500)) + .setDefaultStrokeColor(ThemeStore.textColorSecondary(context)) + .setSelectedStrokeColor(ThemeStore.accentColor(context)) + .setPressedBgColor(context.resources.getColor(R.color.transparent30)) + .create() + setTextColor( + Selector.colorBuild() + .setDefaultColor(ThemeStore.textColorSecondary(context)) + .setSelectedColor(ThemeStore.accentColor(context)) + .setDisabledColor(context.resources.getColor(R.color.md_grey_500)) + .create() + ) + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATESwitch.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATESwitch.kt new file mode 100644 index 000000000..6a718559e --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATESwitch.kt @@ -0,0 +1,34 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import android.widget.Switch +import io.legado.app.lib.theme.ATH +import io.legado.app.lib.theme.ThemeStore + +/** + * @author Aidan Follestad (afollestad) + */ +class ATESwitch : Switch { + + constructor(context: Context) : super(context) { + init(context, null) + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init(context, attrs) + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context, attrs) + } + + private fun init(context: Context, attrs: AttributeSet?) { + ATH.setTint(this, ThemeStore.accentColor(context)) + } + + override fun isShown(): Boolean { + return parent != null && visibility == View.VISIBLE + } +} diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ATETextInputLayout.kt b/app/src/main/java/io/legado/app/lib/theme/view/ATETextInputLayout.kt new file mode 100644 index 000000000..e09b03e2c --- /dev/null +++ b/app/src/main/java/io/legado/app/lib/theme/view/ATETextInputLayout.kt @@ -0,0 +1,31 @@ +package io.legado.app.lib.theme.view + +import android.content.Context +import android.graphics.Canvas +import android.util.AttributeSet +import com.google.android.material.textfield.TextInputLayout +import io.legado.app.lib.theme.Selector +import io.legado.app.lib.theme.ThemeStore + +class ATETextInputLayout : TextInputLayout { + constructor(context: Context) : super(context) { + init(context) + } + + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { + init(context) + } + + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(context) + } + + private fun init(context: Context) { + defaultHintTextColor = Selector.colorBuild().setDefaultColor(ThemeStore.accentColor(context)).create() + } + + override fun draw(canvas: Canvas) { + + super.draw(canvas) + } +} diff --git a/app/src/main/java/io/legado/app/utils/FloatExtensions.kt b/app/src/main/java/io/legado/app/utils/FloatExtensions.kt new file mode 100644 index 000000000..af9576c00 --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/FloatExtensions.kt @@ -0,0 +1,16 @@ +package io.legado.app.utils + +import android.content.res.Resources + + +val Float.dp: Float // [xxhdpi](360 -> 1080) + get() = android.util.TypedValue.applyDimension( + android.util.TypedValue.COMPLEX_UNIT_DIP, this, Resources.getSystem().displayMetrics + ) + + +val Float.sp: Float // [xxhdpi](360 -> 1080) + get() = android.util.TypedValue.applyDimension( + android.util.TypedValue.COMPLEX_UNIT_SP, this, Resources.getSystem().displayMetrics + ) + diff --git a/app/src/main/java/io/legado/app/utils/IntExtensions.kt b/app/src/main/java/io/legado/app/utils/IntExtensions.kt new file mode 100644 index 000000000..11946c14a --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/IntExtensions.kt @@ -0,0 +1,13 @@ +package io.legado.app.utils + +import android.content.res.Resources + +val Int.dp: Int + get() = android.util.TypedValue.applyDimension( + android.util.TypedValue.COMPLEX_UNIT_DIP, this.toFloat(), Resources.getSystem().displayMetrics + ).toInt() + +val Int.sp: Int + get() = android.util.TypedValue.applyDimension( + android.util.TypedValue.COMPLEX_UNIT_SP, this.toFloat(), Resources.getSystem().displayMetrics + ).toInt() \ No newline at end of file diff --git a/app/src/main/res/layout/item_icon_preference.xml b/app/src/main/res/layout/item_icon_preference.xml new file mode 100644 index 000000000..a2063a71f --- /dev/null +++ b/app/src/main/res/layout/item_icon_preference.xml @@ -0,0 +1,31 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_icon.xml b/app/src/main/res/layout/view_icon.xml new file mode 100644 index 000000000..d0247c6ef --- /dev/null +++ b/app/src/main/res/layout/view_icon.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index fc861ecca..7bbabf7f6 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -44,5 +44,59 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 97f549dc931e229afcf6a3be2ee3834ed68b6efb Mon Sep 17 00:00:00 2001 From: GKF Date: Thu, 30 May 2019 16:34:38 +0800 Subject: [PATCH 09/13] Theme --- app/src/main/AndroidManifest.xml | 4 +- app/src/main/res/values-v21/styles.xml | 2 +- app/src/main/res/values/styles.xml | 83 ++++++++++++++++++++++++-- 3 files changed, 80 insertions(+), 9 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3bef8cc80..9d4cfaca1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,7 +23,7 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" + android:theme="@style/CAppTheme" tools:ignore="AllowBackup,GoogleAppIndexingWarning"> @@ -32,7 +32,7 @@ + android:theme="@style/CAppTheme.NoActionBar"> diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml index e54680451..16b48ec19 100644 --- a/app/src/main/res/values-v21/styles.xml +++ b/app/src/main/res/values-v21/styles.xml @@ -1,5 +1,5 @@ - + + + + + + + + + + - + + + + + + + + + + - + + + + + + + + +