Skip to content

Update README.md with current state, features, and build instructions#1380

Open
igordanilcenko wants to merge 1 commit intodevelopmentfrom
feature/update_readme
Open

Update README.md with current state, features, and build instructions#1380
igordanilcenko wants to merge 1 commit intodevelopmentfrom
feature/update_readme

Conversation

@igordanilcenko
Copy link
Copy Markdown
Contributor

No description provided.

@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly updates the README.md file to provide a current and comprehensive overview of the Tari Universe Wallet Android application. It details the latest features, particularly the Exolix Crypto Swap integration, revises build instructions, clarifies secret management, and introduces a thorough architectural breakdown, making the repository more accessible and informative for contributors and developers.

Highlights

  • Documentation Refresh: The README.md has been extensively updated to reflect the current state of the Tari Universe Wallet, including new features and project details.
  • Exolix Crypto Swap Integration: Detailed documentation for the newly integrated Exolix crypto swap feature, outlining its screens and flow, has been added.
  • Enhanced Build Instructions: The build process has been clarified with updated requirements, step-by-step guides, and command-line build options.
  • Secrets and Configuration Guide: New sections explain how to set up various secret and configuration files (secret.properties, sentry.properties, yat.properties, google-services.json).
  • Architecture Overview: A comprehensive overview of the project's MVVM architecture, Dagger 2 dependency injection, navigation, and key patterns has been included.
  • Exolix API Key Example: The secret-example.properties file was updated to include an example entry for the Exolix API key.
Changelog
  • README.md
    • Updated project description and contribution guidance.
    • Added a "Current State" section detailing the Exolix Crypto Swap integration and other key features.
    • Revised and expanded the "Build Instructions" section with new requirements, steps, and command-line build commands.
    • Introduced "Secrets & Configuration" and "Native Library (FFI)" sections.
    • Added a comprehensive "Architecture Overview" with layer summary and key architectural patterns.
  • secret-example.properties
    • Added a new entry for exolix.api.key with comments explaining its purpose and requirement for the crypto swap feature.
Activity
  • No activity has been recorded for this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request provides a comprehensive update to the README.md file, significantly improving its clarity, accuracy, and usefulness for developers. The new sections on the current state, build instructions, secrets management, and architecture are excellent additions. I've found a few minor inaccuracies in the documentation that should be addressed. Overall, this is a great improvement.

Comment thread README.md
on your device.
### Requirements

- **Android Studio** — latest stable version (the project uses AGP 8.11.0 and Kotlin 2.2.0; older Studio versions will not work)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The specified Android Gradle Plugin version 8.11.0 and Kotlin version 2.2.0 appear to be incorrect, as these are not valid released versions. This could cause confusion for developers during project setup. Please either correct the version numbers or remove them to avoid ambiguity.

Suggested change
- **Android Studio** — latest stable version (the project uses AGP 8.11.0 and Kotlin 2.2.0; older Studio versions will not work)
- **Android Studio** — latest stable version (older Studio versions will not work)

Comment thread README.md
1. Comment out `preBuild.dependsOn("downloadLibwallet")` in `app/build.gradle.kts`.
2. Place your `.a` static library files in `libwallet/arm64-v8a/` and `libwallet/x86_64/`, and the header at `libwallet/wallet.h`.

For updating OpenSSL for Android: https://github.com/217heidai/openssl_for_android/releases
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The documentation points to a third-party GitHub repository for OpenSSL binaries. Relying on unofficial, pre-built binaries for a critical security library like OpenSSL can introduce a supply chain risk. It is recommended to either use an official distribution or build OpenSSL from source as part of the project's build process to ensure the integrity and security of the dependency.

Comment thread README.md

**Exolix exchange flow** — The two directions have slightly different flows:
- **Buy XTM** (external → XTM): `Exchange → SendFunds` (creates transaction, shows deposit QR) → `ExchangeStatus`
- **Sell XTM** (XTM → external): `Exchange → Review` (sends XTM via FFI wallet) → `SendFunds` → `ExchangeStatus`
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The documented flow for a 'Sell XTM' transaction appears to be incorrect. The current documentation states the flow is Exchange → Review → SendFunds → ExchangeStatus. However, the implementation in ExchangeReviewViewModel shows that after the 'Review' step, the application navigates directly to ExchangeStatus. The SendFunds step is not part of this flow. Please correct the documentation to reflect the actual implementation.

Suggested change
- **Sell XTM** (XTM → external): `Exchange → Review` (sends XTM via FFI wallet) → `SendFunds``ExchangeStatus`
- **Sell XTM** (XTM → external): `Exchange → Review` (sends XTM via FFI wallet) → `ExchangeStatus`

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates project documentation and configuration templates to reflect the current (v1.5.0) state of the Android wallet, including the Exolix exchange feature and modernized build/setup instructions.

Changes:

  • Expanded README.md with current-state feature list, updated build requirements/steps, secrets/configuration guidance, and architecture overview.
  • Updated secret-example.properties to include the Exolix API key placeholder and related comments.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 5 comments.

