GithubHelp home page GithubHelp logo

ark-builders / ark-rate Goto Github PK

View Code? Open in Web Editor NEW
2.0 3.0 3.0 872 KB

ARK Rate is a tiny convenience app for quickly converting multiple currencies at the same time

Home Page: https://www.ark-builders.dev/apps/rate/

License: MIT License

Kotlin 100.00%
android currency-converter currency-exchange-rates kotlin alerts cryptocurrency currency exchange-rate-calculator exchange-rates fiat-converter

ark-rate's People

Contributors

dependabot[bot] avatar hieuwu avatar kirillt avatar mdrlzy avatar mohamedpresident avatar pgpathan22 avatar someone120 avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

ark-rate's Issues

Currency pictograms

Currency should be represented uniformly at any screen by:

  • Short name (3-4 characters)
  • Pictogram (unique text-like symbol)
  • Country flag

Users must be able to configure what of these 3 things they want to see, e.g. only pictogram or flag + short name.

NPE in SummaryViewModel

java.lang.NullPointerException
	at space.taran.arkrate.presentation.summary.SummaryViewModel.calculateTotal(SummaryViewModel.kt:36)
	at space.taran.arkrate.presentation.summary.SummaryViewModel.access$calculateTotal(SummaryViewModel.kt:13)
	at space.taran.arkrate.presentation.summary.SummaryViewModel$calculateTotal$1.invokeSuspend(SummaryViewModel.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at android.os.Handler.handleCallback(Handler.java:761)
	at android.os.Handler.dispatchMessage(Handler.java:98)
	at android.os.Looper.loop(Looper.java:156)
	at android.app.ActivityThread.main(ActivityThread.java:6586)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:999)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:889)
	Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@f772ab2, Dispatchers.Main.immediate]

Currency pictograms and country flags

Each currency should have clear symbols/graphics attached:

  • Pictogram, i.e. small text-like symbols denoting the currency
  • Flag of the country which uses the currency

If pictograms can be provided by unicode, then we can use it. But what I've found here doesn't make a lot of sense to me. E.g. Turkish Lyra is correct: but Kazakhstan Tenge is wrong: лв

Portfolio persistence

The Portfolio data is crucial to the user. While it's frequently feasible for users to manually recover it, discovering that financial data has been lost due to an upgrade or other circumstances can be frustrating.

We have two options here:

  • Store the data within the standard Android app folder.
  • Allow users to select a preferred folder for data storage.

While both options facilitate future device synchronization, the latter also enables the use of third-party syncing mechanisms, adding an extra layer of versatility.

Base currencies for Portfolio screen

In the Portfolio screen, designed for multi-input calculation, we should introduce the concept of base currencies. These are one to three user-chosen currencies, deemed as familiar or native. For example, it could be USD, RUB and KZT. The intent is that each screen input should carry a hint, illustrating the equivalent amount in the base currencies.

To achieve this, we propose:

  1. An additional [add_base] button.
  2. Helpful hints adjacent to each input.
  3. A dialog enabling the modification of base currencies set. A limit of three currencies seems reasonable.

The summary function should maintain its current operation.

Quick conversion screen

The current screen with multiple inputs is not very convenient when the user want to estimate value of single currency.

Quick Estimation screen should be implemented:

  • [currencies] — a group of most recently used currencies
  • [search] — a button for finding arbitrary currency

Each currency within [currency] is presented as clickable fav which invokes quick estimation dialog:

  • [amount] — an input field for entering the selected currency amount
  • [calculate] — a button for displaying the summary screen

Summary screen should act same as now, but with only one selected currency.

rate-quick2

Quick erasure of a value for a single currency

Each row has [remove] button which removes the currency left to it. We need [clear] button instead or in addition. This button would just erase value in the field instead of removing the currency.

Poor connectivity prevents loading

Difficult to reproduce, because offline mode works and online mode with good connection works as well.

When internet connection is flaky, the app can load without added currencies. This must not happen, because the currencies and latest known exchange rates are stored locally.

Use all pairs for conversions

https://github.com/ARK-Builders/ARK-Rate/pull/13/files/3ab38d7d0f286ad24a388faa69d251fcff49dfb7#diff-3356bc53a97bf9b7871002de7206cd61868a871759da3c49c1d29fa3dfba4c52R40

When we convert crypto assets, we use only those pairs, which have USD as one side of the pair. In other words, we always convert one crypto token to another via USDT. We could achieve more realistic conversion if we store all pairs in memory and first attempt to find direct match, before converting via USDT as a fallback.

Bonus points for advanced routing, e.g. ATOM -> DOT -> BTC.

Currency pair alerts

The feature should allow user to set alarm for specific price of an asset. In any other token, without necessity to convert via USDT.

Example:

  1. Current price of ATOM is 2 DOT tokens.
  2. The user sets alarm for ATOM/DOT pair, for the value of 3.
  3. If price becomes 3 or more (e.g. 3.1), the user must receive a notification.

Exchange rate dynamics tracking/plotting

The feature should allow user to track some currency pair, recording time-based log of exchange rates. Later, the user should be able to see the plot. This would allow user to monitor custom exchange pairs, e.g. ATOM/DOT which is not very common pair on exchanges.

Search currencies by common names

Currently, the only method to add a currency is by entering its exact three-letter code.

From a UX standpoint, this is suboptimal because:

  • Users may not always know the code.
  • The sequence of letters in the code can be easily confused.

Optimizing the process to allow currency addition by their colloquial name would greatly enhance the experience:

  • USD — dollar
  • RUB — ruble
  • KRW — won
  • KZT — tenge

Additionally, incorporating typo tolerance and localized input can significantly boost usability.

Portfolio screen

While multi-input may not be ideal for swift calculations, it's perfectly suited for maintaining portfolios.

Let's refer to it as the Portfolio screen since this moment.

We could refactor it in the following way:

Alert inputs

On the notification screen, input fields should only become visible only after the user pressed [add] button. In the absence of existing alerts, only the [add] button should be displayed, without the input group.

Quick Conversion without input is allowed

Quick: Click any added currency. Don't enter any amount. Add some currency for conversion. Click Convert. It doesn't ask to enter any amount and converts for zero (0) that is not correct.

Geo-widget for currency discovery

Incorporating a feature to identify the currencies of a user's current location and neighboring countries would greatly assist travelers.

rate

Tabs for Portfolio screen

It would be great to enable users to create multiple tabs:

  • keeping distinct portfolios separately
  • temporary tabs for quick calculations

Group currencies in the Summary screen

The Summary screen currently presents an overwhelming amount of flatly arranged information. We should categorize entries under respective currencies, allowing users to expand any of them.

User preferences screen

User should be able to edit preferences.

First preference to add — numbers rounding:

  • Rounding of rates for (crypto, crypto) and (crypto, fiat) pairs
    should be OFF by default

  • Rounding of rates for (fiat, fiat) pairs
    should be ON by default

Tiny app for converting currencies quickly

Basically, the app must perform multi-conversion of currencies.
E.g. we have 2 USD, 3 EUR, 1000 RSD and 250 TRY.
This is "input" of our multi-conversion.

For the conversion we need 6 exchange rates:

  • USD-EUR (0.98 at July 19, 2022)
  • USD-RSD (115.5 at July 19, 2022)
  • USD-TRY (17.48 at July 19, 2022)
  • EUR-USD (the same as USD-EUR)
  • EUR-RSD (117.4 at July 19, 2022)
  • EUR-TRY (17.76 at July 19, 2022)
  • RSD-USD (the same as USD-RSD)
  • RSD-EUR (the same as EUR-RSD)
  • RSD-TRY (0.15 at July 19, 2022)
  • TRY-... (repeating one of the above)

The output would be list of conversions of total amount (2 USD + 3 EUR + 1000 RSD + 250 TRY) into each of the currency USD, EUR, RSD or TRY separately:

  • 28.01 USD
  • 27.38 EUR
  • 3215.3 RSD
  • 492.08 TRY

The app must consist of 2 screens:

  1. "Input" screen — list of currencies user has.
  • There must be a list of currency inputs:
    • each row has number input, default is 0, no need to save the input between app launches
    • each row has currency symbol or abbreviation ($ or USD for U.S. dollars)
    • each row has [-] button for deleting the currency
  • There must be a button [next], which loads next screen (passing user inputs into it).
  1. "Output" screen - result of conversion.
    This screen accepts all user inputs from "Input" screen.
  • There must be a list of all currency outputs:
    • each row (for currency T):
      • has list of exchange rates, i.e. for each currency S, exchange rate between S and T must be displayed
      • all "input" currencies must be converted into currency T and summed up
      • total number must be displayed
  • There must be a button [back], which loads previous screen
  1. Both screens must have [add_curr] button, presenting a dialog for adding new currency to the lists:
    • the dialog has drop-down list for choosing currency
    • the dialog has [add] button saving the choice
      • after adding, list of currencies must contain new row with corresponding currency
      • selected currencies must be stored between app launches
    • the dialog has [x] button for closing it without changes

List of chosen currencies is the same in "Input" and "Output" screen, must be saved into user data and be loaded during next app startup. Exchange rates must be taken from good source like Bloomberg, but can be other source if it's API is better.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.