Sprint Phase: Beta Day 1-2 / 8
Team Name: 心屿开发团队 (Xinyu Development Team)
Project Name: 心屿 (MindCarrer) - AI-Driven Mental Health Social Support Platform
1. SCRUM
1.1 Team Member Progress
| Member | Completed Tasks | Time Spent | Issues Encountered | Next Plan |
|---|---|---|---|---|
| 吴志斌 | Multi-user data isolation design & implementation | 8h | SQLite concurrency conflicts | Android server adaptation |
| 江贤晟 | Android project architecture setup, network module migration | 8h | NDK compatibility | Login page migration |
| 杨媛真 | Android UI layout design, login page UI | 6h | Font display issues | Main page UI design |
| 方利喆 | iOS environment setup, project structure preparation | 6h | Complex Mac environment | iOS project framework |
| 连泽政 | Multi-user testing plan, concurrency testing execution | 5h | None | Community feature testing |
| 林泽君 | Local cache testing, data isolation verification | 5h | None | Android login testing |
| 范禛 | Alpha issue consolidation, Beta planning documentation | 4h | None | Assist functional testing |
| 杨越 | Android icon design, UI color optimization | 4h | None | Page UI beautification |
| 陈毅鹏 | Sprint article writing, technical documentation | 3h | None | Record development progress |
| 吴昱霆 | Android push notification research, FCM study | 3h | FCM restrictions in China | Push solution design |
| 连森涛 | Android material collection, Qt documentation | 2h | None | Technical data collection |
Total Hours : 54 hours | Average: 4.9h/person
1.2 Code Check-in Records


1. Multi-user Data Isolation Implementation
Committer: 吴志斌
Issue: #Beta-001 Local cache multi-user data isolation
Core Code : localstore.cpp
// Create independent database for each user
QString LocalStore::getUserDbPath(const QString& userId) const {
QString base = QStandardPaths::writableLocation(
QStandardPaths::AppDataLocation);
QDir().mkpath(base);
return base + QString("/user_%1.sqlite").arg(userId);
}
// Switch user database
bool LocalStore::switchUser(const QString& userId) {
if (m_currentUserId == userId && db.isOpen()) {
return true;
}
if (db.isOpen()) {
db.close();
}
m_currentUserId = userId;
QString dbPath = getUserDbPath(userId);
db = QSqlDatabase::addDatabase("QSQLITE", userId);
db.setDatabaseName(dbPath);
if (!db.open()) {
qDebug() << "Failed to open DB for user:" << userId;
return false;
}
initTables();
qDebug() << "Switched to user:" << userId;
return true;
}
Affected Files:
-
Client_Code/localstore.h -
Client_Code/localstore.cpp -
Client_Code/mainwindow.cpp
2. Android Project Architecture Setup
Committer: 江贤晟
Issue: #Beta-002 Android project infrastructure
Project Structure:
Client_Code_Android/
├── android/
│ ├── AndroidManifest.xml
│ ├── build.gradle
│ └── res/
├── *.h, *.cpp, *.ui (Migrated from Windows version)
├── resources.qrc
└── MindCarrer_Android.pro
Key Configuration : MindCarrer_Android.pro
QT += core gui widgets network sql concurrent
android {
QT += androidextras
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
ANDROID_MIN_SDK_VERSION = 26
ANDROID_TARGET_SDK_VERSION = 33
ANDROID_PERMISSIONS += \
android.permission.INTERNET \
android.permission.ACCESS_NETWORK_STATE
}
3. Network Communication Module Migration
Committer: 吴志斌
Issue: #Beta-003 Android network module migration
Android Network Initialization:
#ifdef Q_OS_ANDROID
void FrontClient::initAndroidNetwork() {
QtAndroid::requestPermissionsSync(
QStringList() << "android.permission.INTERNET"
);
mainSocket.setSocketOption(
QAbstractSocket::LowDelayOption, 1);
mainSocket.setSocketOption(
QAbstractSocket::KeepAliveOption, 1);
}
#endif
1.3 Testing Evidence
Multi-user Data Isolation Testing
Testers: 连泽政, 林泽君
Test Scenarios:
| Scenario | Test Cases | Passed | Failed | Pass Rate |
|---|---|---|---|---|
| Concurrent Login | 5 | 5 | 0 | 100% |
| Chat Record Isolation | 10 | 10 | 0 | 100% |
| Database File Verification | 8 | 8 | 100% | |
| User Switching | 7 | 7 | 0 | 100% |
| Total | 30 | 30 | 0 | **100%** |
Database File Verification:
C:\Users\用户名\AppData\Local\MindCarrer\
├── user_13800000001.sqlite (128 KB)
├── user_13800000002.sqlite (96 KB)
└── config.ini
Multi-user Concurrency Test:
✅ Client 1: User A's 10 chat records
✅ Client 2: User B's 10 chat records
✅ Data completely isolated, no crossover
Android Project Compilation Test
Test Device: Xiaomi Pad 7
Compilation Results:
| Step | Status | Time | Notes |
|---|---|---|---|
| Clean Project | ✅ | 5s | Remove old builds |
| Configure Project | ✅ | 12s | qmake configuration |
| Compile Source | ✅ | 3m45s | 120 source files |
| Package APK | ✅ | 1m20s | APK: 28.5MB |
Runtime Tests:
| Test Item | Result | Notes |
|---|---|---|
| App Launch | ✅ | 2.8 seconds |
| Login Page | ✅ | UI normal |
| Network Connection | ✅ | Connection successful |
| Login Function | ✅ | Login successful |
1.4 Stand-up Meeting Photos