File Description
README.md Adds/upgrades documentation for features, build variants, secrets/config, FFI library handling, and architecture.
secret-example.properties Adds Exolix API key template entry and improves readability with spacing.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread secret-example.properties

# Exolix API key for the crypto swap (exchange) feature.
# Obtain your key by registering at https://exolix.com/developers
# Leave empty to disable the exchange feature (UI will still appear but API calls will fail).
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Exolix API-key comment is internally inconsistent: it says leaving the key empty will "disable" the exchange feature, but then states the UI will still appear and API calls will fail. Please reword to accurately reflect the behavior (either the feature is hidden/disabled, or it remains visible but non-functional without a key).

Suggested change
# Leave empty to disable the exchange feature (UI will still appear but API calls will fail).
# Leave empty if you don't have a key; the exchange UI will still appear but swaps will not work (API calls will fail).

Copilot uses AI. Check for mistakes.
Comment thread README.md

## Architecture Overview

The project follows a single-module MVVM architecture with Dagger 2 for dependency injection. Screens are implemented as Fragments (newer ones in Jetpack Compose, older ones in XML view binding), all hosted inside `CommonActivity` subclasses.
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section calls the app a "single-module" architecture, but the project is configured as a multi-module Gradle build (e.g., :app and :yatlib are included in settings.gradle.kts). Please adjust wording to avoid misleading contributors (e.g., "primarily MVVM in the :app module" / "multi-module with app + yatlib").

Suggested change
The project follows a single-module MVVM architecture with Dagger 2 for dependency injection. Screens are implemented as Fragments (newer ones in Jetpack Compose, older ones in XML view binding), all hosted inside `CommonActivity` subclasses.
The project is a multi-module Gradle build (for example, `:app` and `:yatlib`), with the `:app` module primarily following an MVVM architecture and using Dagger 2 for dependency injection. Screens are implemented as Fragments (newer ones in Jetpack Compose, older ones in XML view binding), all hosted inside `CommonActivity` subclasses.

Copilot uses AI. Check for mistakes.
Comment thread README.md
The download task (`downloadLibwallet`) runs as part of `preBuild` and places binaries into `libwallet/`. **Any files you manually put there will be overwritten.**

To use a custom (locally-built) native library:
1. Comment out `preBuild.dependsOn("downloadLibwallet")` in `app/build.gradle.kts`.
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The instructions for using a custom FFI library say to comment out preBuild.dependsOn("downloadLibwallet"), but app/build.gradle.kts actually wires the task via tasks.named("preBuild") { dependsOn("downloadLibwallet") }. Please update the README to match the current Gradle Kotlin DSL so readers can follow it verbatim.

Suggested change
1. Comment out `preBuild.dependsOn("downloadLibwallet")` in `app/build.gradle.kts`.
1. Comment out the line wiring the download task, `tasks.named("preBuild") { dependsOn("downloadLibwallet") }`, in `app/build.gradle.kts`.

Copilot uses AI. Check for mistakes.
Comment thread README.md

**Compose design system** — All Compose screens must be wrapped in `TariDesignSystem(theme = ...) { ... }`. Access tokens via `TariDesignSystem.colors`, `TariDesignSystem.typography`, `TariDesignSystem.shapes`.

**Preference repositories** — Extend `CommonPrefRepository`. Keys are namespaced per active network via `TariNetwork.formatKey(key)`. Use `SharedPrefGsonDelegate` for serialised objects or `SharedPrefDelegate` for primitives.
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The preferences guidance mentions a SharedPrefDelegate for primitives, but the codebase uses type-specific delegates (e.g., SharedPrefStringDelegate, SharedPrefBooleanDelegate, etc.) rather than a single SharedPrefDelegate. Please update this bullet to reference the actual delegate classes to avoid confusion.

Suggested change
**Preference repositories** — Extend `CommonPrefRepository`. Keys are namespaced per active network via `TariNetwork.formatKey(key)`. Use `SharedPrefGsonDelegate` for serialised objects or `SharedPrefDelegate` for primitives.
**Preference repositories** — Extend `CommonPrefRepository`. Keys are namespaced per active network via `TariNetwork.formatKey(key)`. Use `SharedPrefGsonDelegate` for serialised objects or type-specific delegates for primitives (e.g., `SharedPrefStringDelegate`, `SharedPrefBooleanDelegate`, etc.).

Copilot uses AI. Check for mistakes.
Comment thread secret-example.properties
Comment on lines 1 to 2
# This file must *NOT* be checked into Version Control Systems,
# as it contains sensitive app configuration data.
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The header currently says this file must not be checked into version control, but secret-example.properties is intentionally committed as a template. Consider updating the wording to clarify that secret.properties (the generated file with real secrets) must not be committed, while the *-example.properties template is safe to keep in VCS.

Suggested change
# This file must *NOT* be checked into Version Control Systems,
# as it contains sensitive app configuration data.
# This is an example/template configuration file that is safe to keep in Version Control Systems.
# Do NOT commit the generated `secret.properties` file that contains your real sensitive app configuration data.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants