Skip to content

Feature/trading perpetual#6177

Open
SeniorZhai wants to merge 125 commits intomasterfrom
feature/trading_perpetual
Open

Feature/trading perpetual#6177
SeniorZhai wants to merge 125 commits intomasterfrom
feature/trading_perpetual

Conversation

@SeniorZhai
Copy link
Member

No description provided.

@SeniorZhai SeniorZhai force-pushed the feature/trading_perpetual branch from 81cfb63 to b38e1ae Compare March 17, 2026 02:22
@SeniorZhai SeniorZhai force-pushed the feature/trading_perpetual branch from 2b12cc2 to e08b485 Compare March 17, 2026 07:41
@SeniorZhai SeniorZhai removed the testing Now testing, but you can review label Mar 17, 2026
Copy link
Contributor

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

Adds Perpetual (perps) trading to the Web3 Trade flow, including perps markets/positions UI, perps Room database + refresh job, and share/trading-guide surfaces.

Changes:

  • Introduces perps API models/endpoints, perps Room database/DAOs, and a background job to refresh positions.
  • Adds perps UI flows: perps tab in TradePage, market list bottom sheet, open/closed positions list & detail, leverage/guide sheets, and position share activity.
  • Expands resources (strings/layouts/drawables) and adjusts some existing share/badge/error-handling behaviors.

Reviewed changes