2. PM Report
2.1 Project Progress
Sprint Period: January 1-8, 2026 (8 days)
Current Progress: Day 2 / 8
Completion Rate: 25%
Task Statistics
| Category | Planned | Completed | In Progress | Not Started | Completion Rate |
|---|---|---|---|---|---|
| Alpha Issue Fixes | 4 | 2 | 0 | 2 | 50% |
| Mobile Development | 6 | 1 | 1 | 4 | 17% |
| New Features | 3 | 0 | 0 | 3 | 0% |
| Performance Optimization | 2 | 0 | 0 | 2 | 0% |
| Testing & Documentation | 5 | 1 | 1 | 3 | 20% |
| Total | 20 | 4 | 2 | 14 | **20%** |
Completed Tasks
-
✅ Local cache multi-user isolation (吴志斌, 8h)
-
✅ Android project architecture setup (江贤晟, 8h)
-
✅ Network communication module migration (江贤晟, 6h)
-
✅ Multi-user concurrency testing (连泽政/林泽君, 10h)
Tasks in Progress
-
🔄 Android login page development (杨媛真, 60%)
-
🔄 iOS project environment configuration (方利喆, 40%)
Hours Statistics
| Date | Planned | Actual | Difference | Cumulative |
|---|---|---|---|---|
| Day 1 | 44h | 44h | 0h | 44h |
| Day 2 | 44h | 44h | 0h | 88h |
| Total | 88h | 88h | 0h | 88h |
Remaining Hours: 264 hours
2.2 Burn-down Chart
Remaining Hours (h)
352 |●
| ●
300 | ●
| ●
250 | ●
| ●
200 | ●
| ●
150 | ●
| ●
100 | ●
| ●
50 | ●
| ●
0 |____________________________●
Day1 Day2 Day3 Day4 Day5 Day6 Day7 Day8
● Ideal Burn-down Line
■ Actual Burn-down Line
Current: Day 2
Ideal Remaining: 264h
Actual Remaining: 264h
Deviation: 0h ✅
Analysis:
-
✅ Progress normal, consistent with ideal timeline
-
✅ Hours control good, average 4.9h/person/day
-
✅ Task allocation reasonable, load balanced
2.3 Task Volume Changes
New Tasks
| New Task | Discovery Time | Priority | Hours | Owner |
|---|---|---|---|---|
| Android font display optimization | Day 1 | Medium | 4h | 杨媛真 |
| Database concurrency lock optimization | Day 1 | High | 6h | 吴志斌 |
| iOS certificate configuration | Day 2 | High | 8h | 方利喆 |
| Android permission management | Day 2 | Medium | 4h | 江贤晟 |
Added Hours: 22 hours
Adjusted Total Hours: 374 hours
2.4 Running Screenshots and Demos
Multi-user Data Isolation Demo
Scenario: Two users logged in simultaneously, data completely isolated

Android Application Running Demo
Device: Xiaomi Pad 7

