UbiApp is a cross-platform communication application designed to distribute telephone service in a help desk center, transfer VoIP calls to an attendant, and transcribe conversations so that AI systems can assist the attendant during the service. It performs sentiment analysis of calls and provides other assistance features. It was developed in C# using the Xamarin.Forms framework. The application offers VoIP (Voice over IP) telephony functionalities, messaging, dashboard, and social features, allowing users to communicate through voice calls, video conferences, and text messages.
2018-12-12 to 2019-09-11
- VoIP voice calls
- Video calls
- Text messaging
- Real-time chat
- Dashboard for data visualization
- Social features (user profiles)
- Support for multiple languages (including Arabic)
- Customizable themes
- C#: Main language for application development
- XAML: Used for user interface definition
- Xamarin.Forms: Framework for cross-platform development (iOS and Android)
- Xamarin.Android: Android-specific implementation
- Xamarin.iOS: iOS-specific implementation
- .NET Standard 2.0: Shared class library
- Liblinphone: C++ library for VoIP communication, integrated via Xamarin binding
- LinphoneXamarin: C# wrapper for the Liblinphone library
- Realm: Object-oriented NoSQL database for local storage
- Realm: Used for local data persistence
- Repository Pattern: Implemented for data access
- UXDivers.Grial: Framework for advanced UI components
- Xamarin.FFImageLoading: Library for efficient image loading and caching
- Microcharts: Library for data visualization in charts
- CarouselView.FormsPlugin: Component for carousel display
- Rg.Plugins.Popup: Library for displaying popups
- Xamanimation: Library for interface animations
- xUnit: Framework for unit tests
- Moq: Framework for creating mocks in tests
- Integration Tests: Implemented in the XUnitTestModelntegration.cs project
- Unit Tests: Implemented in the XUnitTestModel project
- MVVM (Model-View-ViewModel): Main architectural pattern
- Dependency Injection: Used for dependency injection
- Repository Pattern: For data access
- Factory Pattern: For object creation
- Observer Pattern: For notifications and events
- Ubi: Main project with business logic and shared UI
- Ubi.Droid: Android-specific implementation
- Ubi.iOS: iOS-specific implementation
- UbiModel: Shared data models
- Liblinphone: Binding of the Liblinphone library for Xamarin
- LinphoneXamarin: Shared code for integration with Liblinphone
- XUnitTestModel: Unit tests
- XUnitTestModelntegration.cs: Integration tests
-
VoIP Telephony
- Voice calls
- Video calls
- Call transfer
- Contact management
-
Messages
- Real-time chat
- Emoji support
- Notifications
-
Dashboard
- Data visualization
- Charts and statistics
-
Social
- User profiles
- Status updates
-
Onboarding
- Welcome screens
- Tutorial for new users
The application uses the Liblinphone library to implement VoIP functionalities, offering a high-quality call experience. Integration is done through a C# wrapper that facilitates the use of the native library.
The project follows the MVVM (Model-View-ViewModel) pattern, clearly separating business logic from the user interface, which facilitates maintenance and testing.
The application has a suite of unit and integration tests using xUnit and Moq, ensuring code quality and stability.
The application supports multiple languages, including Arabic, with integrated localization features.
The application offers various visual themes that can be changed by the user, including light and dark themes.
- Organization: The code is well organized in logical projects and namespaces
- Modularity: Components are modularized to facilitate maintenance
- Testability: The MVVM architecture and dependency injection facilitate testing
- Documentation: Comments and documentation in critical parts of the code
- Patterns: Consistent use of design patterns and best practices
- Some unit tests are incomplete (methods with NotImplementedException)
- Some parts of the code contain TODOs indicating features to be implemented
- Greater test coverage would be beneficial to ensure application stability
UbiApp is a robust and well-structured communication application, developed with modern technologies and following good development practices. The combination of Xamarin.Forms with the Liblinphone library allows creating a high-quality VoIP communication experience on multiple platforms.
The project demonstrates a well-thought-out architecture, with clear separation of responsibilities and use of appropriate design patterns. The inclusion of unit and integration tests indicates a commitment to code quality and application stability.