Show real photos for people instead of scene art
Your avatar is your photo, picked from the device by tapping it on Home or from a new Profile photo row in Settings, shrunk to 256 px and kept on the phone (there is no upload endpoint yet). Group members show the photo the server sends in a new `photo` field, everywhere avatars appear. Without a photo, an initial on a neutral disc. Mock mode bundles free Unsplash portraits for the sample people. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KhQh614DMeYoQEH9SoMRUw
This commit is contained in:
@@ -46,7 +46,8 @@ class MockComms implements ConnectComms {
|
||||
|
||||
Future<Response> _done() => _ok(<String, dynamic>{'success': true});
|
||||
|
||||
Future<Response> _emptyPage() => _ok(MockStore.page(<Map<String, dynamic>>[]));
|
||||
Future<Response> _emptyPage() =>
|
||||
_ok(MockStore.page(<Map<String, dynamic>>[]));
|
||||
|
||||
// ── Auth ──────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -72,7 +73,8 @@ class MockComms implements ConnectComms {
|
||||
Future<Response> logout() => _done();
|
||||
|
||||
@override
|
||||
Future<Response> me() => _ok(<String, dynamic>{'id': 'mock-user', 'name': 'Alex'});
|
||||
Future<Response> me() =>
|
||||
_ok(<String, dynamic>{'id': 'mock-user', 'name': 'Alex'});
|
||||
|
||||
// ── Goals ─────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -152,7 +154,8 @@ class MockComms implements ConnectComms {
|
||||
|
||||
@override
|
||||
Future<Response> completeCommitmentEntry(CompletionRequest request) {
|
||||
final Map<String, dynamic>? item = MockStore.commitment(request.commitmentId);
|
||||
final Map<String, dynamic>? item =
|
||||
MockStore.commitment(request.commitmentId);
|
||||
if (item != null) {
|
||||
final DateTime? end = DateTime.tryParse(item['dueEnd'] ?? '');
|
||||
item['status'] = end != null && end.isBefore(DateTime.now())
|
||||
@@ -164,7 +167,8 @@ class MockComms implements ConnectComms {
|
||||
|
||||
@override
|
||||
Future<Response> deferCommitmentEntry(DeferralRequest request) {
|
||||
final Map<String, dynamic>? item = MockStore.commitment(request.commitmentId);
|
||||
final Map<String, dynamic>? item =
|
||||
MockStore.commitment(request.commitmentId);
|
||||
if (item != null) {
|
||||
final DateTime now = DateTime.now();
|
||||
item['dueStart'] = request.newDueStart.isNotEmpty
|
||||
@@ -181,7 +185,8 @@ class MockComms implements ConnectComms {
|
||||
|
||||
@override
|
||||
Future<Response> abandonCommitmentEntry(AbandonRequest request) {
|
||||
final Map<String, dynamic>? item = MockStore.commitment(request.commitmentId);
|
||||
final Map<String, dynamic>? item =
|
||||
MockStore.commitment(request.commitmentId);
|
||||
if (item != null) {
|
||||
item['status'] = 'Abandoned';
|
||||
}
|
||||
@@ -271,7 +276,8 @@ class MockComms implements ConnectComms {
|
||||
Future<Response> updateSickMode(SickModeRequest request) => _done();
|
||||
|
||||
@override
|
||||
Future<Response> checkDistress() => _ok(<String, dynamic>{'distressed': false});
|
||||
Future<Response> checkDistress() =>
|
||||
_ok(<String, dynamic>{'distressed': false});
|
||||
|
||||
@override
|
||||
Future<Response> updateTone(ToneRequest request) => _done();
|
||||
@@ -291,8 +297,8 @@ class MockComms implements ConnectComms {
|
||||
Future<Response> getKeystoneHabits() => _ok(<dynamic>[]);
|
||||
|
||||
@override
|
||||
Future<Response> getMyRoutines(HistoryRequest request) => _ok(
|
||||
MockStore.routines.map((routine) => routine.toJson()).toList());
|
||||
Future<Response> getMyRoutines(HistoryRequest request) =>
|
||||
_ok(MockStore.routines.map((routine) => routine.toJson()).toList());
|
||||
|
||||
@override
|
||||
Future<Response> saveRoutineEntry(Map<String, dynamic> request) {
|
||||
@@ -385,13 +391,16 @@ class MockComms implements ConnectComms {
|
||||
Future<Response> getSessionHistory(HistoryRequest request) => _emptyPage();
|
||||
|
||||
@override
|
||||
Future<Response> getLastSessionFor(IdRequest request) => _ok(<String, dynamic>{});
|
||||
Future<Response> getLastSessionFor(IdRequest request) =>
|
||||
_ok(<String, dynamic>{});
|
||||
|
||||
@override
|
||||
Future<Response> getWeeklyVolume(ReportCardRequest request) => _ok(<String, dynamic>{});
|
||||
Future<Response> getWeeklyVolume(ReportCardRequest request) =>
|
||||
_ok(<String, dynamic>{});
|
||||
|
||||
@override
|
||||
Future<Response> getContactVolume(ReportCardRequest request) => _ok(<String, dynamic>{});
|
||||
Future<Response> getContactVolume(ReportCardRequest request) =>
|
||||
_ok(<String, dynamic>{});
|
||||
|
||||
@override
|
||||
Future<Response> getPersonalRecords(HistoryRequest request) => _emptyPage();
|
||||
@@ -399,10 +408,12 @@ class MockComms implements ConnectComms {
|
||||
// ── Report card ───────────────────────────────────────────────────────────
|
||||
|
||||
@override
|
||||
Future<Response> getWeeklyReportCard(ReportCardRequest request) => _ok(_report());
|
||||
Future<Response> getWeeklyReportCard(ReportCardRequest request) =>
|
||||
_ok(_report());
|
||||
|
||||
@override
|
||||
Future<Response> getMonthlyReportCard(ReportCardRequest request) => _ok(_report());
|
||||
Future<Response> getMonthlyReportCard(ReportCardRequest request) =>
|
||||
_ok(_report());
|
||||
|
||||
Map<String, dynamic> _report() {
|
||||
final DateTime now = DateTime.now();
|
||||
@@ -421,13 +432,27 @@ class MockComms implements ConnectComms {
|
||||
'Health': 0.79,
|
||||
},
|
||||
'completionByWeekday': {
|
||||
'1': 0.9, '2': 0.8, '3': 0.75, '4': 0.45, '5': 0.7, '6': 0.6, '7': 0.85,
|
||||
'1': 0.9,
|
||||
'2': 0.8,
|
||||
'3': 0.75,
|
||||
'4': 0.45,
|
||||
'5': 0.7,
|
||||
'6': 0.6,
|
||||
'7': 0.85,
|
||||
},
|
||||
'worstHour': 19,
|
||||
'debtTrend': <double>[8, 9.5, 11, 10.2, 7.4, 6.8, 5.9],
|
||||
'deferralLeaderboard': <Map<String, dynamic>>[
|
||||
{'commitmentId': 'c-email', 'title': 'Email supervisor the outline', 'count': 2},
|
||||
{'commitmentId': 'c-kitchen', 'title': 'Deep clean the kitchen', 'count': 1},
|
||||
{
|
||||
'commitmentId': 'c-email',
|
||||
'title': 'Email supervisor the outline',
|
||||
'count': 2
|
||||
},
|
||||
{
|
||||
'commitmentId': 'c-kitchen',
|
||||
'title': 'Deep clean the kitchen',
|
||||
'count': 1
|
||||
},
|
||||
],
|
||||
'excuseTaxonomy': <dynamic>[],
|
||||
'estimationAccuracy': {'Deep work': 1.6, 'Admin': 1.1},
|
||||
@@ -451,32 +476,42 @@ class MockComms implements ConnectComms {
|
||||
// ── Groups ────────────────────────────────────────────────────────────────
|
||||
|
||||
@override
|
||||
Future<Response> getMyGroups(HistoryRequest request) => _ok(MockGroups.mine());
|
||||
Future<Response> getMyGroups(HistoryRequest request) =>
|
||||
_ok(MockGroups.mine());
|
||||
|
||||
@override
|
||||
Future<Response> getGroupEntry(IdRequest request) => _ok(MockGroups.one(request.id));
|
||||
Future<Response> getGroupEntry(IdRequest request) =>
|
||||
_ok(MockGroups.one(request.id));
|
||||
|
||||
@override
|
||||
Future<Response> saveGroupEntry(GroupRequest request) => _ok(MockGroups.save(request));
|
||||
Future<Response> saveGroupEntry(GroupRequest request) =>
|
||||
_ok(MockGroups.save(request));
|
||||
|
||||
@override
|
||||
Future<Response> joinGroupEntry(JoinGroupRequest request) => _ok(MockGroups.join(request));
|
||||
Future<Response> joinGroupEntry(JoinGroupRequest request) =>
|
||||
_ok(MockGroups.join(request));
|
||||
|
||||
@override
|
||||
Future<Response> leaveGroupEntry(IdRequest request) => _ok(MockGroups.leave(request.id));
|
||||
Future<Response> leaveGroupEntry(IdRequest request) =>
|
||||
_ok(MockGroups.leave(request.id));
|
||||
|
||||
@override
|
||||
Future<Response> saveGroupGoalEntry(GroupGoalRequest request) => _ok(MockGroups.saveGoal(request));
|
||||
Future<Response> saveGroupGoalEntry(GroupGoalRequest request) =>
|
||||
_ok(MockGroups.saveGoal(request));
|
||||
|
||||
@override
|
||||
Future<Response> logObjectiveProgress(ObjectiveProgressRequest request) => _ok(MockGroups.logProgress(request));
|
||||
Future<Response> logObjectiveProgress(ObjectiveProgressRequest request) =>
|
||||
_ok(MockGroups.logProgress(request));
|
||||
|
||||
@override
|
||||
Future<Response> getGroupMessages(IdRequest request) => _ok(MockGroups.messages(request.id));
|
||||
Future<Response> getGroupMessages(IdRequest request) =>
|
||||
_ok(MockGroups.messages(request.id));
|
||||
|
||||
@override
|
||||
Future<Response> sendGroupMessage(GroupMessageRequest request) => _ok(MockGroups.send(request));
|
||||
Future<Response> sendGroupMessage(GroupMessageRequest request) =>
|
||||
_ok(MockGroups.send(request));
|
||||
|
||||
@override
|
||||
Future<Response> nudgeGroupMember(NudgeRequest request) => _ok(MockGroups.nudge(request));
|
||||
Future<Response> nudgeGroupMember(NudgeRequest request) =>
|
||||
_ok(MockGroups.nudge(request));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user