Copilot reviewed 91 out of 94 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
gradle.properties Enables Gradle dependency constraints usage.
app/src/main/res/values/strings.xml Adds perps strings + guide copy + new errors/placeholders.
app/src/main/res/values-zh-rCN/strings.xml Chinese translations for new perps strings/errors.
app/src/main/res/layout/layout_empty_transaction.xml Adds hidden “How Perps Works” help action view.
app/src/main/res/layout/item_total_position_value.xml New header card layout for total value/PnL.
app/src/main/res/layout/item_market_list.xml New RecyclerView row layout for perps markets.
app/src/main/res/layout/item_closed_position_list.xml New RecyclerView row layout for perps positions.
app/src/main/res/layout/fragment_market_list_bottom_sheet.xml New market-search bottom sheet layout.
app/src/main/res/layout/fragment_all_closed_positions.xml New screen layout for open/closed positions lists.
app/src/main/res/layout/activity_perps_position_share.xml New perps position share layout.
app/src/main/res/layout/activity_market_share.xml Tweaks logo size/alignment in share UI.
app/src/main/res/layout/activity_deposit_share.xml Tweaks logo size/alignment in share UI.
app/src/main/res/drawable/ic_perps_share_profit.xml New perps share style drawable (profit).
app/src/main/res/drawable/ic_perps_share_loss.xml New perps share style drawable (loss).
app/src/main/res/drawable/ic_perps_minus.xml New perps icon asset.
app/src/main/res/drawable/ic_perps_help.xml New perps icon asset.
app/src/main/res/drawable/ic_perps_add.xml New perps icon asset.
app/src/main/res/drawable/bg_round_gray_4dp.xml New rounded gray background drawable.
app/src/main/res/drawable/bg_perps_share_tag.xml New perps share tag background.
app/src/main/res/drawable/bg_perps_share_footer.xml New perps share footer background.
app/src/main/res/drawable/bg_perps_share_card_profit.xml New perps share card gradient (profit).
app/src/main/res/drawable/bg_perps_share_card_loss.xml New perps share card gradient (loss).
app/src/main/res/drawable/bg_perps_share_card_container.xml New perps share card container overlay.
app/src/main/res/drawable/bg_perps_leverage_short.xml New leverage chip background (short).
app/src/main/res/drawable/bg_perps_leverage_long.xml New leverage chip background (long).
app/src/main/res/drawable/bg_card_top.xml New card background for list top item.
app/src/main/res/drawable/bg_card_middle.xml New card background for list middle item.
app/src/main/res/drawable/bg_card_bottom.xml New card background for list bottom item.
app/src/main/res/drawable/bg_card.xml Updates card border styling.
app/src/main/java/one/mixin/android/widget/components/DotText.kt Adds Compose helper for dot-prefixed text.
app/src/main/java/one/mixin/android/util/ErrorHandler.kt Adds perps error codes and mappings to strings.
app/src/main/java/one/mixin/android/ui/wallet/fiatmoney/OrderStatusFragment.kt Updates RiskConfig invocation arguments.
app/src/main/java/one/mixin/android/ui/wallet/alert/AllAlertPage.kt Updates alert UI strings usage.
app/src/main/java/one/mixin/android/ui/wallet/alert/AlertPage.kt Updates alert UI strings usage.
app/src/main/java/one/mixin/android/ui/wallet/alert/AlertEditPage.kt Updates alert UI strings usage.
app/src/main/java/one/mixin/android/ui/wallet/TokenListBottomSheetDialogFragment.kt Adds perps token-selection mode and filtering.
app/src/main/java/one/mixin/android/ui/wallet/MarketShareActivity.kt Adjusts QR content + rounding and copy link behavior.
app/src/main/java/one/mixin/android/ui/wallet/MarketDetailsFragment.kt Formatting-only change.
app/src/main/java/one/mixin/android/ui/wallet/DepositShareActivity.kt Adjusts QR content + rounding.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PositionDetailFragment.kt Adds perps position detail fragment with refresh + share/close actions.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsPositionShareActivity.kt Adds perps position share activity (bitmap share/copy/save).
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsMarketListBottomSheetDialogFragment.kt Adds market list bottom sheet with local filtering + navigation.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsMarketListAdapter.kt Adds RecyclerView adapter for market list rows.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsMarketItem.kt Adds Compose market list item.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpsActivity.kt Adds perps activity hosting detail/open position pages + periodic refresh job.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/PerpetualGuideBottomSheetDialogFragment.kt Adds full-screen compose bottom sheet for trading guide.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/OpenPositionItem.kt Adds Compose open-position row item.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/OpenPositionAdapter.kt Adds paged adapter for open positions list (reuses closed row layout).
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/LeverageBottomSheetDialogFragment.kt Adds leverage selection sheet + profit/loss hints.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/AllPositionsFragment.kt Adds open/closed positions list fragment + totals header.
app/src/main/java/one/mixin/android/ui/home/web3/trade/perps/AllPerpsMarketsFragment.kt Adds “All Markets” compose screen for perps.
app/src/main/java/one/mixin/android/ui/home/web3/trade/TradePage.kt Adds perps tab, help bottom sheet, badges, and dynamic trade title.
app/src/main/java/one/mixin/android/ui/home/web3/trade/TradeFragment.kt Wires perps navigation + per-wallet badge prefs + title preloading.
app/src/main/java/one/mixin/android/ui/home/web3/trade/TotalPositionValueAdapter.kt Adds totals header adapter for perps open/closed lists.
app/src/main/java/one/mixin/android/ui/home/web3/trade/SwapViewModel.kt Adds error-guarding around refresh order flows.
app/src/main/java/one/mixin/android/ui/home/web3/trade/InputTextField.kt Adds sizing/typography parameters for token input UI.
app/src/main/java/one/mixin/android/ui/home/web3/trade/HelpBottomSheet.kt Adds compose help sheet (support + trading guide).
app/src/main/java/one/mixin/android/ui/home/web3/trade/ClosedPositionItem.kt Adds Compose closed-position row item.
app/src/main/java/one/mixin/android/ui/home/web3/trade/ClosedPositionAdapter.kt Adds paged adapter for closed positions list.
app/src/main/java/one/mixin/android/ui/home/web3/components/OpenOrderItem.kt Makes order colors respect quote-color preference.
app/src/main/java/one/mixin/android/ui/home/MainActivity.kt Adjusts nav badge logic (new dismissed pref).
app/src/main/java/one/mixin/android/ui/conversation/link/LinkBottomSheetDialogFragment.kt Adds scheme handling to open perps market detail.
app/src/main/java/one/mixin/android/ui/common/BottomSheetViewModel.kt Adds USD-balance token list + perps market fetch helper.
app/src/main/java/one/mixin/android/repository/TokenRepository.kt Adds repository method for USD-token list with balance.
app/src/main/java/one/mixin/android/job/RefreshPerpsPositionsJob.kt Adds background job to refresh perps positions into DB.
app/src/main/java/one/mixin/android/di/PerpsModule.kt Adds DI providers for perps DB and DAOs.
app/src/main/java/one/mixin/android/db/perps/PerpsPositionHistoryDao.kt Adds perps position history DAO + aggregate queries.
app/src/main/java/one/mixin/android/db/perps/PerpsPositionDao.kt Adds perps positions DAO + aggregates + paging.
app/src/main/java/one/mixin/android/db/perps/PerpsMarketDao.kt Adds perps markets DAO + search.
app/src/main/java/one/mixin/android/db/TokenDao.kt Adds USD-token query + (chain,symbol) flow query.
app/src/main/java/one/mixin/android/db/PerpsDatabase.kt Adds perps Room database implementation.
app/src/main/java/one/mixin/android/api/service/RouteService.kt Adds perps REST endpoints (markets, positions, orders, candles).
app/src/main/java/one/mixin/android/api/response/perps/PerpsPositionItem.kt Adds perps position “item” model (DB-join projection + parcelable).
app/src/main/java/one/mixin/android/api/response/perps/PerpsPositionHistoryItem.kt Adds perps history “item” model (DB-join projection + parcelable).
app/src/main/java/one/mixin/android/api/response/perps/PerpsPositionHistory.kt Adds perps position history entity.
app/src/main/java/one/mixin/android/api/response/perps/PerpsPosition.kt Adds perps position entity.
app/src/main/java/one/mixin/android/api/response/perps/PerpsMarket.kt Adds perps market entity.
app/src/main/java/one/mixin/android/api/response/perps/PerpsExt.kt Adds conversion helper from item -> entity.
app/src/main/java/one/mixin/android/api/response/perps/CandleView.kt Adds perps candles response models.
app/src/main/java/one/mixin/android/api/request/perps/OpenOrderRequest.kt Adds perps open/close request/response models.
app/src/main/java/one/mixin/android/Constants.kt Adds perps prefs + nav badge dismissed pref.
app/src/main/AndroidManifest.xml Registers PerpsActivity and PerpsPositionShareActivity.
app/schemas/one.mixin.android.db.PerpsDatabase/1.json Adds Room schema for perps database v1.

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

