Skip to content

fix(trade): limit decimal places for trade inputs#6445

Open
SeniorZhai wants to merge 5 commits into
masterfrom
fix/trade-input-decimal-limits
Open

fix(trade): limit decimal places for trade inputs#6445
SeniorZhai wants to merge 5 commits into
masterfrom
fix/trade-input-decimal-limits

Conversation

@SeniorZhai

@SeniorZhai SeniorZhai commented Jun 9, 2026

Copy link
Copy Markdown
Member

Summary

  • Limit Trade amount inputs across Swap and Limit flows, including programmatic writes, direction switches, balance shortcuts, and percent shortcuts.
  • Limit Limit Order price input to 8 decimal places.
  • Limit Perps margin amount inputs to 2 decimal places and normalize TP/SL price inputs by market priceScale.

Test Plan

  • ./gradlew --console=plain -q :app:testGooglePlayDebugUnitTest --tests one.mixin.android.ui.home.web3.trade.TradeInputTest

@SeniorZhai SeniorZhai requested a review from Copilot June 9, 2026 07:00
@SeniorZhai SeniorZhai added the testing Now testing, but you can review label Jun 9, 2026
@SeniorZhai SeniorZhai marked this pull request as ready for review June 9, 2026 07:03

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR adds a decimal-place limiting mechanism across swap, limit order, and perps trade inputs to prevent users (and programmatic setters like “Max/percent”) from entering amounts with excessive precision.

Changes:

  • Introduces shared helpers to cap/truncate decimal places and wires them into the shared InputContent/InputArea components.
  • Applies decimal limiting to swap + limit order amount flows (including reverse switch, max, and preset percent actions).
  • Adds perps amount decimal limiting (2 dp) and normalizes the TP/SL initial price input before deriving the percent field.

Reviewed changes

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

Show a summary per file
File Description
app/src/main/java/one/mixin/android/ui/home/web3/trade/SwapContent.kt Limits swap amount input precision based on token and applies it to max/percent/reverse flows.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsTpSlBottomSheetDialogFragment.kt Normalizes initial TP/SL price input before initializing derived percent field.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsFormat.kt Adds a shared constant for perps amount max decimal places (2).
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsAddBottomSheetDialogFragment.kt Applies perps amount decimal limiting to input, balance-fill, and percent actions.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/OpenPositionPage.kt Applies perps amount decimal limiting to input, balance-fill, and percent actions.
app/src/main/java/one/mixin/android/ui/home/web3/trade/LimitOrderContent.kt Limits decimal places for limit order in/out amount inputs and derived calculations.
app/src/main/java/one/mixin/android/ui/home/web3/trade/InputTextField.kt Adds decimal limiting/validation helpers and plumbs maxDecimalPlaces through the shared input component.
app/src/main/java/one/mixin/android/ui/home/web3/components/PriceInputArea.kt Caps limit price input decimal places via the shared input.
app/src/main/java/one/mixin/android/ui/home/web3/components/InputArea.kt Passes maxDecimalPlaces down into InputContent.

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

Comment on lines +71 to +74
internal fun SwapToken?.tradeInputMaxDecimalPlaces(): Int {
return this?.let { token ->
tradeInputMaxDecimalPlaces(token.walletId != null, token.decimals)
} ?: TRADE_INPUT_MAX_DECIMAL_PLACES
Comment on lines +186 to +189
onValueChange = {
if (!isTradeInputDecimalAllowed(it.text, maxDecimalPlaces)) {
return@BasicTextField
}
…imal-limits

# Conflicts:
#	app/src/main/java/one/mixin/android/ui/home/web3/components/PriceInputArea.kt
#	app/src/main/java/one/mixin/android/ui/home/web3/trade/InputTextField.kt
#	app/src/main/java/one/mixin/android/ui/home/web3/trade/LimitOrderContent.kt
#	app/src/main/java/one/mixin/android/ui/home/web3/trade/SwapContent.kt
#	app/src/test/java/one/mixin/android/ui/home/web3/trade/TradeInputTest.kt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

testing Now testing, but you can review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants