import 'package:dialer/features/contacts/contact_state.dart'; import 'package:dialer/features/contacts/widgets/alphabet_scroll_page.dart'; import 'package:flutter/material.dart'; import 'package:dialer/widgets/loading_indicator.dart'; import 'package:flutter_contacts/flutter_contacts.dart'; const bool _privacyMode = bool.fromEnvironment('privacy-mode', defaultValue: false); List _maskContacts(List original) { if (!_privacyMode) return original; return original.map((c) { final maskedName = _maskName(c.displayName); final phones = c.phones.map((p) => Phone( _maskPhone(p.number), label: p.label, )).toList(); final masked = Contact() ..displayName = maskedName ..thumbnail = c.thumbnail ..phones = phones ..id = c.id; return masked; }).toList(); } String _maskName(String name) { final parts = name.split(' '); return parts.map((part) { if (part.length < 2) return part; return '${part[0]}${'*' * (part.length - 1)}'; }).join(' '); } String _maskPhone(String phone) { if (phone.length < 3) return phone; return phone.substring(0, 2) + '*' * (phone.length - 2); } class ContactPage extends StatefulWidget { const ContactPage({super.key}); @override _ContactPageState createState() => _ContactPageState(); } class _ContactPageState extends State { @override Widget build(BuildContext context) { final contactState = ContactState.of(context); return Scaffold( body: contactState.loading ? const LoadingIndicatorWidget() : AlphabetScrollPage( scrollOffset: contactState.scrollOffset, contacts: _maskContacts(contactState.contacts), ), ); } }