3. Technical Highlights
3.1 Multi-user Data Isolation Solution
Design Approach
Problem: In Alpha stage, all users shared one database, causing data chaos
Solution: Each user uses independent SQLite database file
Architecture Design
User Login
↓
LocalStore::switchUser(userId)
↓
Close current database connection
↓
Open user-specific database
↓
user_<userId>.sqlite
↓
Initialize table structure
↓
Data completely isolated
Core Implementation
// Database path generation
QString getUserDbPath(const QString& userId) const {
QString base = QStandardPaths::writableLocation(
QStandardPaths::AppDataLocation);
return base + QString("/user_%1.sqlite").arg(userId);
}
// User switching
bool switchUser(const QString& userId) {
// 1. Close current connection
if (db.isOpen()) db.close();
// 2. Open new user database
db.setDatabaseName(getUserDbPath(userId));
if (!db.open()) return false;
// 3. Initialize table structure
initTables();
return true;
}
Advantages
-
✅ Data Isolation: Each user's data completely independent
-
✅ Concurrency Safety: No conflicts with multiple simultaneous logins
-
✅ Easy Management: Database files clearly visible
-
✅ Performance Optimization: Avoids large table queries, improves speed
3.2 Android Project Architecture Design
Cross-platform Strategy
Goal: Maximize code reuse, minimize platform differences
Approach:
-
Core business logic 100% reused
-
UI layout files 100% reused
-
Platform-specific code uses conditional compilation
Project Structure
Client_Code_Android/
├── Core Code (Reused)
│ ├── frontclient.cpp # Network communication
│ ├── localstore.cpp # Local storage
│ ├── mainwindow.cpp # Main window
│ └── ...
├── UI Files (Reused)
│ ├── authwindow.ui
│ ├── mainwindow.ui
│ └── ...
├── Android Specific
│ ├── android/
│ │ ├── AndroidManifest.xml
│ │ ├── build.gradle
│ │ └── res/
│ └── MindCarrer_Android.pro
Conditional Compilation Example
// Platform-specific initialization
#ifdef Q_OS_ANDROID
initAndroidNetwork();
requestAndroidPermissions();
#elif defined(Q_OS_IOS)
initIOSNetwork();
requestIOSPermissions();
#else
// Windows/Linux/macOS
initDesktopNetwork();
#endif
Advantages
-
✅ Code Reuse Rate: Over 85%
-
✅ Low Maintenance Cost: One modification, multiple platforms effective
-
✅ High Development Efficiency: Quick migration to new platforms
-
✅ Good Consistency: Unified user experience
4. Problems and Solutions
Problem 1: SQLite Concurrent Access Conflicts
Symptom: Occasional errors when multiple users operated database simultaneously
Cause: SQLite doesn't support high-concurrency writes by default
Solution:
// Enable WAL mode
db.exec("PRAGMA journal_mode=WAL;");
db.exec("PRAGMA synchronous=NORMAL;");
// Set timeout
sqlite3_busy_timeout(db_, 5000);
Effect: ✅ Concurrency conflicts completely resolved
Problem 2: NDK Version Compatibility
Symptom: Android project compilation failed,提示NDK version mismatch
Cause: Qt 6.5.3 requires NDK 25.x, but system had NDK 21.x installed
Solution:
# Download NDK 25.1.8937393
sdkmanager "ndk;25.1.8937393"
# Configure NDK path in Qt Creator
Tools → Options → Devices → Android
NDK Location: E:/AndrioSDK/SDKQT/ndk/25.1.8937393
Effect: ✅ Compilation passed successfully
Problem 3: Android Font Display Abnormalities
Symptom: Some Chinese characters displayed as squares
Cause: Android system fonts didn't match Qt default fonts
Solution:
#ifdef Q_OS_ANDROID
QFont font("Roboto");
font.setPointSize(14);
QApplication::setFont(font);
#endif
Effect: ✅ Font display normal
5. Days 1-2 Summary
Completion Status
Completed:
-
✅ Multi-user data isolation design & implementation
-
✅ Android project infrastructure setup
-
✅ Network communication module migration
-
✅ Multi-user concurrency testing (100% pass)
In Progress:
- 🔄 Android login page development (60%)
Completion Rate: 20% (4/20 tasks)
Team Collaboration
Strengths:
-
✅ Task allocation reasonable, everyone has clear goals
-
✅ Stand-up communication timely, problems resolved quickly
-
✅ Code review strict, quality assured
Improvements:
- ⚠️ Some members unfamiliar with Android development, need enhanced learning
Technical Gains
-
Multi-user Data Isolation: Learned SQLite multi-database management
-
Cross-platform Development: Mastered Qt for Android development workflow
-
Conditional Compilation: Understood cross-platform code organization
-
Concurrency Testing: Improved test design capabilities
6. Next Plan (Days 3-4)
Main Tasks
-
Community Features Improvement
-
Fix like functionality
-
Fix comment functionality (async loading)
-
Optimize community page performance
-
-
Window Size Unification
-
Adjust login/registration pages to 1200x800
-
Maintain consistency with main page size
-
Optimize window switching animations
-
-
Windows Message Notifications
-
Implement hourly check mechanism
-
Add cute notification message library
-
Integrate Windows Toast notifications
-
-
Android Feature Completion
-
Complete login/registration pages
-
Develop main page UI
-
Implement bottom navigation bar
-
Expected Goals
-
Complete 50% of Alpha legacy issues
-
Android development progress reach 40%
-
Cumulative completion rate achieve 51%
Document Version: v1.0
Author: 陈毅鹏
Reviewer: 吴志斌