Android Repository - Feature Inventory¶
Repository: Psyter Android Client
Analysis Date: November 6, 2025
Version: 2.0.15 (Build 50)
Analyst: Development Team
Table of Contents¶
- Executive Summary
- Feature Matrix
- Detailed Feature Analysis
- Dependency Inventory
- Technical Debt Register
- Incomplete Features Assessment
- Feature Prioritization
Executive Summary¶
Feature Statistics¶
- Total Features: 28 major features
- Fully Implemented: 23 (82%)
- Partially Implemented: 4 (14%)
- Incomplete/Disabled: 1 (4%)
- Total Dependencies: 73 libraries
- Outdated Dependencies: 18 (25%)
- TODO Comments: 100+ (mostly auto-generated stubs)
- Technical Debt Items: 25+ significant issues
Implementation Status¶
✅ Fully Implemented: ████████████████░░░░ 82%
⚠️ Partially Implemented: ███░░░░░░░░░░░░░░░░░ 14%
❌ Incomplete: █░░░░░░░░░░░░░░░░░░░░░ 4%
Critical Findings¶
- Core features operational - Authentication, booking, video calls working
- Security vulnerabilities - Hardcoded credentials, unencrypted storage
- Outdated dependencies - 18 libraries need updates (security risk)
- Technical debt - Large classes, god objects, tight coupling
- Legacy code - CareProvider features in Client app (confusion)
Feature Matrix¶
| # | Feature | Status | Implementation % | Priority | Risk |
|---|---|---|---|---|---|
| Authentication & Onboarding | |||||
| 1 | Email/Phone Login | ✅ Complete | 100% | Critical | Medium |
| 2 | Google Sign-In | ✅ Complete | 100% | High | Low |
| 3 | Apple Sign-In | ✅ Complete | 100% | High | Low |
| 4 | Registration (Multi-step) | ✅ Complete | 100% | Critical | Medium |
| 5 | Password Recovery | ✅ Complete | 100% | High | Low |
| 6 | Onboarding Slides | ✅ Complete | 100% | Medium | Low |
| 7 | Screening Questionnaire | ✅ Complete | 100% | Critical | Low |
| Provider Discovery & Booking | |||||
| 8 | Search Providers | ✅ Complete | 100% | Critical | Low |
| 9 | Filter Providers | ⚠️ Partial | 80% | High | Medium |
| 10 | View Provider Profile | ✅ Complete | 100% | Critical | Low |
| 11 | Calendar Availability | ✅ Complete | 100% | Critical | Medium |
| 12 | Time Slot Selection | ✅ Complete | 100% | Critical | Low |
| 13 | Appointment Booking | ✅ Complete | 100% | Critical | High |
| Payments | |||||
| 14 | Payment Gateway Integration | ✅ Complete | 100% | Critical | High |
| 15 | Wallet System | ⚠️ Partial | 75% | High | Medium |
| 16 | Promo Codes | ⚠️ Partial | 60% | Low | Low |
| Video Calls (Telemedicine) | |||||
| 17 | WebRTC Video Calls | ✅ Complete | 95% | Critical | High |
| 18 | Incoming Call Notifications | ✅ Complete | 100% | Critical | Medium |
| 19 | Call Controls (Mute, Camera) | ✅ Complete | 100% | Critical | Low |
| 20 | WebSocket Signaling | ✅ Complete | 100% | Critical | High |
| Client Features | |||||
| 21 | Mental Health Diary | ✅ Complete | 100% | High | Low |
| 22 | Homework Assignments | ✅ Complete | 100% | High | Low |
| 23 | Questionnaires | ✅ Complete | 100% | High | Low |
| 24 | Referrals Management | ✅ Complete | 90% | Medium | Low |
| 25 | Medical Resources/Blogs | ✅ Complete | 100% | Low | Low |
| Notifications & Chat | |||||
| 26 | Push Notifications (FCM) | ✅ Complete | 100% | Critical | Medium |
| 27 | Chat/Messaging | ⚠️ Partial | 50% | Medium | Medium |
| Settings & Profile | |||||
| 28 | User Profile Management | ✅ Complete | 100% | High | Low |
| 29 | Language Switching (EN/AR) | ✅ Complete | 100% | High | Low |
| 30 | App Settings | ✅ Complete | 95% | Medium | Low |
Legend:
- ✅ Complete: Feature fully functional with no known issues
- ⚠️ Partial: Feature working but incomplete or has limitations
- ❌ Incomplete: Feature started but not functional
Detailed Feature Analysis¶
1. Authentication & Onboarding¶
1.1 Email/Phone Login ✅¶
Status: Fully Implemented
Location: LoginActivity.java (~980 lines)
Functionality:
- ✅ Email-based authentication
- ✅ Phone number authentication
- ✅ Password validation
- ✅ “Remember Me” functionality
- ✅ FCM token registration
- ✅ RTL support for Arabic
API Endpoints:
POST /Authenticate
Body: { Username, Password, DeviceId, DeviceType, FcmToken }
Security Issues:
- ⚠️ Password stored in plain text (MySharedPreferences)
- ⚠️ No password complexity requirements enforced
- ⚠️ No rate limiting on failed attempts (client-side)
Technical Debt:
- Large activity (980 lines) - should split
- Mixed UI and business logic
- No ViewModel (state management issues)
1.2 Google Sign-In ✅¶
Status: Fully Implemented
Location: LoginActivity.java
Functionality:
- ✅ Google OAuth2 integration
- ✅ Firebase Auth with Google
- ✅ ActivityResultLauncher pattern (modern approach)
- ✅ Error handling
Dependencies:
implementation 'com.google.android.gms:play-services-auth:20.4.0'
implementation 'com.google.firebase:firebase-auth:22.1.1'
Issues:
- ⚠️ Firebase Auth version (22.1.1) - Latest is 23.0.0
- ⚠️ No token validation on backend
1.3 Apple Sign-In ✅¶
Status: Fully Implemented
Location: LoginActivity.java
Functionality:
- ✅ Apple OAuth2 integration
- ✅ Callback handling
- ✅ User info extraction
Notes:
- Minimal documentation
- Testing requires iOS device (cross-platform testing)
1.4 Registration (Multi-step) ✅¶
Status: Fully Implemented
Location: RegisterActivity.java, RegisterNumberOrEmail, RegisterVerification, RegisterVerificationConfirm, RegisterBasicInfo
Flow:
Step 1: RegisterNumberOrEmail - Enter email or phone
Step 2: RegisterVerification - Receive OTP
Step 3: RegisterVerificationConfirm - Confirm OTP
Step 4: RegisterBasicInfo - Enter personal info
Step 5: QuestionaireActivity - Screening assessment
Functionality:
- ✅ Multi-step wizard with ViewPager
- ✅ OTP verification
- ✅ Form validation
- ✅ Progress indicator
- ✅ Back navigation
Issues:
- ⚠️ OTP timeout not clearly shown
- ⚠️ No offline capability (network required for each step)
- ⚠️ Large fragments (RegisterBasicInfo ~664 lines)
User Experience Issues:
- Long registration process (5 steps)
- No progress saving (starts over if app crashes)
- Screening questionnaire takes 10-15 minutes
Recommended Improvements:
- Implement progress saving to SharedPreferences
- Add “Skip for now” option for screening
- Reduce required fields in Step 4
1.5 Password Recovery ✅¶
Status: Fully Implemented
Location: ForgotPasswordActivity.java, ResetPasswordActivity.java
Functionality:
- ✅ Email-based password reset
- ✅ OTP verification
- ✅ New password entry
- ✅ Password strength meter (using nu.aaro.gustav:passwordstrengthmeter:0.4)
API Endpoints:
POST /ForgotPassword
POST /ResetPassword
1.6 Onboarding Slides ✅¶
Status: Fully Implemented
Location: OnboardingActivity.java, OnboardingFragmentA/B/C
Functionality:
- ✅ 3 slides introducing app features
- ✅ ViewPager with page indicators
- ✅ Skip option
- ✅ First launch detection
Technical Implementation:
// Fragments in ViewPager
OnboardingFragmentA - Welcome & Introduction
OnboardingFragmentB - Features overview
OnboardingFragmentC - Get started CTA
2. Provider Discovery & Booking¶
2.1 Search Providers ✅¶
Status: Fully Implemented
Location: FindCPFragment.java (~800 lines), CarePListActivity.java (~600 lines)
Functionality:
- ✅ Text search by provider name
- ✅ Category filter (Psychologist, Psychiatrist, etc.)
- ✅ Specialty filter
- ✅ Language filter
- ✅ Gender filter
- ✅ Rating display
- ✅ Price display
- ✅ Availability indicator
API Endpoints:
GET /ServiceProvider/GetServiceProviderListByCatalogueFilter
Query params: searchText, categoryId, specialtyId, languageId, gender, minPrice, maxPrice
UI Components:
- RecyclerView with CarePListAdapter
- Pull-to-refresh (SwipeRefreshLayout)
- Grid/List view toggle
Issues:
- ⚠️ No pagination (loads all providers at once - performance issue)
- ⚠️ No loading indicator during search
- ⚠️ Search triggers on every character (no debounce)
Recommended Improvements:
- Implement pagination (20 items per page)
- Add search debounce (500ms delay)
- Cache search results
2.2 Filter Providers ⚠️¶
Status: Partially Implemented (80%)
Location: CarePListingFiltersActivity.java
Working Filters:
- ✅ Category (Dropdown)
- ✅ Specialty (Multi-select)
- ✅ Language (Multi-select)
- ✅ Gender (Radio buttons)
- ✅ Price Range (RangeSeekBar)
Missing/Incomplete Filters:
- ❌ Distance/Location filter (UI exists but not functional)
- ❌ Availability filter (next 7 days, next month, etc.)
- ⚠️ Experience years (UI exists but no API support)
Technical Debt:
- Filter state not persisted (resets on back navigation)
- No “Clear All” button
- No active filter count indicator
Recommended Improvements:
- Persist filter state to SharedPreferences
- Implement distance filter (requires location permission)
- Add active filter badge
2.3 View Provider Profile ✅¶
Status: Fully Implemented
Location: CarePDetailActivity.java (~900 lines)
Information Displayed:
- ✅ Profile photo
- ✅ Name, title, specialty
- ✅ Rating and reviews count
- ✅ Languages spoken
- ✅ Education & certifications
- ✅ Experience
- ✅ Session price
- ✅ About/Bio
- ✅ Video introduction
- ✅ Availability calendar preview
Actions:
- ✅ Book Appointment button
- ✅ Rate Provider button (post-session only)
- ✅ Share Profile
- ✅ Add to Favorites (My Providers)
Issues:
- ⚠️ Large activity (900 lines) - complex layout
- ⚠️ Video player initialization slow
- ⚠️ No offline caching of profile data
2.4 Calendar Availability ✅¶
Status: Fully Implemented
Location: MonthViewClient.java, CalendarClientView.java
Functionality:
- ✅ Month view calendar
- ✅ Available dates highlighted (green)
- ✅ Unavailable dates grayed out
- ✅ Selected date highlighted
- ✅ Date selection
API Endpoints:
POST /ServiceProvider/GetServiceProviderAvailableDates
Body: { ServiceProviderId, StartDate, EndDate }
Technical Details:
- Custom calendar view (CalendarCustomView.java - 2200 lines!)
- Date calculation logic
- Timezone handling
Issues:
- ⚠️ Custom calendar view is massive (2200 lines)
- ⚠️ Performance issues with date calculations
- ⚠️ No caching of availability data
Recommended Refactoring:
- Use Material Date Picker (MaterialDatePicker)
- Or use CalendarView from AndroidX
- Split CalendarCustomView into smaller components
2.5 Time Slot Selection ✅¶
Status: Fully Implemented
Location: SelectSlotActivity.java
Functionality:
- ✅ Grid view of available time slots
- ✅ Selected slot highlighting
- ✅ Duration display (30min, 60min, etc.)
- ✅ Price display per slot
- ✅ Real-time availability checking
API Endpoints:
POST /Scheduling/GetAvailableSlots
Body: { ServiceProviderId, Date, SessionDuration }
UI Components:
- GridView with SlotsGridAdapter
- 15-minute slot intervals
- Color coding (green = available, gray = booked)
2.6 Appointment Booking ✅¶
Status: Fully Implemented
Location: SlotPaymentSuggestActivity.java, Payment flow
Functionality:
- ✅ Booking confirmation screen
- ✅ Provider info summary
- ✅ Date & time display
- ✅ Price breakdown
- ✅ Payment method selection (Wallet or Card)
- ✅ Terms & conditions acceptance
Payment Options:
1. Wallet - If sufficient balance, direct booking
2. Card - Opens PaymentWebActivity (WebView with STS Payment gateway)
API Endpoints:
POST /Scheduling/ReserveSlot (holds slot for 10 minutes)
POST /Payment/InsertPayForData (processes payment)
POST /Scheduling/ConfirmBooking (finalizes booking)
Issues:
- ⚠️ No payment retry mechanism
- ⚠️ Slot reservation timeout not clearly communicated (10 min)
- ⚠️ No booking confirmation email/SMS sent from app
- ⚠️ Payment WebView can be clunky
Critical Security Issue:
- ⚠️ Payment data passed via URL query string (potential leakage)
Recommended Improvements:
- Implement payment retry
- Show countdown timer for reservation (10 minutes)
- Send confirmation notification
- Use native payment SDK instead of WebView
3. Payments¶
3.1 Payment Gateway Integration ✅¶
Status: Fully Implemented
Location: PaymentWebActivity.java
Provider: STS Payment (Saudi payment gateway)
Functionality:
- ✅ WebView-based payment
- ✅ Success/Failure callback handling
- ✅ Transaction ID capture
- ✅ Error handling
Payment URL:
https://dev2.innotech-sa.com/Psyter/Master/Web/Client/BookingPaymentFromMobile?dataString={encrypted_data}
Issues:
- ⚠️ Payment gateway URL hardcoded (Utils.BaseURLPayment)
- ⚠️ No support for multiple payment gateways
- ⚠️ WebView approach (not native SDK)
- ⚠️ Data passed via URL (security concern)
Recommended Improvements:
- Use native payment SDK (HyperPay, Moyasar, etc.)
- Implement payment tokenization
- Add 3D Secure verification
3.2 Wallet System ⚠️¶
Status: Partially Implemented (75%)
Location: Wallet fragments, Payment activities
Functionality:
- ✅ View wallet balance
- ✅ Add funds to wallet (via payment gateway)
- ✅ Use wallet for booking payments
- ⚠️ Wallet transaction history (limited)
- ❌ Wallet-to-wallet transfers (not implemented)
- ❌ Wallet refund processing (manual backend process)
API Endpoints:
GET /Wallet/GetBalance
POST /Wallet/AddFunds
POST /Wallet/DeductAmount
Issues:
- No transaction filtering (date range, type)
- No export transaction history
- Refunds require contacting support
Recommended Improvements:
- Full transaction history with filters
- Automatic refund processing
- Wallet withdrawal option
3.3 Promo Codes ⚠️¶
Status: Partially Implemented (60%)
Location: PromoCodeFragment.java, Booking flow
Functionality:
- ✅ Enter promo code during booking
- ✅ Validate promo code
- ✅ Apply discount
- ⚠️ View available promo codes (UI only, no API)
- ❌ Promo code expiration not checked on client
- ❌ No usage limit enforcement
API Endpoints:
POST /PromoCode/ValidatePromoCode
Body: { PromoCode, UserId, Amount }
Issues:
- Promo code list UI exists but not connected to API
- No notification of new promo codes
- No promo code history
4. Video Calls (Telemedicine)¶
4.1 WebRTC Video Calls ✅¶
Status: Fully Implemented (95%)
Location: CollaborationMain.java (~3000 lines!), ManagePresenceeClient.java (~1500 lines)
Functionality:
- ✅ Peer-to-peer video calling
- ✅ Audio streaming
- ✅ Camera switching (front/back)
- ✅ Mute/unmute microphone
- ✅ Enable/disable camera
- ✅ Speaker on/off
- ✅ Call timer
- ✅ Network quality indicator (partial)
- ✅ Call recording (provider side - not in client app)
WebRTC Configuration:
// ICE Servers
STUN: stun:stun.l.google.com:19302
TURN: (if configured on backend)
// Signaling
WebSocket: wss://server:3333/
Protocol: Custom signaling messages
Signaling Messages:
- C_CREATE_COLLABORATION - Initiate call
- C_SDP - SDP Offer/Answer exchange
- C_ICECANDIDATE - ICE candidate exchange
- C_END_COLLABORATION - End call
- C_LEAVE_COLLABORATION - Leave call
Technical Implementation:
// Dependencies
implementation 'org.webrtc:google-webrtc:1.0.28513' // ⚠️ OUTDATED
// Components
- PeerConnectionFactory
- PeerConnection
- VideoCapturer (Camera2Capturer)
- AudioSource, VideoSource
- AudioTrack, VideoTrack
- SurfaceViewRenderer (Local & Remote video)
- EglBase (OpenGL context)
Critical Issues:
- ⚠️ WebRTC version OUTDATED (1.0.28513 from 2019)
Latest version: 1.0.32006 (2022)
- ⚠️ No automatic reconnection if network drops
- ⚠️ No call quality metrics (packet loss, bitrate, etc.)
- ⚠️ Memory leaks - PeerConnection not properly disposed
- ⚠️ God object - CollaborationMain is 3000 lines
Security Concerns:
- No end-to-end encryption verification UI
- No call permission verification
- No call recording consent UI
Recommended Improvements:
1. Update WebRTC library (CRITICAL)
implementation 'org.webrtc:google-webrtc:1.0.32006'
2. Refactor CollaborationMain - Split into smaller classes
3. Implement automatic reconnection - Network drop handling
4. Add call quality monitoring - Display metrics
5. Fix memory leaks - Proper cleanup in onDestroy()
4.2 Incoming Call Notifications ✅¶
Status: Fully Implemented
Location: IncomingCall.java, MyFirebaseMessagingService.java
Functionality:
- ✅ FCM push notification for incoming calls
- ✅ Full-screen incoming call activity
- ✅ Ringtone playback
- ✅ Vibration
- ✅ Accept/Reject buttons
- ✅ Caller information display
Notification Payload:
{
"notification_type": "incoming_call",
"collaboration_id": "12345",
"caller_name": "Dr. John Smith",
"caller_image": "https://..."
}
Issues:
- ⚠️ Ringtone doesn’t stop if notification dismissed
- ⚠️ No “Call Busy” response
- ⚠️ Android 10+ full-screen notification issues
Recommended Fixes:
- Proper ringtone lifecycle management
- Add “Busy” option
- Implement ConnectionService API for Android 10+
4.3 Call Controls ✅¶
Status: Fully Implemented
Location: CollaborationMain.java
Controls:
- ✅ Mute/Unmute microphone
- ✅ Enable/Disable camera
- ✅ Switch camera (front/back)
- ✅ Speaker on/off
- ✅ End call
- ⚠️ Screen sharing (not implemented)
- ⚠️ Chat during call (not implemented)
UI:
- Bottom sheet with control buttons
- Icons with state indication
- Floating action buttons
4.4 WebSocket Signaling ✅¶
Status: Fully Implemented
Location: ManagePresenceeClient.java (~1500 lines)
Functionality:
- ✅ WebSocket connection management
- ✅ Authentication
- ✅ Presence status (Online/Offline/Busy)
- ✅ Signaling message exchange
- ✅ Reconnection logic
- ✅ Heartbeat (ping/pong)
Dependencies:
implementation 'com.neovisionaries:nv-websocket-client:2.3' // ⚠️ Last updated 2016
Recommended Update:
- Consider migrating to OkHttp WebSocket (more actively maintained)
- Or use Socket.IO client
Issues:
- ⚠️ Library not maintained since 2016
- ⚠️ No automatic reconnection on network change
- ⚠️ Large class (1500 lines) - should split
5. Client Features¶
5.1 Mental Health Diary ✅¶
Status: Fully Implemented
Location: MyDiaryFragment.java, AddUpdateDiaryActivity.java
Functionality:
- ✅ Create diary entries
- ✅ View diary history
- ✅ Edit existing entries
- ✅ Delete entries
- ✅ Mood tracking (Happy, Sad, Anxious, etc.)
- ✅ Date/time stamp
- ✅ Privacy (only user can see)
API Endpoints:
GET /Diary/GetClientDiaries
POST /Diary/AddDiaryEntry
PUT /Diary/UpdateDiaryEntry
DELETE /Diary/DeleteDiaryEntry
UI Components:
- RecyclerView with DiaryAdapter
- Floating Action Button (Add entry)
- Mood selection with icons
Enhancement Opportunities:
- Add rich text formatting
- Add photo attachments
- Add diary insights (mood trends)
- Export diary to PDF
5.2 Homework Assignments ✅¶
Status: Fully Implemented
Location: MyHomeWorkFragment.java, HomeWrokSubmitActivity.java
Functionality:
- ✅ View assigned homework
- ✅ Download homework files (PDF, images)
- ✅ Submit homework (text + file upload)
- ✅ View provider feedback
- ✅ Due date tracking
- ✅ Completion status
API Endpoints:
GET /Homework/GetClientHomeworks
POST /Homework/SubmitHomework
GET /Homework/GetHomeworkFeedback
File Handling:
- PDF viewer (AndroidPdfViewer library)
- Image viewer (Glide/Picasso)
- File picker for submissions
Issues:
- ⚠️ No offline capability (requires network to view)
- ⚠️ File size limit not enforced on client
- ⚠️ No notification for new homework
5.3 Questionnaires ✅¶
Status: Fully Implemented
Location: MyQyestionaireFragment.java (~1500 lines), QuestionnaireFragment.java, QuestionaireActivity.java
Functionality:
- ✅ View assigned questionnaires
- ✅ Multiple question types (MCQ, Text, Scale, Yes/No)
- ✅ Progress tracking
- ✅ Submit responses
- ✅ View results/scores
- ✅ Mandatory questionnaire screening during registration
Question Types:
- Single choice (Radio buttons)
- Multiple choice (Checkboxes)
- Text input
- Rating scale (1-10)
- Yes/No
API Endpoints:
GET /Questionnaire/GetClientQuestionnaires
GET /Questionnaire/GetQuestionnaireQuestions
POST /Questionnaire/SubmitQuestionnaireResponses
Issues:
- ⚠️ Typo in file name (MyQyestionaireFragment should be MyQuestionnaireFragment)
- ⚠️ Large fragment (1500 lines) - complex UI
- ⚠️ No save draft functionality (starts over if app closes)
Recommended Improvements:
- Fix typo in file name
- Implement draft saving
- Add progress bar within questionnaire
- Break down large fragment
5.4 Referrals Management ✅¶
Status: Fully Implemented (90%)
Location: ReferralsFragment.java, ReferralActivity.java
Functionality:
- ✅ View received referrals
- ✅ Referral details (referring provider, reason, notes)
- ✅ Accept/Decline referral
- ✅ Book appointment with referred provider
API Endpoints:
GET /Referral/GetClientReferrals
POST /Referral/AcceptReferral
POST /Referral/DeclineReferral
Issues:
- ⚠️ No notification for new referrals
- ⚠️ No referral history (only active referrals shown)
5.5 Medical Resources/Blogs ✅¶
Status: Fully Implemented
Location: BlogsActivity.java, BlogDetailsActivity.java
Functionality:
- ✅ View educational blog posts
- ✅ Categories (Anxiety, Depression, Stress, etc.)
- ✅ Search blogs
- ✅ Blog details with rich content
- ✅ Share blog
- ✅ External links to medical sources
API Endpoints:
GET /Blog/GetBlogs
GET /Blog/GetBlogDetails/{id}
UI Components:
- RecyclerView with BlogAdapter
- WebView for blog content (HTML)
Enhancement Opportunities:
- Add bookmark/favorite blogs
- Add reading progress tracking
- Add related blogs suggestions
6. Notifications & Chat¶
6.1 Push Notifications (FCM) ✅¶
Status: Fully Implemented
Location: MyFirebaseMessagingService.java, MyFirebaseInstanceIdService.java
Notification Types:
- ✅ Incoming call
- ✅ Appointment reminder (1 hour before, 24 hours before)
- ✅ Appointment cancellation
- ✅ New homework assigned
- ✅ New questionnaire assigned
- ✅ Provider response
- ✅ Payment confirmation
- ✅ Referral received
Dependencies:
implementation 'com.google.firebase:firebase-messaging:15.0.0' // ⚠️ VERY OUTDATED
Latest Version: 23.4.0
Critical Issue:
- ⚠️ Firebase Messaging library is 8 major versions behind!
- Security vulnerabilities
- Missing features (notification channels, etc.)
Recommended Update:
implementation 'com.google.firebase:firebase-messaging:23.4.0'
6.2 Chat/Messaging ⚠️¶
Status: Partially Implemented (50%)
Location: ChatMainActivity.java, ConversationActivity.java
Implemented:
- ✅ View conversation list
- ✅ Send text messages
- ✅ Receive messages
- ✅ Typing indicator
- ⚠️ Message delivery status (partial)
Not Implemented:
- ❌ Image/File attachments
- ❌ Voice messages
- ❌ Read receipts
- ❌ Message search
- ❌ Push notifications for new messages
- ❌ Message persistence (no local DB)
Technical Details:
- WebSocket-based real-time messaging
- No message encryption
- No offline message queue
Recommended Improvements:
- Implement Room database for message persistence
- Add E2E encryption (Signal Protocol)
- Add file attachment support
- Implement push notifications for messages
7. Settings & Profile¶
7.1 User Profile Management ✅¶
Status: Fully Implemented
Location: MyProfileFragmentClient.java, Profile edit activities
Functionality:
- ✅ View profile information
- ✅ Edit personal info (Name, DOB, Gender, etc.)
- ✅ Update profile photo
- ✅ Change password
- ✅ Update contact info (Email, Phone)
- ✅ Manage allergies
- ✅ Medical history
API Endpoints:
GET /Client/GetProfile
PUT /Client/UpdateProfile
POST /Client/UploadProfileImage
PUT /Client/ChangePassword
Image Upload:
- Glide for image loading
- Image cropper for profile photo
- Image compression before upload
Issues:
- ⚠️ Image upload slow (no progress indicator)
- ⚠️ No image size validation
- ⚠️ Password change requires re-authentication (should log out)
7.2 Language Switching (EN/AR) ✅¶
Status: Fully Implemented
Location: LocaleUtils.java, LangHelper.java
Functionality:
- ✅ English and Arabic support
- ✅ RTL layout for Arabic
- ✅ Dynamic language switching (no app restart required)
- ✅ Language preference persisted
Technical Implementation:
// Language codes
"0" = English
"1" = Arabic
// RTL support
if (lang.equals("1")) {
// Apply RTL layout
configuration.setLayoutDirection(Locale("ar"));
}
String Resources:
- values/strings.xml (English)
- values-ar/strings.xml (Arabic)
Issues:
- ⚠️ Some strings not translated (hardcoded English)
- ⚠️ Date formatting not localized
- ⚠️ Number formatting not localized
7.3 App Settings ✅¶
Status: Fully Implemented (95%)
Location: Settings fragments, Preferences
Settings:
- ✅ Language selection
- ✅ Notification preferences
- ✅ Privacy settings
- ✅ Terms & Conditions
- ✅ Privacy Policy
- ✅ About app (version, contact)
- ✅ Logout
Notification Settings:
- ✅ Enable/disable push notifications
- ✅ Enable/disable email notifications
- ⚠️ Granular notification control (not fully implemented)
Issues:
- ⚠️ No in-app notification sound selection
- ⚠️ No data usage settings (Wi-Fi only mode)
Dependency Inventory¶
Core Dependencies (73 total)¶
| Category | Library | Current Version | Latest Version | Status | Risk |
|---|---|---|---|---|---|
| UI & Material Design | |||||
| 1 | androidx.appcompat | 1.1.0 | 1.6.1 | ⚠️ Outdated | Medium |
| 2 | material | 1.2.0-alpha06 | 1.11.0 | ⚠️ Outdated | Medium |
| 3 | constraintlayout | 1.1.3 | 2.1.4 | ⚠️ Outdated | Low |
| 4 | legacy-support-v4 | 1.0.0 | 1.0.0 | ✅ Current | Low |
| Networking | |||||
| 5 | android-networking | 1.0.2 | 1.0.2 | ⚠️ Archived | High |
| 6 | async-http | 1.4.9 | 1.4.11 | ⚠️ Outdated | Low |
| 7 | nv-websocket-client | 2.3 | 2.14 | ⚠️ Outdated | Medium |
| Image Loading | |||||
| 8 | glide | 4.10.0 | 4.16.0 | ⚠️ Outdated | Low |
| 9 | picasso | 2.4.0 | 2.8 | ⚠️ Outdated | Low |
| 10 | circleimageview | 2.1.0 | 3.1.0 | ⚠️ Outdated | Low |
| WebRTC & Communication | |||||
| 11 | google-webrtc | 1.0.28513 | 1.0.32006 | ⚠️ CRITICAL | Critical |
| Firebase | |||||
| 12 | firebase-messaging | 15.0.0 | 23.4.0 | ⚠️ CRITICAL | Critical |
| 13 | firebase-auth | 22.1.1 | 23.0.0 | ⚠️ Minor | Low |
| 14 | firebase-crashlytics | 18.4.1 | 18.6.1 | ⚠️ Minor | Low |
| 15 | firebase-analytics | 21.3.0 | 21.5.0 | ⚠️ Minor | Low |
| Google Services | |||||
| 16 | play-services-auth | 20.4.0 | 21.0.0 | ⚠️ Minor | Low |
| JSON & Data | |||||
| 17 | gson | 2.8.5 | 2.10.1 | ⚠️ Outdated | Low |
| PDF & Documents | |||||
| 18 | android-pdf-viewer | 2.8.2 | 3.2.0-beta.1 | ⚠️ Outdated | Low |
| UI Components | |||||
| 19 | duo-navigation-drawer | Local | N/A | ✅ Custom | Low |
| 20 | slidetoact | 0.7.0 | 0.10.0 | ⚠️ Outdated | Low |
| 21 | OtpView | v1.1.2 | v1.1.2 | ✅ Current | Low |
| 22 | password-strength-meter | 0.4 | 0.4 | ⚠️ Archived | Low |
| WorkManager | |||||
| 23 | work-runtime-ktx | 2.7.0 | 2.9.0 | ⚠️ Minor | Low |
Deprecated/Archived Libraries (Require Replacement)¶
| Library | Status | Recommendation |
|---|---|---|
| android-networking (1.0.2) | ⚠️ Archived (2018) | Migrate to Retrofit + OkHttp |
| nv-websocket-client (2.3) | ⚠️ Not maintained | Migrate to OkHttp WebSocket |
| picasso (2.4.0) | ⚠️ Very old | Standardize on Glide only |
| password-strength-meter (0.4) | ⚠️ Archived | Implement custom or use Passay |
Critical Updates Required¶
1. WebRTC (CRITICAL)¶
Current: 1.0.28513 (2019)
Latest: 1.0.32006 (2022)
Issues:
- Security vulnerabilities
- Missing performance improvements
- Compatibility issues with newer Android versions
Update Command:
// implementation 'org.webrtc:google-webrtc:1.0.28513'
implementation 'org.webrtc:google-webrtc:1.0.32006'
Testing Required:
- Video call functionality
- Audio quality
- Camera switching
- Network recovery
2. Firebase Messaging (CRITICAL)¶
Current: 15.0.0 (2018)
Latest: 23.4.0 (2024)
Issues:
- Missing notification channels (Android 8+)
- No notification importance levels
- Security vulnerabilities
- Deprecated APIs
Update Command:
// implementation 'com.google.firebase:firebase-messaging:15.0.0'
implementation 'com.google.firebase:firebase-messaging:23.4.0'
API Changes:
- onMessageReceived() signature changed
- FirebaseInstanceId deprecated (use FirebaseMessaging.getToken())
- Notification channel creation required
3. AndroidNetworking → Retrofit Migration (HIGH PRIORITY)¶
Current: android-networking 1.0.2 (archived)
Recommended: Retrofit 2.9.0 + OkHttp 4.12.0
Reason:
- android-networking not maintained since 2018
- Missing modern features (coroutines, Flow, etc.)
- Security vulnerabilities
- No Kotlin support
Migration Steps:
1. Add Retrofit dependencies
2. Create API interfaces
3. Replace AndroidNetworking calls (100+ calls)
4. Test all network operations
Dependency Update Summary¶
Total Libraries: 73
Up-to-date: 12 (16%)
Minor Updates: 43 (59%)
Major Updates: 16 (22%)
Archived/Deprecated: 2 (3%)
Recommended Update Priority:
1. CRITICAL (Do Now - 1 week):
- WebRTC (1.0.32006)
- Firebase Messaging (23.4.0)
-
HIGH (Do Next):
- AndroidNetworking → Retrofit migration
- WebSocket client upgrade
- Material Design (1.11.0)
- AndroidX libraries -
MEDIUM (Plan):
- Image loading libraries
- UI component libraries
- Minor dependency updates
Technical Debt Register¶
Critical Technical Debt (Do Now)¶
| ID | Issue | Location | Impact |
|---|---|---|---|
| TD-001 | Hardcoded credentials in source code | Utils.java | Security |
| TD-002 | Unencrypted password storage | MySharedPreferences.java | Security |
| TD-003 | WebRTC library outdated (1.0.28513) | build.gradle | Functionality |
| TD-004 | Firebase Messaging outdated (15.0.0) | build.gradle | Functionality |
| TD-005 | No SSL certificate pinning | Network layer | Security |
High Priority Technical Debt (Do Next)¶
| ID | Issue | Location | Impact |
|---|---|---|---|
| TD-006 | God object - Utils.java (2031 lines) | Stats/Utils.java | Maintainability |
| TD-007 | Large activity - CollaborationMain (3000 lines) | Collaboration/CollaborationMain.java | Maintainability |
| TD-008 | Large fragment - MyQyestionaireFragment (1500 lines) | Client/Fragments/MyQyestionaireFragment.java | Maintainability |
| TD-009 | Custom calendar view (2200 lines) | Stats/CalendarCustomView.java | Maintainability |
| TD-010 | AndroidNetworking library archived | Network layer | Maintainability |
| TD-011 | No pagination in provider list | FindCPFragment.java | Performance |
| TD-012 | Tight coupling to static Utils class | Throughout codebase | Testability |
| TD-013 | No dependency injection | Throughout codebase | Testability |
| TD-014 | Legacy CareProvider code in Client app | CareProvider/ package | Confusion |
| TD-015 | No unit tests | Test directory | Quality |
Medium Priority Technical Debt (Plan)¶
| ID | Issue | Location | Impact |
|---|---|---|---|
| TD-016 | No MVVM architecture | Throughout codebase | Maintainability |
| TD-017 | No Repository pattern | Data layer | Architecture |
| TD-018 | Mixed responsibilities in Activities | Throughout codebase | Maintainability |
| TD-019 | No offline data persistence (Room) | Data layer | UX |
| TD-020 | Inconsistent image loading libraries (Glide + Picasso) | Throughout codebase | Performance |
| TD-021 | No WebSocket reconnection on network change | ManagePresenceeClient.java | Reliability |
| TD-022 | Payment data in URL query string | PaymentWebActivity.java | Security |
| TD-023 | Typo in file names (Qyestionaire) | Multiple files | Code quality |
| TD-024 | No analytics events | Throughout codebase | Insights |
| TD-025 | No error tracking (Crashlytics not fully configured) | Throughout codebase | Debugging |
Technical Debt Summary¶
Total Items: 25
Critical: 5 items
High: 10 items
Medium: 10 items
Recommended Approach:
- Focus on Critical items first (security)
- Tackle High items in parallel with new features
- Plan Medium items for long-term refactoring
Incomplete Features Assessment¶
1. Chat/Messaging (50% Complete)¶
Current State: Basic text messaging works, but missing key features
What’s Missing:
- ❌ Image/File attachments
- ❌ Voice messages
- ❌ Read receipts
- ❌ Message search
- ❌ Push notifications for messages
- ❌ Message persistence (local database)
- ❌ Message encryption
Business Impact: Medium - Users expect full-featured chat
2. Provider Filters (80% Complete)¶
Current State: Most filters work, location filter incomplete
What’s Missing:
- ❌ Distance/Location filter
- ❌ Availability filter (next 7 days, etc.)
- ⚠️ Experience years filter (no API support)
Business Impact: Low - Core filtering works
3. Wallet System (75% Complete)¶
Current State: Basic wallet functionality works
What’s Missing:
- ❌ Wallet-to-wallet transfers
- ❌ Automatic refund processing
- ⚠️ Transaction history filtering
- ❌ Wallet withdrawal
Business Impact: Low - Core wallet functionality works
4. Promo Codes (60% Complete)¶
Current State: Apply promo code works, but management missing
What’s Missing:
- ❌ View available promo codes list
- ❌ Promo code notifications
- ❌ Promo code history
- ⚠️ Client-side validation (expiration, usage limit)
Business Impact: Low - Core promo functionality works
5. Video Call Features (95% Complete)¶
Current State: Video calls work, but missing advanced features
What’s Missing:
- ❌ Screen sharing
- ❌ Chat during call
- ⚠️ Network quality metrics display
- ⚠️ Automatic reconnection on network drop
- ❌ Call recording (client-side UI)
Business Impact: Low - Core video calling works well
Incomplete Features Summary¶
Total Incomplete Features: 5
Business Impact: Medium
Prioritization:
1. Chat/Messaging (High)
2. Video Call Enhancements (Medium)
3. Wallet System (Low)
4. Provider Filters (Low)
5. Promo Codes (Low)
Feature Prioritization¶
Must Have (Core Features - Already Implemented ✅)¶
- Authentication & Registration
- Provider Search & Booking
- Appointment Scheduling
- Payment Processing
- WebRTC Video Calls
- Push Notifications
- User Profile Management
Should Have (Enhance UX - Partially Implemented ⚠️)¶
- Full-featured Chat (50% complete)
- Wallet System enhancements (75% complete)
- Provider Filters completion (80% complete)
- Video call quality monitoring
- Diary insights & analytics
- Homework offline access
Could Have (Nice to Have - Not Started ❌)¶
- Screen sharing during calls
- Group video calls
- Appointment reschedule (currently cancel + rebook)
- Favorite providers
- Provider recommendations (AI)
- Mental health insights dashboard
- Integration with wearables (fitness trackers)
Won’t Have (Out of Scope)¶
- Provider-side features (separate app)
- Admin panel (web-based)
- Billing & invoicing (backend)
Recommendations¶
Immediate Actions (Do Now)¶
- ✅ Update WebRTC library (1.0.32006) - CRITICAL
- ✅ Update Firebase Messaging (23.4.0) - CRITICAL
- ✅ Implement EncryptedSharedPreferences - Security
- ✅ Move hardcoded credentials to secure storage
- ✅ Add SSL certificate pinning
Business Impact: Critical (Security & Stability)
Short-term Actions (Do Next)¶
- Refactor god objects (Utils.java, CollaborationMain.java)
- Migrate to Retrofit from AndroidNetworking
- Complete Chat/Messaging feature
- Implement pagination in provider list
- Add unit tests (at least 30% coverage)
- Remove legacy CareProvider code from Client app
Business Impact: High (Maintainability & UX)
Long-term Actions (Plan)¶
- Migrate to MVVM architecture
- Implement Room database for offline support
- Add dependency injection (Hilt)
- Complete incomplete features (Wallet, Filters, Promo Codes)
- Migrate to Kotlin (gradual migration)
- Implement CI/CD pipeline
- Add comprehensive testing (Unit + UI + Integration)
Business Impact: Medium (Long-term sustainability)
Conclusion¶
The Android client application is functionally complete for its core use case (telemedicine video consultations) with 82% of features fully implemented. However, it carries significant technical debt and security vulnerabilities that require immediate attention.
Key Strengths:
- ✅ Core features (auth, booking, video calls) work well
- ✅ Comprehensive feature set
- ✅ Bilingual support (EN/AR)
Key Weaknesses:
- ⚠️ Outdated dependencies (security risk)
- ⚠️ Poor code structure (god objects, large classes)
- ⚠️ Security vulnerabilities (hardcoded credentials, plain text passwords)
- ⚠️ Limited testability (no unit tests)
Recommended Approach:
- Phase 1: Security fixes
- Phase 2: Code quality & UX
- Phase 3: Architecture modernization
Document Version: 1.0
Last Updated: November 6, 2025
Next Review: After Phase 1 completion