Releases: fruzelee/my-wallet
v1.0
Salamun 'Alaik 👋, Welcome to My Wallet
A simple wallet application for the Android platform.
Wallet App
This is an Android application developed using Kotlin, Android SDK, Retrofit 2.x.x, Hilt DI, and
MVVM architecture. The app consists of two fragments - page1 and page2 - implemented using the
Android Navigation component. The app also features a username filter logic to ensure that users
input their username correctly, as well as balance input validation to avoid insufficient balance
errors.
Features
The following features were implemented in the Send Fund App:
Page1: Login
- Username filter logic: The app allows users to input their username using only letters (a-z),
numbers (0-9), full stop (.), and underscore (_). The username must be between 3 to 32 characters
long, and the user cannot input successive underscores or full stops. The app also converts any
uppercase letters to lowercase letters. - PIN input field: After the user inputs their username, the PIN input field is automatically
enabled
after waiting for 2 seconds from the user's last character input. - Continue button: The continue button is enabled only after the user inputs a valid username.
Page2: Send Fund
- Call "login" API: After a successful response from the login API, the app takes the user to page2.
- WalletAddress in Recipient card: The app sets the user's username (WalletAddress) on the recipient
card. - Max button: The app allows the user to click on the max button to set the balance amount.
- Balance USDC: The app shows the user's balance in USDC after deducting the input value. The input
value must be within the use case accuracy. - Insufficient balance: If the user inputs an amount greater than their balance, the app shows an "
Insufficient balance" message. - Add fund button: If the user inputs an amount greater than their balance, the app shows an "Add
fund" button. However, this button doesn't have any action at this phase.
Technology Stack
- Language: Kotlin
- SDK: Android SDK
- Navigation Graph: Yes
- Single Activity Pattern: Yes
- Network Operation: Retrofit 2.x.x
- Dependency Injection: Hilt
- Architecture: MVVM
This technology stack is used for developing Android applications. Kotlin is the primary language
used for coding while the Android SDK provides the necessary tools and libraries to build Android
applications. The Navigation Graph is utilized for efficient navigation between different screens in
the application, while the Single Activity Pattern provides a streamlined and efficient approach to
designing the app's structure.
Retrofit 2.x.x is used for network operations, providing a robust and reliable way to communicate
with remote servers. Hilt is utilized for dependency injection, allowing for easier management and
organization of app components. Finally, the MVVM architecture pattern is utilized to maintain a
clean and modular architecture for the app.
CHANGELOG
All notable changes to this project will be documented in this file.
v1 (1.0)
- feat: create initial boilerplate.
- chore: add CHANGELOG.md to track notable project changes.
- chore: update .gitignore file with Android template to ensure that irrelevant files are not
committed to the repository. - feat: add project dependencies to build.gradle file for the project.
- feat: add view binding support to the project to simplify view references.
- feat: upgrade project dependencies in build.gradle file to ensure compatibility with latest
versions. - feat: create a navigation graph in the navigation folder to simplify navigation flow of the app.
- feat: include FragmentContainerView in main activity layout to enable fragment transactions.
- feat: integrate custom pin view library into project for improved security and user experience.
- feat: create UserLoginFragment for user login functionality.
- feat: update UI/UX of user login for better usability.
- feat: add SDP for scalable size units to ensure apps compatibility with different screen sizes.
- feat: add SSP for scalable size units for texts to ensure apps compatibility with different screen
sizes. - feat(login-ui): update the user login UI for a better user experience.
- feat(pin-library): updates the pin view library for improved security and usability.
- feat(layout-validation): add validation to login layout for better UI error handling and UX.
- feat(screen-size): add support for different screen sizes to ensure compatibility across various
devices. - feat(send-fund): add SendFundFragment
- feat(send-fund): update UI for better user experience
- chore: update the codebase to remove any resources that are no longer in use.
- feat: implement AppApplication class for Hilt code generation
This commit add a new AppApplication class and implement the application class on it, basically the
application is going to be used to tell hilt to start generating code for us
- feat: configure Kotlin and Gradle for Android project
- refactor: clean up UserLoginFragment
- refactor(presentation): move UserLoginFragment to presentation layer within "user_login" feature
for better organization and maintainability - feat: implement view binding for user login screen
- feat: implement RepositoryModule class for Hilt dependency injection
This commit adds a new class called RepositoryModule and implements it for Hilt dependency
injection. The purpose of this class is to provide dependencies for the app using Hilt.
- fix: use @Installin annotation to define dependency scope
This commit resolves an issue by using the @Installin annotation to specify the scope or visibility
of dependencies in the codebase. The annotation is used to define the component where the
dependencies should be installed and made available for use.
- feat: use SingletonComponent for singleton dependencies
This commit uses the SingletonComponent to declare dependencies that should only have a single
instance throughout the application. Since the app does not need multiple instances of these
dependencies, using a singleton is more efficient.
- feat: Add logging-interceptor dependency to build.gradle
This commit adds a new dependency, logging-interceptor, to the build.gradle file. The
logging-interceptor is a useful tool for logging network requests and responses, which will aid in
debugging and monitoring network-related issues.
- feat: Add ApiClient services as companion object
This commit adds ApiClient services as a companion object. By defining the ApiClient services as a
companion object, developers can easily access and use the services without the need to create a new
instance of the ApiClient class. This change will make the code more efficient and easier to read.
- feat: Add WalletService class to fetch login response
This commit adds a new WalletService class that is responsible for fetching the login response. The
WalletService class is a useful tool for managing the login process and handling any errors that may
occur during the process. This change will make the code more modular and easier to maintain.
Developers can now use the WalletService class to handle login-related functionality without the
need to modify existing code.
- feat(user_login): Add UserLoginRequestModel to data layer
This commit adds a new UserLoginRequestModel to the data layer of the user_login feature. The
UserLoginRequestModel is a data class that contains the necessary data to perform a user login.
- feat(user_login): add UserLoginEntity to data layer
This commit adds the UserLoginEntity to the data layer for the user_login feature. The purpose of
this entity is to handle user login-related data and operations. This feature enhancement will
improve the functionality and reliability of the user login feature.
- feat: add login functionality
- feat: add send fund functionality
- feat: Add internet permission to manifest
- feat: Enable data binding in Gradle
- feat: Update login UI
- feat: Update send fund UI
- chore: Remove unused resources from codebase
- feat: Update PinView library
- feat: Update launcher icon
- feat: Add username validation with error toast
- feat: Replace error toast message with TextInputLayout error message for better user experience
- feat: Remove error message for valid username
- fix: convert username uppercase letters to lowercase
This commit updates the username filter logic to ensure that any uppercase letters entered by the
user are automatically converted to lowercase. This ensures consistency in the formatting of
usernames and improves the user experience.
- feat: implement deduction of input amount from user balance
This commit adds new logic to update the user balance by deducting the input amount. This is
achieved by subtracting the input amount from the current user balance. This feature enables the
user to send fund from their account and reflects the updated balance in real-time.
- style: update Max Button UI based on inputted and user balance
This commit updates the UI of the Max Button to reflect changes in the inputted amount and user
balance. If the inputted amount is equal to the user balance, the Max Button UI is modified to
indicate that the maximum amount has been selected. This enhancement improves the user experience by
providing a clear visual indication of the selected amount.
- feat: implement pin validation for login
This commit adds a new feature to the login process - pin validation. When a user logs in, they are
prompted to enter their pin, and the system validates it to ensure it matches the one associated
with their account. This feature enhances security by adding an extra layer o...