Skip to content

Latest commit

 

History

History
264 lines (215 loc) · 10.4 KB

File metadata and controls

264 lines (215 loc) · 10.4 KB

项目描述

DONT READ CLIPBOARD(老名字) 新名字: 英文名:Read Shit 中文名: 剪切板防御器

提供一个快捷方式, 可以将其放在桌面底部Docker:

  • 点击后一键复制你的预设内容到剪切板

这样:

任务

  1. 快捷方式点击后, 还是打开了app, 但是应该不打开app, 直接复制内容即可
  2. 复制了之后的toast复制的内容时, 应该最多toast一定内容, 剩余的忽略掉
  3. 配置items不需要名称了,仅保留内容即可
  4. 现在的拖动框似乎是没有一点作用? 如果实现拖动比较麻烦, 改为 上下按钮的交互方式
  5. 增加按钮应该有文字说明, 表示是增加项
  6. 点击快捷方式的toast应该以最快速度消失
  7. 点击快捷方式时选择哪个item的规则应该是在界面中配置, 而不应该是创建快捷方式时制定
  8. 增加按钮和列表应该是单独的一个区块, 和创建快捷方式区分开
  9. 调整界面 "创建桌面快捷方式"在最上面作为一个单独的区域, "快捷方式设置"作为一个单独的区域,并将选择改为类似radiobutton方式
  10. "添加新内容"和"编辑"的dialog中, input框大小需要根据内容自适应, 最大不超过屏幕的80%, 同时采用手段(比如减少margin padding之类的, 减少字体大小), 让input框内尽可能显示多的内容
  11. 创建桌面快捷方式,不再弹框,而是直接创建
  12. 顶部栏增加一个 斜"i"的按钮, 点击显示该软件是干什么的以及怎么用(项目描述的方便理解优化版)
  13. 当前似乎多语言没有生效, 需要英文. 共有:中文,英文 默认是 英文. 根据系统语言决定
  14. 应用改名为新名字
  15. 设置里末尾增加一行 github icon+仓库连接地址

特别注意

  • 由真机运行测试, AGENT(你)只负责修改代码,并确保代码无报错
  • 作者不懂kotlin和安卓, 所以极致坚持单一职责原则, 并且为代码附带合理的函数注释和步骤注释

当前阶段

当前是概念验证阶段, 生成方便查看的单一示例, 代码包含详细合理的注释, 提供一些适用于开发者的交互 当前是开发阶段

DontReadClipboard 项目概要

项目描述

用于老版本安卓(没有剪切板权限)或屏蔽了剪切板权限的安卓系统的剪切板助手应用。通过桌面快捷方式快速复制预设内容到剪切板。

目录结构

DontReadClipboard/
├── app/
│   ├── keystore/
│   │   └── my-release-key.keystore       # 应用签名密钥
│   ├── src/
│   │   ├── androidTest/
│   │   │   └── java/com/slowgroovin/dontreadclipboard/
│   │   │       └── ExampleInstrumentedTest.kt  # 仪器化测试
│   │   ├── main/
│   │   │   ├── java/com/example/dontreadclipboard/
│   │   │   │   ├── MainActivity.kt       # 主界面Activity
│   │   │   │   ├── Shortcut
│   │   │   │   │   └── Activity.kt       # 快捷方式处理Activity
│   │   │   │   ├── managers/
│   │   │   │   │   └── ShortcutManager.kt # 快捷方式管理器
│   │   │   │   ├── model/
│   │   │   │   │   ├── ClipboardItem.kt  # 剪切板项数据模型
│   │   │   │   │   └── ShortcutConfig.kt  # 快捷方式配置模型
│   │   │   │   ├── ui/
│   │   │   │   │   ├── components/
│   │   │   │   │   │   └── ClipboardItemCard.kt  # 剪切板项卡片组件
│   │   │   │   │   ├── screens/
│   │   │   │   │   │   ├── MainScreen.kt         # 主界面
│   │   │   │   │   │   ├── SettingsScreen.kt      # 设置界面
│   │   │   │   │   │   └── ClipboardItemDialog.kt # 对话框组件
│   │   │   │   │   └── theme/
│   │   │   │   │       ├── Color.kt              # 颜色主题
│   │   │   │   │       ├── Theme.kt              # 应用主题
│   │   │   │   │       └── Type.kt               # 字体样式
│   │   │   │   └── utils/
│   │   │   │       └── DataProvider.kt   # 数据持久化提供者
│   │   │   ├── res/
│   │   │   │   ├── drawable/            # 图标资源
│   │   │   │   ├── mipmap-anydpi-v26/    # 应用图标
│   │   │   │   ├── values/               # 字符串、颜色等资源
│   │   │   │   ├── values-en/            # 英文字符串资源
│   │   │   │   └── xml/                  # 备份规则等配置
│   │   │   └── AndroidManifest.xml       # 应用清单文件
│   │   └── test/
│   │       └── java/com/slowgroovin/dontreadclipboard/
│   │           └── ExampleUnitTest.kt     # 单元测试
│   ├── build.gradle.kts                   # 应用级构建配置
│   ├── keystore.properties                 # 签名配置
│   └── proguard-rules.pro                 # ProGuard混淆规则
├── gradle/
│   ├── wrapper/
│   │   ├── gradle-wrapper.jar             # Gradle Wrapper JAR
│   │   └── gradle-wrapper.properties      # Gradle版本配置
│   └── libs.versions.toml                  # 依赖版本管理
├── AGENTS.md                               # AI开发助手文档
├── build.gradle.kts                       # 项目级构建配置
├── gradle.properties                      # Gradle属性配置
├── gradlew                                 # Gradle Wrapper脚本(Unix)
├── gradlew.bat                             # Gradle Wrapper脚本(Windows)
├── local.properties                        # 本地配置(不提交)
└── settings.gradle.kts                    # 项目设置

