= ({
+ type = 'text',
+ placeholder,
+ value,
+ onChange,
+ disabled,
+ error,
+ icon,
+ size = 'md',
+ className,
+}) => {
+ return (
+
+ onChange?.(e.target.value)}
+ placeholder={placeholder}
+ disabled={disabled}
+ className={clsx(
+ 'w-full px-3 py-2 bg-gray-50 border border-gray-300 rounded-md',
+ 'focus:outline-none focus:border-brand-primary focus:ring-2 focus:ring-brand-light',
+ 'placeholder-gray-400 text-gray-800',
+ 'transition-all duration-200',
+ error && 'border-error focus:border-error',
+ disabled && 'opacity-50 cursor-not-allowed',
+ icon && 'pl-9',
+ className,
+ )}
+ />
+ {icon && {icon}}
+ {error && (
+ {error}
+ )}
+
+ );
+};
+```
+
+---
+
+### 2.3 Card 组件
+
+#### 属性定义
+```tsx
+interface CardProps {
+ children: React.ReactNode;
+ variant?: 'default' | 'elevated' | 'outlined';
+ padding?: 'none' | 'sm' | 'md' | 'lg';
+ className?: string;
+ onClick?: () => void;
+}
+```
+
+#### 样式规范
+- **背景**:白色 `#FFFFFF`
+- **边框**:`1px solid #E5E7EB`(outlined 变体)
+- **圆角**:12px
+- **阴影**:
+ - default: `0 1px 3px rgba(0, 0, 0, 0.1)`
+ - elevated: `0 4px 12px rgba(0, 0, 0, 0.15)`
+ - outlined: 无
+- **过渡**:hover 时阴影升高
+
+---
+
+### 2.4 Badge 组件
+
+#### 属性定义
+```tsx
+interface BadgeProps {
+ children: React.ReactNode;
+ variant?: 'primary' | 'success' | 'warning' | 'error' | 'info';
+ size?: 'sm' | 'md';
+ icon?: React.ReactNode;
+}
+```
+
+#### 样式规范
+```
+variant: primary
+ 背景: rgba(217, 27, 92, 0.1)
+ 文字: #D91B5C
+
+variant: success
+ 背景: rgba(16, 185, 129, 0.1)
+ 文字: #10B981
+```
+
+---
+
+### 2.5 Tag 组件
+
+#### 属性定义
+```tsx
+interface TagProps {
+ label: string;
+ color?: string;
+ onRemove?: () => void;
+ interactive?: boolean;
+}
+```
+
+#### 样式规范
+- **背景**:`rgba(217, 27, 92, 0.1)`(默认)
+- **文字**:`#D91B5C`
+- **内边距**:4px 8px
+- **圆角**:12px
+- **字体**:11px 粗体
+- **可删除**:右侧显示 `×` 按钮
+
+---
+
+### 2.6 Modal 组件
+
+#### 属性定义
+```tsx
+interface ModalProps {
+ isOpen: boolean;
+ title?: string;
+ children: React.ReactNode;
+ onClose: () => void;
+ size?: 'sm' | 'md' | 'lg';
+ showCloseButton?: boolean;
+}
+```
+
+#### 样式规范
+- **背景 Overlay**:`rgba(0, 0, 0, 0.5)`
+- **对话框**:白色卡片,圆角 12px,阴影 xl
+- **尺寸**:
+ - sm: 400px
+ - md: 600px
+ - lg: 800px
+- **动画**:`scale(0.9, 0) → scale(1, 1)`,200ms ease-out
+
+---
+
+### 2.7 Spinner 组件
+
+#### 属性定义
+```tsx
+interface SpinnerProps {
+ size?: 'sm' | 'md' | 'lg';
+ color?: string;
+}
+```
+
+#### 样式规范
+- **尺寸**:16px (sm), 24px (md), 32px (lg)
+- **颜色**:`#D91B5C`(默认)
+- **动画**:旋转 360°,2s 无限循环
+
+---
+
+## 3. 容器组件(Layout Components)
+
+### 3.1 Layout 组件(主框架)
+
+```tsx
+interface LayoutProps {
+ children: React.ReactNode;
+ showSidebar?: boolean;
+}
+
+export const Layout: React.FC = ({ children, showSidebar = true }) => {
+ return (
+
+ {showSidebar && }
+
+ {children}
+
+
+ );
+};
+```
+
+### 3.2 Sidebar 组件
+
+```tsx
+interface SidebarProps {
+ activeTab?: string;
+ onTabChange?: (tab: string) => void;
+}
+
+export const Sidebar: React.FC = ({ activeTab, onTabChange }) => {
+ // 导航项列表
+ const navItems = [
+ { id: 'overview', label: '总览', icon: '◆' },
+ { id: 'targets', label: '攻略对象', icon: '◆' },
+ { id: 'editor', label: '对话编辑器', icon: '◆' },
+ { id: 'llm', label: 'LLM 配置', icon: '◆' },
+ { id: 'settings', label: '设置', icon: '◆' },
+ ];
+
+ return (
+
+ );
+};
+```
+
+### 3.3 Header 组件
+
+```tsx
+interface HeaderProps {
+ title: string;
+ subtitle?: string;
+ actions?: React.ReactNode;
+}
+
+export const Header: React.FC = ({ title, subtitle, actions }) => {
+ return (
+
+
+
+
{title}
+ {subtitle &&
{subtitle}
}
+
+ {actions &&
{actions}
}
+
+
+ );
+};
+```
+
+---
+
+## 4. 业务组件(Feature Components)
+
+### 4.1 MessageBubble 组件
+
+```tsx
+interface MessageBubbleProps {
+ content: string;
+ role: 'user' | 'partner';
+ timestamp?: Date;
+ isKeyPoint?: boolean;
+ sentimentImpact?: number;
+ onEdit?: () => void;
+}
+
+export const MessageBubble: React.FC = ({
+ content,
+ role,
+ timestamp,
+ isKeyPoint,
+ sentimentImpact,
+ onEdit,
+}) => {
+ const isUser = role === 'user';
+
+ return (
+
+
+
{content}
+ {timestamp && (
+
+ {timestamp.toLocaleTimeString()}
+
+ )}
+
+
+ {isKeyPoint &&
⭐}
+ {sentimentImpact && (
+
0 ? 'text-success' : 'text-error')}>
+ {sentimentImpact > 0 ? '+' : ''}{sentimentImpact}
+
+ )}
+
+ );
+};
+```
+
+### 4.2 SuggestionCard 组件
+
+```tsx
+interface SuggestionCardProps {
+ suggestion: string;
+ tags: string[];
+ expectedImpact?: number;
+ onSelect?: () => void;
+ onDismiss?: () => void;
+}
+
+export const SuggestionCard: React.FC = ({
+ suggestion,
+ tags,
+ expectedImpact,
+ onSelect,
+ onDismiss,
+}) => {
+ return (
+
+ {suggestion}
+
+
+ {tags.map(tag => (
+ {tag}
+ ))}
+
+ {expectedImpact && (
+
❤️ +{expectedImpact}
+ )}
+
+
+
+
+
+
+ );
+};
+```
+
+### 4.3 StatCard 组件
+
+```tsx
+interface StatCardProps {
+ label: string;
+ value: number | string;
+ icon?: React.ReactNode;
+ trend?: 'up' | 'down';
+}
+
+export const StatCard: React.FC = ({
+ label,
+ value,
+ icon,
+ trend,
+}) => {
+ return (
+
+
+ {trend && (
+
+ {trend === 'up' ? '↑' : '↓'} 较上周
+
+ )}
+
+ );
+};
+```
+
+### 4.4 ConversationCard 组件
+
+```tsx
+interface ConversationCardProps {
+ title: string;
+ description: string;
+ partners: string[];
+ lastEdited: Date;
+ onClick?: () => void;
+}
+
+export const ConversationCard: React.FC = ({
+ title,
+ description,
+ partners,
+ lastEdited,
+ onClick,
+}) => {
+ return (
+
+ {title}
+ {description}
+
+
+
+ {partners.map(partner => (
+
+ ))}
+
+
+ {formatRelativeTime(lastEdited)}
+
+
+
+ );
+};
+```
+
+---
+
+## 5. 组件状态管理模式
+
+### 5.1 使用 Zustand
+```tsx
+import create from 'zustand';
+
+interface UIStore {
+ sidebarOpen: boolean;
+ toggleSidebar: () => void;
+
+ selectedConversation: string | null;
+ setSelectedConversation: (id: string | null) => void;
+
+ showModal: boolean;
+ setShowModal: (show: boolean) => void;
+}
+
+export const useUIStore = create((set) => ({
+ sidebarOpen: true,
+ toggleSidebar: () => set(state => ({ sidebarOpen: !state.sidebarOpen })),
+
+ selectedConversation: null,
+ setSelectedConversation: (id) => set({ selectedConversation: id }),
+
+ showModal: false,
+ setShowModal: (show) => set({ showModal: show }),
+}));
+```
+
+---
+
+## 6. 动画和过渡库
+
+### 6.1 使用 Framer Motion
+```tsx
+import { motion, AnimatePresence } from 'framer-motion';
+
+/* 淡入淡出动画 */
+export const fadeInOut = {
+ initial: { opacity: 0 },
+ animate: { opacity: 1 },
+ exit: { opacity: 0 },
+ transition: { duration: 0.2 },
+};
+
+/* 从下滑入 */
+export const slideUp = {
+ initial: { y: 20, opacity: 0 },
+ animate: { y: 0, opacity: 1 },
+ exit: { y: 20, opacity: 0 },
+ transition: { duration: 0.3, ease: 'easeOut' },
+};
+
+/* 从右滑入 */
+export const slideInRight = {
+ initial: { x: 300, opacity: 0 },
+ animate: { x: 0, opacity: 1 },
+ exit: { x: 300, opacity: 0 },
+ transition: { duration: 0.3, ease: 'easeOut' },
+};
+
+/* 缩放 + 淡入 */
+export const scaleIn = {
+ initial: { scale: 0.9, opacity: 0 },
+ animate: { scale: 1, opacity: 1 },
+ exit: { scale: 0.9, opacity: 0 },
+ transition: { duration: 0.2, ease: 'easeOut' },
+};
+
+/* Stagger 容器 */
+export const container = {
+ hidden: { opacity: 0 },
+ show: {
+ opacity: 1,
+ transition: {
+ staggerChildren: 0.05,
+ },
+ },
+};
+
+/* Stagger 子项 */
+export const item = {
+ hidden: { opacity: 0, y: 20 },
+ show: {
+ opacity: 1,
+ y: 0,
+ transition: { duration: 0.3 },
+ },
+};
+```
+
+---
+
+## 7. 类型定义(TypeScript)
+
+### 7.1 共享类型
+```typescript
+/* 通用类型 */
+export type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
+export type Variant = 'primary' | 'secondary' | 'outline' | 'ghost';
+export type Status = 'idle' | 'loading' | 'success' | 'error';
+
+/* 用户相关 */
+export interface User {
+ id: string;
+ name: string;
+ avatar?: string;
+}
+
+/* 对话相关 */
+export interface Conversation {
+ id: string;
+ title: string;
+ description?: string;
+ partnerId: string;
+ messages: Message[];
+ createdAt: Date;
+ updatedAt: Date;
+}
+
+export interface Message {
+ id: string;
+ role: 'user' | 'partner';
+ content: string;
+ timestamp: Date;
+ isKeyPoint?: boolean;
+ sentimentImpact?: number;
+}
+
+/* 分析相关 */
+export interface Analysis {
+ id: string;
+ type: 'positive' | 'neutral' | 'improvement' | 'turning_point';
+ text: string;
+ messageId?: string;
+}
+
+export interface SentimentCurve {
+ points: number[];
+ startValue: number;
+ endValue: number;
+ maxValue: number;
+ minValue: number;
+}
+```
+
+---
+
+## 8. 主题切换(深色/浅色模式)
+
+### 8.1 主题上下文
+```tsx
+import React, { createContext, useContext, useState } from 'react';
+
+type Theme = 'light' | 'dark';
+
+interface ThemeContextType {
+ theme: Theme;
+ toggleTheme: () => void;
+}
+
+const ThemeContext = createContext(undefined);
+
+export const ThemeProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
+ const [theme, setTheme] = useState('dark');
+
+ const toggleTheme = () => {
+ setTheme(t => t === 'light' ? 'dark' : 'light');
+ // 同时更新 HTML 属性和 localStorage
+ document.documentElement.setAttribute('data-theme', theme);
+ localStorage.setItem('theme', theme);
+ };
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const useTheme = () => {
+ const context = useContext(ThemeContext);
+ if (!context) throw new Error('useTheme must be used within ThemeProvider');
+ return context;
+};
+```
+
+### 8.2 Tailwind 深色模式配置
+```js
+// tailwind.config.js
+module.exports = {
+ darkMode: 'class',
+ theme: {
+ colors: {
+ /* ... */
+ },
+ },
+};
+```
+
+---
+
+## 9. 测试覆盖(Jest + React Testing Library)
+
+### 9.1 按钮组件测试示例
+```typescript
+import { render, screen, fireEvent } from '@testing-library/react';
+import { Button } from './Button';
+
+describe('Button Component', () => {
+ it('renders button with correct text', () => {
+ render();
+ expect(screen.getByText('Click me')).toBeInTheDocument();
+ });
+
+ it('applies primary variant styles', () => {
+ render();
+ const button = screen.getByText('Submit');
+ expect(button).toHaveClass('bg-brand-primary', 'text-white');
+ });
+
+ it('handles click events', () => {
+ const handleClick = jest.fn();
+ render();
+
+ fireEvent.click(screen.getByText('Click'));
+ expect(handleClick).toHaveBeenCalled();
+ });
+
+ it('disables button when disabled prop is true', () => {
+ render();
+ expect(screen.getByText('Disabled')).toBeDisabled();
+ });
+});
+```
+
+---
+
+## 10. 性能优化
+
+### 10.1 使用 React.memo 避免不必要重渲染
+```tsx
+export const MessageBubble = React.memo((props: MessageBubbleProps) => {
+ // ...
+});
+```
+
+### 10.2 使用 useCallback 缓存函数
+```tsx
+const handleSave = useCallback(() => {
+ saveConversation(conversationId);
+}, [conversationId]);
+```
+
+### 10.3 列表虚拟化(大数据量)
+```tsx
+import { FixedSizeList as List } from 'react-window';
+
+const MessageList = ({ messages }: { messages: Message[] }) => {
+ const Row = ({ index, style }: { index: number; style: React.CSSProperties }) => (
+
+
+
+ );
+
+ return (
+
+ {Row}
+
+ );
+};
+```
+
+---
+
+## 11. 无障碍(Accessibility)
+
+### 11.1 ARIA 属性
+```tsx
+
+
+
+```
+
+### 11.2 键盘导航
+```tsx
+const handleKeyDown = (e: React.KeyboardEvent) => {
+ if (e.key === 'Enter' || e.key === ' ') {
+ e.preventDefault();
+ onClick?.();
+ }
+ if (e.key === 'Escape') {
+ onClose?.();
+ }
+};
+```
+
+---
+
+## 12. 文档与示例(Storybook)
+
+### 12.1 按钮 Story
+```tsx
+import { Button } from './Button';
+
+export default {
+ title: 'Components/Button',
+ component: Button,
+};
+
+export const Primary = () => ;
+export const Secondary = () => ;
+export const Disabled = () => ;
+export const Loading = () => ;
+```
+
+---
+
+## 13. 组件清单
+
+| 组件名 | 类型 | 用途 | 依赖 |
+|-------|------|------|------|
+| Button | 基础 | 通用按钮 | - |
+| Input | 基础 | 文本输入 | - |
+| Card | 基础 | 卡片容器 | - |
+| Badge | 基础 | 徽章标签 | - |
+| Tag | 基础 | 可删除标签 | - |
+| Modal | 基础 | 模态对话框 | Framer Motion |
+| Spinner | 基础 | 加载指示器 | Framer Motion |
+| Layout | 容器 | 主框架 | Sidebar, Header |
+| Sidebar | 容器 | 侧边栏导航 | Button |
+| Header | 容器 | 页面头部 | Button |
+| MessageBubble | 业务 | 聊天气泡 | Card |
+| SuggestionCard | 业务 | 建议卡片 | Card, Badge, Button |
+| StatCard | 业务 | 统计卡片 | Card |
+| ConversationCard | 业务 | 对话卡片 | Card, Tag |
+
+---
+
+## 14. 版本管理与更新流程
+
+### 14.1 Changelog 示例
+```
+## v1.0.0 (2025-11-15)
+
+### 新增
+- Button 组件:支持 4 种变体、4 种尺寸
+- Input 组件:支持错误状态和图标
+- Modal 组件:完整的模态对话框实现
+
+### 改进
+- 优化 MessageBubble 动画性能
+- 改进 Tag 组件可访问性
+
+### 修复
+- 修复 Button loading 状态在移动端的显示问题
+```
+
+---
+
+**文档版本**:v1.0
+**最后更新**:2025-11-12
+**维护者**:前端架构团队
+**设计工具**:Figma (组件库链接)
+**代码仓库**:`/src/components`
+**Storybook**:http://localhost:6006
+
diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png
deleted file mode 120000
index 9d12755..0000000
--- a/fastlane/metadata/android/en-US/images/icon.png
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../app/src/main/ic_launcher-playstore.png
\ No newline at end of file
diff --git a/.kotlin/errors/errors-1759038853800.log b/mobile/.kotlin/errors/errors-1759038853800.log
similarity index 100%
rename from .kotlin/errors/errors-1759038853800.log
rename to mobile/.kotlin/errors/errors-1759038853800.log
diff --git a/LICENSE b/mobile/LICENSE
similarity index 100%
rename from LICENSE
rename to mobile/LICENSE
diff --git a/README.md b/mobile/README.md
similarity index 100%
rename from README.md
rename to mobile/README.md
diff --git a/app/.gitignore b/mobile/app/.gitignore
similarity index 100%
rename from app/.gitignore
rename to mobile/app/.gitignore
diff --git a/app/build.gradle.kts b/mobile/app/build.gradle.kts
similarity index 100%
rename from app/build.gradle.kts
rename to mobile/app/build.gradle.kts
diff --git a/app/proguard-rules.pro b/mobile/app/proguard-rules.pro
similarity index 100%
rename from app/proguard-rules.pro
rename to mobile/app/proguard-rules.pro
diff --git a/app/src/androidTest/java/com/example/livegalgame/ExampleInstrumentedTest.kt b/mobile/app/src/androidTest/java/com/example/livegalgame/ExampleInstrumentedTest.kt
similarity index 100%
rename from app/src/androidTest/java/com/example/livegalgame/ExampleInstrumentedTest.kt
rename to mobile/app/src/androidTest/java/com/example/livegalgame/ExampleInstrumentedTest.kt
diff --git a/app/src/main/AndroidManifest.xml b/mobile/app/src/main/AndroidManifest.xml
similarity index 100%
rename from app/src/main/AndroidManifest.xml
rename to mobile/app/src/main/AndroidManifest.xml
diff --git a/app/src/main/assets/Ah.mp3 b/mobile/app/src/main/assets/Ah.mp3
similarity index 100%
rename from app/src/main/assets/Ah.mp3
rename to mobile/app/src/main/assets/Ah.mp3
diff --git a/app/src/main/assets/TeaBreak.mp3 b/mobile/app/src/main/assets/TeaBreak.mp3
similarity index 100%
rename from app/src/main/assets/TeaBreak.mp3
rename to mobile/app/src/main/assets/TeaBreak.mp3
diff --git a/app/src/main/assets/bgm.mp3 b/mobile/app/src/main/assets/bgm.mp3
similarity index 100%
rename from app/src/main/assets/bgm.mp3
rename to mobile/app/src/main/assets/bgm.mp3
diff --git a/app/src/main/assets/casual.mp3 b/mobile/app/src/main/assets/casual.mp3
similarity index 100%
rename from app/src/main/assets/casual.mp3
rename to mobile/app/src/main/assets/casual.mp3
diff --git a/app/src/main/assets/heart.svg b/mobile/app/src/main/assets/heart.svg
similarity index 100%
rename from app/src/main/assets/heart.svg
rename to mobile/app/src/main/assets/heart.svg
diff --git a/app/src/main/assets/image2.svg b/mobile/app/src/main/assets/image2.svg
similarity index 100%
rename from app/src/main/assets/image2.svg
rename to mobile/app/src/main/assets/image2.svg
diff --git a/app/src/main/assets/image3.svg b/mobile/app/src/main/assets/image3.svg
similarity index 100%
rename from app/src/main/assets/image3.svg
rename to mobile/app/src/main/assets/image3.svg
diff --git a/app/src/main/assets/image4.svg b/mobile/app/src/main/assets/image4.svg
similarity index 100%
rename from app/src/main/assets/image4.svg
rename to mobile/app/src/main/assets/image4.svg
diff --git a/app/src/main/assets/image4.xml b/mobile/app/src/main/assets/image4.xml
similarity index 100%
rename from app/src/main/assets/image4.xml
rename to mobile/app/src/main/assets/image4.xml
diff --git a/app/src/main/assets/image5.svg b/mobile/app/src/main/assets/image5.svg
similarity index 100%
rename from app/src/main/assets/image5.svg
rename to mobile/app/src/main/assets/image5.svg
diff --git a/app/src/main/assets/image7.svg b/mobile/app/src/main/assets/image7.svg
similarity index 100%
rename from app/src/main/assets/image7.svg
rename to mobile/app/src/main/assets/image7.svg
diff --git a/app/src/main/assets/image8.svg b/mobile/app/src/main/assets/image8.svg
similarity index 100%
rename from app/src/main/assets/image8.svg
rename to mobile/app/src/main/assets/image8.svg
diff --git a/app/src/main/assets/image9.svg b/mobile/app/src/main/assets/image9.svg
similarity index 100%
rename from app/src/main/assets/image9.svg
rename to mobile/app/src/main/assets/image9.svg
diff --git a/app/src/main/assets/model/README b/mobile/app/src/main/assets/model/README
similarity index 100%
rename from app/src/main/assets/model/README
rename to mobile/app/src/main/assets/model/README
diff --git a/app/src/main/assets/model/am/final.mdl b/mobile/app/src/main/assets/model/am/final.mdl
similarity index 100%
rename from app/src/main/assets/model/am/final.mdl
rename to mobile/app/src/main/assets/model/am/final.mdl
diff --git a/app/src/main/assets/model/conf/mfcc.conf b/mobile/app/src/main/assets/model/conf/mfcc.conf
similarity index 100%
rename from app/src/main/assets/model/conf/mfcc.conf
rename to mobile/app/src/main/assets/model/conf/mfcc.conf
diff --git a/app/src/main/assets/model/conf/model.conf b/mobile/app/src/main/assets/model/conf/model.conf
similarity index 100%
rename from app/src/main/assets/model/conf/model.conf
rename to mobile/app/src/main/assets/model/conf/model.conf
diff --git a/app/src/main/assets/model/graph/Gr.fst b/mobile/app/src/main/assets/model/graph/Gr.fst
similarity index 100%
rename from app/src/main/assets/model/graph/Gr.fst
rename to mobile/app/src/main/assets/model/graph/Gr.fst
diff --git a/app/src/main/assets/model/graph/HCLr.fst b/mobile/app/src/main/assets/model/graph/HCLr.fst
similarity index 100%
rename from app/src/main/assets/model/graph/HCLr.fst
rename to mobile/app/src/main/assets/model/graph/HCLr.fst
diff --git a/app/src/main/assets/model/graph/disambig_tid.int b/mobile/app/src/main/assets/model/graph/disambig_tid.int
similarity index 100%
rename from app/src/main/assets/model/graph/disambig_tid.int
rename to mobile/app/src/main/assets/model/graph/disambig_tid.int
diff --git a/app/src/main/assets/model/graph/phones/word_boundary.int b/mobile/app/src/main/assets/model/graph/phones/word_boundary.int
similarity index 100%
rename from app/src/main/assets/model/graph/phones/word_boundary.int
rename to mobile/app/src/main/assets/model/graph/phones/word_boundary.int
diff --git a/app/src/main/assets/model/ivector/final.dubm b/mobile/app/src/main/assets/model/ivector/final.dubm
similarity index 100%
rename from app/src/main/assets/model/ivector/final.dubm
rename to mobile/app/src/main/assets/model/ivector/final.dubm
diff --git a/app/src/main/assets/model/ivector/final.ie b/mobile/app/src/main/assets/model/ivector/final.ie
similarity index 100%
rename from app/src/main/assets/model/ivector/final.ie
rename to mobile/app/src/main/assets/model/ivector/final.ie
diff --git a/app/src/main/assets/model/ivector/final.mat b/mobile/app/src/main/assets/model/ivector/final.mat
similarity index 100%
rename from app/src/main/assets/model/ivector/final.mat
rename to mobile/app/src/main/assets/model/ivector/final.mat
diff --git a/app/src/main/assets/model/ivector/global_cmvn.stats b/mobile/app/src/main/assets/model/ivector/global_cmvn.stats
similarity index 100%
rename from app/src/main/assets/model/ivector/global_cmvn.stats
rename to mobile/app/src/main/assets/model/ivector/global_cmvn.stats
diff --git a/app/src/main/assets/model/ivector/online_cmvn.conf b/mobile/app/src/main/assets/model/ivector/online_cmvn.conf
similarity index 100%
rename from app/src/main/assets/model/ivector/online_cmvn.conf
rename to mobile/app/src/main/assets/model/ivector/online_cmvn.conf
diff --git a/app/src/main/assets/model/ivector/splice.conf b/mobile/app/src/main/assets/model/ivector/splice.conf
similarity index 100%
rename from app/src/main/assets/model/ivector/splice.conf
rename to mobile/app/src/main/assets/model/ivector/splice.conf
diff --git a/app/src/main/assets/model/uuid b/mobile/app/src/main/assets/model/uuid
similarity index 100%
rename from app/src/main/assets/model/uuid
rename to mobile/app/src/main/assets/model/uuid
diff --git a/app/src/main/ic_launcher-playstore.png b/mobile/app/src/main/ic_launcher-playstore.png
similarity index 100%
rename from app/src/main/ic_launcher-playstore.png
rename to mobile/app/src/main/ic_launcher-playstore.png
diff --git a/app/src/main/java/com/jstone/livegalgame/MainActivity.kt b/mobile/app/src/main/java/com/jstone/livegalgame/MainActivity.kt
similarity index 100%
rename from app/src/main/java/com/jstone/livegalgame/MainActivity.kt
rename to mobile/app/src/main/java/com/jstone/livegalgame/MainActivity.kt
diff --git a/app/src/main/java/com/jstone/livegalgame/Utils.kt b/mobile/app/src/main/java/com/jstone/livegalgame/Utils.kt
similarity index 100%
rename from app/src/main/java/com/jstone/livegalgame/Utils.kt
rename to mobile/app/src/main/java/com/jstone/livegalgame/Utils.kt
diff --git a/app/src/main/java/com/jstone/livegalgame/dialog/TriggerManagementDialog.kt b/mobile/app/src/main/java/com/jstone/livegalgame/dialog/TriggerManagementDialog.kt
similarity index 100%
rename from app/src/main/java/com/jstone/livegalgame/dialog/TriggerManagementDialog.kt
rename to mobile/app/src/main/java/com/jstone/livegalgame/dialog/TriggerManagementDialog.kt
diff --git a/app/src/main/java/com/jstone/livegalgame/dialog/keywordDialog.kt b/mobile/app/src/main/java/com/jstone/livegalgame/dialog/keywordDialog.kt
similarity index 100%
rename from app/src/main/java/com/jstone/livegalgame/dialog/keywordDialog.kt
rename to mobile/app/src/main/java/com/jstone/livegalgame/dialog/keywordDialog.kt
diff --git a/app/src/main/java/com/jstone/livegalgame/model/DialogType.kt b/mobile/app/src/main/java/com/jstone/livegalgame/model/DialogType.kt
similarity index 100%
rename from app/src/main/java/com/jstone/livegalgame/model/DialogType.kt
rename to mobile/app/src/main/java/com/jstone/livegalgame/model/DialogType.kt
diff --git a/app/src/main/java/com/jstone/livegalgame/model/KeywordTrigger.kt b/mobile/app/src/main/java/com/jstone/livegalgame/model/KeywordTrigger.kt
similarity index 100%
rename from app/src/main/java/com/jstone/livegalgame/model/KeywordTrigger.kt
rename to mobile/app/src/main/java/com/jstone/livegalgame/model/KeywordTrigger.kt
diff --git a/app/src/main/java/com/jstone/livegalgame/model/Trigger.kt b/mobile/app/src/main/java/com/jstone/livegalgame/model/Trigger.kt
similarity index 100%
rename from app/src/main/java/com/jstone/livegalgame/model/Trigger.kt
rename to mobile/app/src/main/java/com/jstone/livegalgame/model/Trigger.kt
diff --git a/app/src/main/java/com/jstone/livegalgame/speech/KeywordSpeechListener.kt b/mobile/app/src/main/java/com/jstone/livegalgame/speech/KeywordSpeechListener.kt
similarity index 100%
rename from app/src/main/java/com/jstone/livegalgame/speech/KeywordSpeechListener.kt
rename to mobile/app/src/main/java/com/jstone/livegalgame/speech/KeywordSpeechListener.kt
diff --git a/app/src/main/java/com/jstone/livegalgame/ui/CameraScreen.kt b/mobile/app/src/main/java/com/jstone/livegalgame/ui/CameraScreen.kt
similarity index 100%
rename from app/src/main/java/com/jstone/livegalgame/ui/CameraScreen.kt
rename to mobile/app/src/main/java/com/jstone/livegalgame/ui/CameraScreen.kt
diff --git a/app/src/main/java/com/jstone/livegalgame/ui/theme/Color.kt b/mobile/app/src/main/java/com/jstone/livegalgame/ui/theme/Color.kt
similarity index 100%
rename from app/src/main/java/com/jstone/livegalgame/ui/theme/Color.kt
rename to mobile/app/src/main/java/com/jstone/livegalgame/ui/theme/Color.kt
diff --git a/app/src/main/java/com/jstone/livegalgame/ui/theme/Theme.kt b/mobile/app/src/main/java/com/jstone/livegalgame/ui/theme/Theme.kt
similarity index 100%
rename from app/src/main/java/com/jstone/livegalgame/ui/theme/Theme.kt
rename to mobile/app/src/main/java/com/jstone/livegalgame/ui/theme/Theme.kt
diff --git a/app/src/main/java/com/jstone/livegalgame/ui/theme/Type.kt b/mobile/app/src/main/java/com/jstone/livegalgame/ui/theme/Type.kt
similarity index 100%
rename from app/src/main/java/com/jstone/livegalgame/ui/theme/Type.kt
rename to mobile/app/src/main/java/com/jstone/livegalgame/ui/theme/Type.kt
diff --git a/app/src/main/res/AppIcons.zip b/mobile/app/src/main/res/AppIcons.zip
similarity index 100%
rename from app/src/main/res/AppIcons.zip
rename to mobile/app/src/main/res/AppIcons.zip
diff --git a/app/src/main/res/drawable/chapter.png b/mobile/app/src/main/res/drawable/chapter.png
similarity index 100%
rename from app/src/main/res/drawable/chapter.png
rename to mobile/app/src/main/res/drawable/chapter.png
diff --git a/app/src/main/res/drawable/chocake.png b/mobile/app/src/main/res/drawable/chocake.png
similarity index 100%
rename from app/src/main/res/drawable/chocake.png
rename to mobile/app/src/main/res/drawable/chocake.png
diff --git a/app/src/main/res/drawable/heart.xml b/mobile/app/src/main/res/drawable/heart.xml
similarity index 100%
rename from app/src/main/res/drawable/heart.xml
rename to mobile/app/src/main/res/drawable/heart.xml
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/mobile/app/src/main/res/drawable/ic_launcher_background.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_launcher_background.xml
rename to mobile/app/src/main/res/drawable/ic_launcher_background.xml
diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/mobile/app/src/main/res/drawable/ic_launcher_foreground.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_launcher_foreground.xml
rename to mobile/app/src/main/res/drawable/ic_launcher_foreground.xml
diff --git a/app/src/main/res/drawable/image2.xml b/mobile/app/src/main/res/drawable/image2.xml
similarity index 100%
rename from app/src/main/res/drawable/image2.xml
rename to mobile/app/src/main/res/drawable/image2.xml
diff --git a/app/src/main/res/drawable/image3.xml b/mobile/app/src/main/res/drawable/image3.xml
similarity index 100%
rename from app/src/main/res/drawable/image3.xml
rename to mobile/app/src/main/res/drawable/image3.xml
diff --git a/app/src/main/res/drawable/image4.xml b/mobile/app/src/main/res/drawable/image4.xml
similarity index 100%
rename from app/src/main/res/drawable/image4.xml
rename to mobile/app/src/main/res/drawable/image4.xml
diff --git a/app/src/main/res/drawable/image5.xml b/mobile/app/src/main/res/drawable/image5.xml
similarity index 100%
rename from app/src/main/res/drawable/image5.xml
rename to mobile/app/src/main/res/drawable/image5.xml
diff --git a/app/src/main/res/drawable/image7.xml b/mobile/app/src/main/res/drawable/image7.xml
similarity index 100%
rename from app/src/main/res/drawable/image7.xml
rename to mobile/app/src/main/res/drawable/image7.xml
diff --git a/app/src/main/res/drawable/image8.xml b/mobile/app/src/main/res/drawable/image8.xml
similarity index 100%
rename from app/src/main/res/drawable/image8.xml
rename to mobile/app/src/main/res/drawable/image8.xml
diff --git a/app/src/main/res/drawable/image9.xml b/mobile/app/src/main/res/drawable/image9.xml
similarity index 100%
rename from app/src/main/res/drawable/image9.xml
rename to mobile/app/src/main/res/drawable/image9.xml
diff --git a/app/src/main/res/drawable/lemon.png b/mobile/app/src/main/res/drawable/lemon.png
similarity index 100%
rename from app/src/main/res/drawable/lemon.png
rename to mobile/app/src/main/res/drawable/lemon.png
diff --git a/app/src/main/res/drawable/strbcake.png b/mobile/app/src/main/res/drawable/strbcake.png
similarity index 100%
rename from app/src/main/res/drawable/strbcake.png
rename to mobile/app/src/main/res/drawable/strbcake.png
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/mobile/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
similarity index 100%
rename from app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
rename to mobile/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/mobile/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
similarity index 100%
rename from app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
rename to mobile/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/mobile/app/src/main/res/mipmap-hdpi/ic_launcher.webp
similarity index 100%
rename from app/src/main/res/mipmap-hdpi/ic_launcher.webp
rename to mobile/app/src/main/res/mipmap-hdpi/ic_launcher.webp
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/mobile/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
similarity index 100%
rename from app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
rename to mobile/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/mobile/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
similarity index 100%
rename from app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
rename to mobile/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/mobile/app/src/main/res/mipmap-mdpi/ic_launcher.webp
similarity index 100%
rename from app/src/main/res/mipmap-mdpi/ic_launcher.webp
rename to mobile/app/src/main/res/mipmap-mdpi/ic_launcher.webp
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/mobile/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
similarity index 100%
rename from app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
rename to mobile/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/mobile/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
similarity index 100%
rename from app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
rename to mobile/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/mobile/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
similarity index 100%
rename from app/src/main/res/mipmap-xhdpi/ic_launcher.webp
rename to mobile/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/mobile/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
similarity index 100%
rename from app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
rename to mobile/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/mobile/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
similarity index 100%
rename from app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
rename to mobile/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/mobile/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
similarity index 100%
rename from app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
rename to mobile/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/mobile/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
similarity index 100%
rename from app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
rename to mobile/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/mobile/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
similarity index 100%
rename from app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
rename to mobile/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/mobile/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
similarity index 100%
rename from app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
rename to mobile/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/mobile/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
similarity index 100%
rename from app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
rename to mobile/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/mobile/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
similarity index 100%
rename from app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
rename to mobile/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
diff --git a/app/src/main/res/values/colors.xml b/mobile/app/src/main/res/values/colors.xml
similarity index 100%
rename from app/src/main/res/values/colors.xml
rename to mobile/app/src/main/res/values/colors.xml
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/mobile/app/src/main/res/values/ic_launcher_background.xml
similarity index 100%
rename from app/src/main/res/values/ic_launcher_background.xml
rename to mobile/app/src/main/res/values/ic_launcher_background.xml
diff --git a/app/src/main/res/values/strings.xml b/mobile/app/src/main/res/values/strings.xml
similarity index 100%
rename from app/src/main/res/values/strings.xml
rename to mobile/app/src/main/res/values/strings.xml
diff --git a/app/src/main/res/values/themes.xml b/mobile/app/src/main/res/values/themes.xml
similarity index 100%
rename from app/src/main/res/values/themes.xml
rename to mobile/app/src/main/res/values/themes.xml
diff --git a/app/src/main/res/xml/backup_rules.xml b/mobile/app/src/main/res/xml/backup_rules.xml
similarity index 100%
rename from app/src/main/res/xml/backup_rules.xml
rename to mobile/app/src/main/res/xml/backup_rules.xml
diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/mobile/app/src/main/res/xml/data_extraction_rules.xml
similarity index 100%
rename from app/src/main/res/xml/data_extraction_rules.xml
rename to mobile/app/src/main/res/xml/data_extraction_rules.xml
diff --git a/app/src/test/java/com/example/livegalgame/ExampleUnitTest.kt b/mobile/app/src/test/java/com/example/livegalgame/ExampleUnitTest.kt
similarity index 100%
rename from app/src/test/java/com/example/livegalgame/ExampleUnitTest.kt
rename to mobile/app/src/test/java/com/example/livegalgame/ExampleUnitTest.kt
diff --git a/build.gradle.kts b/mobile/build.gradle.kts
similarity index 100%
rename from build.gradle.kts
rename to mobile/build.gradle.kts
diff --git a/fastlane/metadata/android/en-US/full_description.txt b/mobile/fastlane/metadata/android/en-US/full_description.txt
similarity index 100%
rename from fastlane/metadata/android/en-US/full_description.txt
rename to mobile/fastlane/metadata/android/en-US/full_description.txt
diff --git a/mobile/fastlane/metadata/android/en-US/images/icon.png b/mobile/fastlane/metadata/android/en-US/images/icon.png
new file mode 100644
index 0000000..9d12755
--- /dev/null
+++ b/mobile/fastlane/metadata/android/en-US/images/icon.png
@@ -0,0 +1 @@
+../../../../../app/src/main/ic_launcher-playstore.png
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/short_description.txt b/mobile/fastlane/metadata/android/en-US/short_description.txt
similarity index 100%
rename from fastlane/metadata/android/en-US/short_description.txt
rename to mobile/fastlane/metadata/android/en-US/short_description.txt
diff --git a/fastlane/metadata/android/en-US/title.txt b/mobile/fastlane/metadata/android/en-US/title.txt
similarity index 100%
rename from fastlane/metadata/android/en-US/title.txt
rename to mobile/fastlane/metadata/android/en-US/title.txt
diff --git a/fastlane/metadata/android/zh-CN/full_description.txt b/mobile/fastlane/metadata/android/zh-CN/full_description.txt
similarity index 100%
rename from fastlane/metadata/android/zh-CN/full_description.txt
rename to mobile/fastlane/metadata/android/zh-CN/full_description.txt
diff --git a/fastlane/metadata/android/zh-CN/short_description.txt b/mobile/fastlane/metadata/android/zh-CN/short_description.txt
similarity index 100%
rename from fastlane/metadata/android/zh-CN/short_description.txt
rename to mobile/fastlane/metadata/android/zh-CN/short_description.txt
diff --git a/fastlane/metadata/android/zh-CN/title.txt b/mobile/fastlane/metadata/android/zh-CN/title.txt
similarity index 100%
rename from fastlane/metadata/android/zh-CN/title.txt
rename to mobile/fastlane/metadata/android/zh-CN/title.txt
diff --git a/gradle.properties b/mobile/gradle.properties
similarity index 100%
rename from gradle.properties
rename to mobile/gradle.properties
diff --git a/gradle/libs.versions.toml b/mobile/gradle/libs.versions.toml
similarity index 100%
rename from gradle/libs.versions.toml
rename to mobile/gradle/libs.versions.toml
diff --git a/gradle/wrapper/gradle-wrapper.jar b/mobile/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from gradle/wrapper/gradle-wrapper.jar
rename to mobile/gradle/wrapper/gradle-wrapper.jar
diff --git a/gradle/wrapper/gradle-wrapper.properties b/mobile/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from gradle/wrapper/gradle-wrapper.properties
rename to mobile/gradle/wrapper/gradle-wrapper.properties
diff --git a/gradlew b/mobile/gradlew
similarity index 100%
rename from gradlew
rename to mobile/gradlew
diff --git a/gradlew.bat b/mobile/gradlew.bat
similarity index 100%
rename from gradlew.bat
rename to mobile/gradlew.bat
diff --git "a/release/\345\220\216\347\273\255apk\345\234\250tags\344\270\255\345\217\221\345\270\203.txt" "b/mobile/release/\345\220\216\347\273\255apk\345\234\250tags\344\270\255\345\217\221\345\270\203.txt"
similarity index 100%
rename from "release/\345\220\216\347\273\255apk\345\234\250tags\344\270\255\345\217\221\345\270\203.txt"
rename to "mobile/release/\345\220\216\347\273\255apk\345\234\250tags\344\270\255\345\217\221\345\270\203.txt"
diff --git a/settings.gradle.kts b/mobile/settings.gradle.kts
similarity index 100%
rename from settings.gradle.kts
rename to mobile/settings.gradle.kts
From 4d176b529929b94b5c485c76ed86af77c40901e4 Mon Sep 17 00:00:00 2001
From: chenspeculation
Date: Wed, 12 Nov 2025 22:11:07 +0800
Subject: [PATCH 025/147] Remove unused .idea configuration files and add
initial mobile app structure with essential files, including Gradle setup,
AndroidManifest, and UI components. Also, include metadata for app
description in both English and Chinese.
---
.../70433c63813d57abeb67ff85363cbc0c.jpg | Bin 0 -> 95173 bytes
.../70753aea0271777b0d92bfa4fb3ad015.jpg | Bin 0 -> 71497 bytes
.../9fc9fa48e8988b3eb496f07c45b7a6b6.jpg | Bin 0 -> 111185 bytes
.../cfef12820f837d316c204595222899b9.jpg | Bin 0 -> 119624 bytes
4 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 desktop/spec/images/70433c63813d57abeb67ff85363cbc0c.jpg
create mode 100644 desktop/spec/images/70753aea0271777b0d92bfa4fb3ad015.jpg
create mode 100644 desktop/spec/images/9fc9fa48e8988b3eb496f07c45b7a6b6.jpg
create mode 100644 desktop/spec/images/cfef12820f837d316c204595222899b9.jpg
diff --git a/desktop/spec/images/70433c63813d57abeb67ff85363cbc0c.jpg b/desktop/spec/images/70433c63813d57abeb67ff85363cbc0c.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1242fcbb4e2d26f97916210941cfcec32705f0a2
GIT binary patch
literal 95173
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