You can also share your feedback on Copilot code review. Take the survey.

Comment on lines +6 to +8
android:layout_height="match_parent"
android:orientation="vertical">

Comment on lines +488 to +490
<string name="error_perps_order_value_too_small">ERROR 10650: Position size is too small.</string>
<string name="error_perps_market_already_has_active_position">ERROR 10651: The current market already has an open position.</string>
<string name="error_waiting_other_orders">The current market already has an open position.</string>
Comment on lines +3 to +8
import PageScaffold
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.compose.foundation.layout.Arrangement
Comment on lines +265 to +266
PageScaffold(
title = stringResource(id = R.string.Trade),
title = currentTradeTitle,
Comment on lines +78 to +82
@Query("SELECT SUM(CAST(unrealized_pnl AS REAL)) FROM positions WHERE wallet_id = :walletId AND state = (state = 'open' or state = 'opening')")
suspend fun getTotalUnrealizedPnl(walletId: String): Double?

@Query("SELECT COALESCE(SUM(CAST(unrealized_pnl AS REAL)), 0) FROM positions WHERE wallet_id = :walletId AND (state = 'open' or state = 'opening')")
fun observeTotalUnrealizedPnl(walletId: String): Flow<Double>
Comment on lines +248 to +252
defaultAssets = if (fromType == TYPE_FROM_PERP) {
it.filter { token -> token.assetId in acceptedPerpAssetIds }
} else {
it
}
Comment on lines +52 to +55
iconIv.loadImage(market.iconUrl, R.drawable.ic_avatar_place_holder)
symbolTv.text = market.tokenSymbol

val formattedVolume = try {
Comment on lines +23 to +26
fun submitList(list: List<PerpsMarket>) {
markets = list
notifyDataSetChanged()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants