We can organize an interview with Aldin or any of our 25,000 available candidates within 48 hours. How would you like to proceed?
Schedule Interview NowMy name is Norayr M. and I have over 1 years of experience in the tech industry. I specialize in the following technologies: Android, Git, GitHub, Gradle, Android SDK, etc.. I hold a degree in Bachelor of Computer Science (BCompSc), Master of Computer Science (MSCS). Some of the notable projects I’ve worked on include: Articles, BiometricPromptManager, SwipeToDelete, PhoneContactsSearch, ComposePaging3Caching, etc.. I am based in Khanjyan, Armenia. I've successfully completed 6 projects while developing at Softaims.
I specialize in architecting and developing scalable, distributed systems that handle high demands and complex information flows. My focus is on building fault-tolerant infrastructure using modern cloud practices and modular patterns. I excel at diagnosing and resolving intricate concurrency and scaling issues across large platforms.
Collaboration is central to my success; I enjoy working with fellow technical experts and product managers to define clear technical roadmaps. This structured approach allows the team at Softaims to consistently deliver high-availability solutions that can easily adapt to exponential growth.
I maintain a proactive approach to security and performance, treating them as integral components of the design process, not as afterthoughts. My ultimate goal is to build the foundational technology that powers client success and innovation.
Main technologies
1 year
1 Year
1 Year
1 Year
Potentially possible
PicsArt
1. REST API Integration Data Fetching: The app makes asynchronous REST API calls to fetch room data from a remote server. Network Handling: Robust network error handling to manage connectivity issues and provide appropriate feedback to users. 2. Room Database Local Storage: Utilizes Room for local data storage, providing offline capabilities and ensuring the app works seamlessly even without an internet connection. Data Persistence: Ensures data persistence across app restarts, improving the user experience by retaining data locally. 3. Pagination Efficient Data Loading: Implements pagination to load data in chunks, reducing memory usage and improving performance. User Experience: Provides a smooth scrolling experience with loading indicators to inform users of ongoing data fetches. 4. Searching Search Functionality: Allows users to search for specific rooms using keywords, making it easy to find desired information quickly. Dynamic Filtering: Real-time search results updating as the user types, providing immediate feedback. 5. Main Screen Room List: Displays a list of rooms with essential information like room name, creating date, and so on. UI/UX Design: Designed using Jetpack Compose for a modern, responsive, and intuitive user interface. NavigableListDetailPaneScaffold: Utilizes NavigableListDetailPaneScaffold to provide an efficient and user-friendly way to navigate between the list of rooms and room details. 6. Detail Screen Room Details: Shows detailed information about a selected room, including images, description, and creating date. Interactive UI: Provides a detailed and interactive user interface for a better user experience. NavigableListDetailPaneScaffold: Uses NavigableListDetailPaneScaffold for seamless navigation back to the main screen or other rooms' details. 7. MVVM Architecture Separation of Concerns: Utilizes Model-View-ViewModel (MVVM) architecture to separate the UI from the business logic, improving code maintainability and testability. Reactive Programming: Uses Flow to observe data changes and update the UI reactively. 8. Koin for Dependency Injection Dependency Injection: Implements Koin for efficient and easy dependency injection, reducing boilerplate code and simplifying dependency management. Scalability: Enhances the app's scalability by managing dependencies centrally. 9. Error Handling Comprehensive Error Handling: Implements error handling at various levels (network, database, UI) to ensure a robust application. User Notifications: Provides user-friendly error messages and notifications to inform users about issues and actions to resolve them.
The Android BiometricPromptManager is a library/module designed to simplify the implementation of biometric authentication in Android apps using the BiometricPrompt API. Biometric authentication, such as fingerprint or face recognition, adds an extra layer of security to your app and enhances the user experience by providing a convenient way to access sensitive features securely. Features Biometric Authentication: Integrates with the BiometricPrompt API to authenticate users using their biometric data (fingerprint, face, etc.). Simple Integration: Provides a simple and easy-to-use interface for integrating biometric authentication into your app. Error Handling: Handles common errors and edge cases related to biometric authentication, such as device compatibility checks and fallback mechanisms. Customization: Allows customization of the biometric prompt UI, such as title, description, and authentication requirements. Compatibility: Supports backward compatibility for older Android versions using the androidx.biometric library. Architecture The BiometricPromptManager is built using a modular and reusable architecture to promote code maintainability and flexibility. It consists of the following components: BiometricPromptManager: The main entry point for developers to interact with the library. It provides methods for initiating biometric authentication and handling callbacks. BiometricCallback: An interface implemented by the client app to receive authentication success or failure callbacks. BiometricUtils: Helper methods for checking device compatibility, available biometric types, and other utility functions related to biometric authentication. BiometricPromptBuilder: A builder pattern implementation for configuring the biometric prompt UI, including title, description, and authentication requirements.
Our project aims to enhance user interaction in an Android application by implementing swipe-to-delete functionality using Jetpack Compose. The primary focus will be on integrating this feature with a LazyColumn, allowing users to swipe horizontally on items to reveal a delete action, providing a seamless and intuitive way to manage content within the list. Key Components: Jetpack Compose: Jetpack Compose is a modern toolkit for building native Android UIs. It enables us to create UI components declaratively, making UI development more efficient and flexible. We will leverage Jetpack Compose to build our user interface, including the LazyColumn with swipe-to-delete functionality. Swipe-to-Delete Gesture: Users will be able to swipe horizontally on individual items within the LazyColumn to trigger a delete action. This gesture-based interaction provides a natural and intuitive way for users to manage items within the list. LazyColumn: The LazyColumn is a composable that lazily lays out items as they become visible on the screen, providing efficient handling of large datasets. We will integrate swipe-to-delete functionality seamlessly with the LazyColumn, ensuring smooth scrolling and responsive UI performance. Features: Swipe-to-Delete Interaction: Users can swipe horizontally on items within the LazyColumn to reveal a delete action, allowing them to remove items from the list effortlessly. Animated Transitions: Smooth animated transitions will be implemented to provide visual feedback when swiping to delete an item, enhancing the overall user experience. Undo Functionality: Upon deleting an item, users will have the option to undo the action, restoring the deleted item back to its original position within the list. Customization Options: The swipe-to-delete feature will be customizable, allowing developers to adjust parameters such as swipe sensitivity, delete animation duration, and appearance of the delete action. Implementation Steps: UI Layout with Jetpack Compose: Design the user interface using Jetpack Compose, including the layout for the LazyColumn and individual item components. Swipe-to-Delete Gesture Handling: Implement gesture detection to recognize horizontal swipes on list items and reveal the delete action accordingly. Animated Transitions: Integrate animated transitions to smoothly animate the removal of items from the list when the delete action is triggered. Undo Functionality: Implement undo functionality to allow users to revert the delete action and restore deleted items back to the list. Conclusion: By implementing swipe-to-delete functionality with Jetpack Compose, our project aims to enhance user interaction and improve the usability of Android applications featuring lists or grids of content. This feature provides users with a convenient way to manage their data and ensures a more engaging user experience.
Our project focuses on developing a contact management application using Jetpack Compose. The application will allow users to grant permission to access their contacts, display the contacts in a visually appealing UI, and provide search functionality to easily find specific contacts. Jetpack Compose will be utilized to create a modern and efficient user interface, enhancing the user experience of managing contacts on Android devices. Key Components: Jetpack Compose UI Toolkit: Jetpack Compose will serve as the primary toolkit for building the user interface of the application. Compose enables the creation of UI components using a declarative approach, simplifying UI development and improving UI performance. Contact Permissions: The application will request permission from the user to access their contacts. Proper handling of permission requests and runtime permissions will be implemented to ensure compliance with Android's security model. Contact Display: Once permission is granted, the application will retrieve the user's contacts and display them in a list or grid format using Jetpack Compose components. Each contact will be represented with relevant information such as name, phone number, and profile picture. Search Functionality: The application will provide a search functionality allowing users to search for specific contacts by name or other attributes. Jetpack Compose will be used to implement the search feature, providing real-time filtering of contacts based on the user's input. Features: Permission Handling: Proper handling of contact permissions will be implemented to request and manage user consent for accessing contacts. Dynamic UI Rendering: Jetpack Compose will be used to dynamically render the contact list based on the user's contacts, providing a responsive and efficient UI. Searchable Contacts: Users will be able to search for contacts using a search bar, with results dynamically updating as the user types, facilitating quick and efficient contact retrieval. Contact Details: Tapping on a contact will display detailed information, including additional contact details and options for contacting the individual (e.g., call, message, email). Implementation Steps: Permission Request Handling: Implement logic to request contact permissions from the user and handle permission responses accordingly. Contact Retrieval: Utilize Android's ContactsContract API or other appropriate methods to retrieve the user's contacts upon permission grant. UI Design with Jetpack Compose: Design the user interface using Jetpack Compose, including layouts for displaying contacts and search functionality. Search Implementation: Implement search functionality using Jetpack Compose, allowing users to filter contacts based on search queries. Contact Details Screen: Create a screen to display detailed information about a selected contact, including options for communication (call, message, email). Conclusion: By leveraging Jetpack Compose, our project aims to develop a modern and user-friendly contact management application for Android devices. The application will provide seamless contact access, intuitive search functionality, and a visually appealing user interface, enhancing the overall user experience of managing contacts on mobile devices.
Introduction: Our project focuses on implementing a caching mechanism using the Room Persistence Library in an Android application. The goal is to store data retrieved from a remote data source locally in the device's database (Room), allowing the application to access this cached data when offline or when the network connection is unavailable. This approach ensures that users can still access relevant information even in offline scenarios, providing a seamless user experience. Key Components: Room Persistence Library: We will utilize the Room Persistence Library provided by Android to create and manage our local database. Room provides an abstraction layer over SQLite, making it easier to work with databases in Android applications. It offers features such as entities, DAOs (Data Access Objects), and database migrations, simplifying the process of storing and retrieving data. Caching Mechanism: When the application retrieves data from a remote data source (e.g., API), it will first check if there is an active internet connection. If the connection is available, the data will be fetched from the server and stored locally in the Room database. If the connection is unavailable, the application will fetch the data from the local database instead. Offline Access: Even when the application is offline or the internet connection is disabled, users will still be able to access the cached data stored in the Room database. This ensures that critical information remains accessible regardless of network conditions, enhancing the overall user experience. Features: Data Synchronization: The application will periodically synchronize data with the remote server when an internet connection is available, ensuring that the cached data remains up-to-date. Error Handling: In case of network errors or failed data retrieval attempts, the application will gracefully fallback to using the cached data stored in the local database, preventing disruptions to the user experience. Data Persistence: The locally cached data will persist across app sessions and device reboots, allowing users to access previously retrieved information without the need for an internet connection. Cache Expiry: To prevent stale data, the cached data stored in the Room database will be periodically updated or refreshed based on a predefined expiration policy, ensuring that users always have access to the latest available information. Conclusion: By implementing a caching mechanism using the Room Persistence Library, our project aims to provide users with seamless access to data even in offline scenarios. This approach enhances the reliability and usability of the application, ensuring that users can stay productive regardless of their network connectivity status.
Bachelor of Computer Science (BCompSc) in Computer science
2015-01-01-2019-01-01
Master of Computer Science (MSCS) in Computer science
2021-01-01-2023-01-01