核心文件说明

应用入口与配置

app/src/main/AndroidManifest.xml

  • 应用清单文件
  • 声明应用权限(创建快捷方式)
  • 注册MainActivity和ShortcutActivity
  • 配置应用主题和图标

app/build.gradle.kts

  • 应用级Gradle构建配置
  • 定义SDK版本(minSdk 25, targetSdk 36)
  • 配置应用签名
  • 声明依赖库(Jetpack Compose, Navigation等)

核心Activity

MainActivity.kt

  • 主界面Activity
  • 使用Jetpack Navigation管理页面路由
  • 包含主界面和设置界面两个导航目标
  • 提供全局的copyToClipboard()函数

ShortcutActivity.kt

  • 处理桌面快捷方式点击的Activity
  • 配置为透明、无历史记录、单实例模式
  • 根据复制规则(首位/随机/依次)选择内容
  • 复制内容到剪切板并显示Toast提示
  • 完成后立即finish,不显示UI

业务逻辑层

managers/ShortcutManager.kt

  • 快捷方式管理器
  • 使用ShortcutManagerCompat创建兼容所有Android版本的快捷方式
  • 创建指向ShortcutActivity的Intent
  • 请求用户将快捷方式固定到桌面

utils/DataProvider.kt

  • 数据持久化提供者
  • 使用SharedPreferences存储数据
  • 管理剪切板项列表(增删改查)
  • 管理复制规则配置
  • 管理Sequential规则的上次使用索引
  • 提供默认示例数据

数据模型

model/ClipboardItem.kt

  • 剪切板项数据模型
  • 字段:id, content, order, isFavorite
  • CopyRule枚举:FIRST, RANDOM, SEQUENTIAL

model/ShortcutConfig.kt

  • 快捷方式配置模型
  • 字段:id, name, copyRule

UI层 - Screens

ui/screens/MainScreen.kt

  • 主界面
  • 顶部:创建桌面快捷方式按钮
  • 中部:预设内容管理区域(Card)
    • 标题和添加按钮
    • 剪切板项列表(支持上下移动排序)
  • 对话框:添加/编辑/删除确认
  • 使用Jetpack Compose构建

ui/screens/SettingsScreen.kt

  • 设置界面
  • 快捷方式设置区域(Card)
  • 使用RadioButton选择复制规则
    • 首位优先:总是复制排序第一的内容
    • 随机选择:随机复制一个内容
    • 依次循环:按顺序依次复制,循环往复

ui/screens/ClipboardItemDialog.kt

  • 对话框组件集合
  • ClipboardItemDialog:添加/编辑剪切板项
    • 自适应高度输入框(最大屏幕80%)
    • 减小字体和间距以显示更多内容
  • DeleteConfirmDialog:删除确认对话框
  • CreateShortcutDialog:创建快捷方式配置对话框(已废弃)

UI层 - Components

ui/components/ClipboardItemCard.kt

  • 剪切板项卡片组件
  • 显示内容预览(超过50字符截断)
  • 按钮组:编辑、删除、上移、下移
  • 上下移按钮根据位置自动禁用

UI层 - Theme

ui/theme/Color.kt

  • Material3颜色主题定义

ui/theme/Theme.kt

  • 应用主题配置
  • DontReadClipboardTheme组件

ui/theme/Type.kt

  • 字体样式和排版配置

资源文件

res/values/strings.xml

  • 中文字符串资源

res/values-en/strings.xml

  • 英文字符串资源(多语言支持)

res/values/colors.xml

  • 颜色资源

res/values/themes.xml

  • 主题资源

res/xml/backup_rules.xml

  • 备份规则配置

res/xml/data_extraction_rules.xml

  • 数据提取规则配置

技术栈

  • 语言: Kotlin
  • UI框架: Jetpack Compose (Material3)
  • 导航: Jetpack Navigation Compose
  • 数据持久化: SharedPreferences
  • 最低SDK: Android 7.1 (API 25)
  • 目标SDK: Android 14 (API 36)

核心功能流程

创建快捷方式流程

  1. 用户在主界面点击"创建桌面快捷方式"按钮
  2. MainScreen调用ShortcutManager.createShortcut()
  3. ShortcutManager创建ShortcutInfoCompat并请求固定快捷方式
  4. 用户确认将快捷方式添加到桌面

快捷方式点击流程

  1. 用户点击桌面快捷方式
  2. 系统启动ShortcutActivity(透明、无UI)
  3. ShortcutActivity从DataProvider获取复制规则和剪切板项列表
  4. 根据复制规则选择内容:
    • FIRST:选择order最小的项
    • RANDOM:随机选择一项
    • SEQUENTIAL:依次循环选择
  5. 复制内容到剪切板
  6. 显示Toast提示(1秒后自动消失)
  7. Activity立即finish

数据管理流程

  • 所有数据通过DataProvider统一管理
  • 使用SharedPreferences持久化到本地
  • 修改数据后立即保存并更新UI状态