Skip to content

Commit

Permalink
Merge pull request #658 from cosmostation/feature/APP-main_hyuk_dev
Browse files Browse the repository at this point in the history
Feature/app main hyuk dev
  • Loading branch information
Kwonhyukjoon authored Nov 25, 2024
2 parents 708b79d + 4d3c7a2 commit 588e70c
Show file tree
Hide file tree
Showing 34 changed files with 230 additions and 72 deletions.
6 changes: 6 additions & 0 deletions app/src/main/java/wannabit/io/cosmostaion/chain/BaseChain.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,14 @@ import wannabit.io.cosmostaion.chain.cosmosClass.ChainCoreum
import wannabit.io.cosmostaion.chain.cosmosClass.ChainCosmos
import wannabit.io.cosmostaion.chain.cosmosClass.ChainCryptoorg
import wannabit.io.cosmostaion.chain.cosmosClass.ChainDesmos
import wannabit.io.cosmostaion.chain.cosmosClass.ChainDoravota
import wannabit.io.cosmostaion.chain.cosmosClass.ChainDungeon
import wannabit.io.cosmostaion.chain.cosmosClass.ChainDydx
import wannabit.io.cosmostaion.chain.cosmosClass.ChainFetchAi
import wannabit.io.cosmostaion.chain.cosmosClass.ChainFetchAi60Old
import wannabit.io.cosmostaion.chain.cosmosClass.ChainFetchAi60Secp
import wannabit.io.cosmostaion.chain.cosmosClass.ChainFinschia
import wannabit.io.cosmostaion.chain.cosmosClass.ChainFirma
import wannabit.io.cosmostaion.chain.cosmosClass.ChainGovgen
import wannabit.io.cosmostaion.chain.cosmosClass.ChainGravityBridge
import wannabit.io.cosmostaion.chain.cosmosClass.ChainInjective
Expand Down Expand Up @@ -107,6 +109,7 @@ import wannabit.io.cosmostaion.chain.evmClass.ChainDymensionEvm
import wannabit.io.cosmostaion.chain.evmClass.ChainEthereum
import wannabit.io.cosmostaion.chain.evmClass.ChainEvmosEvm
import wannabit.io.cosmostaion.chain.evmClass.ChainFantom
import wannabit.io.cosmostaion.chain.evmClass.ChainHaqqEvm
import wannabit.io.cosmostaion.chain.evmClass.ChainHumansEvm
import wannabit.io.cosmostaion.chain.evmClass.ChainKaia
import wannabit.io.cosmostaion.chain.evmClass.ChainKavaEvm
Expand Down Expand Up @@ -585,6 +588,7 @@ fun allChains(): MutableList<BaseChain> {
chains.add(ChainCronos())
chains.add(ChainCryptoorg())
chains.add(ChainDesmos())
// chains.add(ChainDoravota())
chains.add(ChainDungeon())
chains.add(ChainDydx())
chains.add(ChainDymensionEvm())
Expand All @@ -595,8 +599,10 @@ fun allChains(): MutableList<BaseChain> {
chains.add(ChainFetchAi60Old())
chains.add(ChainFetchAi60Secp())
chains.add(ChainFinschia())
// chains.add(ChainFirma())
chains.add(ChainGovgen())
chains.add(ChainGravityBridge())
// chains.add(ChainHaqqEvm())
chains.add(ChainHumansEvm())
chains.add(ChainInjective())
chains.add(ChainIris())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package wannabit.io.cosmostaion.chain.cosmosClass

import android.os.Parcelable
import com.google.common.collect.ImmutableList
import kotlinx.parcelize.Parcelize
import org.bitcoinj.crypto.ChildNumber
import wannabit.io.cosmostaion.R
import wannabit.io.cosmostaion.chain.AccountKeyType
import wannabit.io.cosmostaion.chain.BaseChain
import wannabit.io.cosmostaion.chain.CosmosEndPointType
import wannabit.io.cosmostaion.chain.PubKeyType

@Parcelize
class ChainDoravota : BaseChain(), Parcelable {

override var name: String = "Dora vota"
override var tag: String = "Doravota118"
override var logo: Int = R.drawable.chain_doravota
override var apiName: String = "doravota"

override var accountKeyType = AccountKeyType(PubKeyType.COSMOS_SECP256K1, "m/44'/118'/0'/0/X")
override var setParentPath: List<ChildNumber> = ImmutableList.of(
ChildNumber(44, true), ChildNumber(118, true), ChildNumber.ZERO_HARDENED, ChildNumber.ZERO
)

override var cosmosEndPointType: CosmosEndPointType? = CosmosEndPointType.USE_LCD
override var stakeDenom: String = "peaka"
override var accountPrefix: String = "dora"
override var grpcHost: String = "vota-grpc.dorafactory.org"
override var lcdUrl: String = "https://vota-rest.dorafactory.org/"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package wannabit.io.cosmostaion.chain.cosmosClass

import android.os.Parcelable
import com.google.common.collect.ImmutableList
import kotlinx.parcelize.Parcelize
import org.bitcoinj.crypto.ChildNumber
import wannabit.io.cosmostaion.R
import wannabit.io.cosmostaion.chain.AccountKeyType
import wannabit.io.cosmostaion.chain.BaseChain
import wannabit.io.cosmostaion.chain.CosmosEndPointType
import wannabit.io.cosmostaion.chain.PubKeyType

@Parcelize
class ChainFirma : BaseChain(), Parcelable {

override var name: String = "Firmachain"
override var tag: String = "Firmachain7777777"
override var logo: Int = R.drawable.chain_firmachain
override var apiName: String = "firmachain"

override var accountKeyType = AccountKeyType(PubKeyType.COSMOS_SECP256K1, "m/44'/7777777'/0'/0/X")
override var setParentPath: List<ChildNumber> = ImmutableList.of(
ChildNumber(44, true), ChildNumber(7777777, true), ChildNumber.ZERO_HARDENED, ChildNumber.ZERO
)

override var cosmosEndPointType: CosmosEndPointType? = CosmosEndPointType.USE_LCD
override var stakeDenom: String = "ufct"
override var accountPrefix: String = "firma"
override var grpcHost: String = ""
override var lcdUrl: String = "https://lcd-mainnet.firmachain.dev:1317"
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import wannabit.io.cosmostaion.chain.PubKeyType
@Parcelize
class ChainKi : BaseChain(), Parcelable {

override var name: String = "Ki Chain"
override var name: String = "KiChain"
override var tag: String = "ki118"
override var logo: Int = R.drawable.chain_ki
override var swipeLogo: Int = R.drawable.chain_swipe_ki
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import wannabit.io.cosmostaion.chain.PubKeyType
@Parcelize
class ChainOrai : BaseChain(), Parcelable {

override var name: String = "Orai Chain"
override var name: String = "OraiChain"
override var tag: String = "orai118"
override var logo: Int = R.drawable.chain_orai
override var apiName: String = "orai-chain"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package wannabit.io.cosmostaion.chain.evmClass

import android.os.Parcelable
import com.google.common.collect.ImmutableList
import kotlinx.parcelize.Parcelize
import org.bitcoinj.crypto.ChildNumber
import wannabit.io.cosmostaion.R
import wannabit.io.cosmostaion.chain.AccountKeyType
import wannabit.io.cosmostaion.chain.BaseChain
import wannabit.io.cosmostaion.chain.CosmosEndPointType
import wannabit.io.cosmostaion.chain.PubKeyType

@Parcelize
class ChainHaqqEvm : BaseChain(), Parcelable {

override var name: String = "Haqq"
override var tag: String = "haqq60"
override var logo: Int = R.drawable.chain_haqq
override var apiName: String = "haqq"

override var accountKeyType = AccountKeyType(PubKeyType.ETH_KECCAK256, "m/44'/60'/0'/0/X")
override var setParentPath: List<ChildNumber> = ImmutableList.of(
ChildNumber(44, true), ChildNumber(60, true), ChildNumber.ZERO_HARDENED, ChildNumber.ZERO
)

override var cosmosEndPointType: CosmosEndPointType? = CosmosEndPointType.USE_LCD
override var stakeDenom: String = "aISLM"
override var accountPrefix: String = "haqq"
override var grpcHost: String = "grpc.haqq.sh"
override var lcdUrl: String = "https://rest.cosmos.haqq.network/"

override var supportEvm: Boolean = true
override var coinSymbol: String = "ISLM"
override var coinGeckoId: String = "islamic-coin"
override var coinLogo: Int = R.drawable.token_islm
override var addressLogo: Int = R.drawable.icon_ethereum_address
override var evmRpcURL: String = "https://rpc.eth.haqq.network"
}
21 changes: 19 additions & 2 deletions app/src/main/java/wannabit/io/cosmostaion/common/Extensions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,7 @@ fun gapPastTime(finishTime: Long): String {
} else if (left >= BaseConstant.CONSTANT_M) {
(left / BaseConstant.CONSTANT_M).toString() + " minutes ago"
} else {
gapTime(finishTime)
"-"
}
return result
}
Expand All @@ -564,7 +564,16 @@ fun gapTime(finishTime: Long): String {
} else if (left >= BaseConstant.CONSTANT_M) {
(left / BaseConstant.CONSTANT_M).toString() + " minutes left"
} else {
gapPastTime(finishTime)
val after = now - finishTime
if (after >= CONSTANT_D) {
(after / CONSTANT_D).toString() + " days ago"
} else if (after >= BaseConstant.CONSTANT_H) {
(left / BaseConstant.CONSTANT_H).toString() + " hours ago"
} else if (after >= BaseConstant.CONSTANT_M) {
(left / BaseConstant.CONSTANT_M).toString() + " minutes ago"
} else {
"-"
}
}
return result
}
Expand Down Expand Up @@ -722,6 +731,14 @@ fun isHexString(value: String): Boolean {
return hexRegex.matches(value)
}

fun String.stripHexPrefix(): String {
return if (this.startsWith("0x")) {
this.substring(2)
} else {
this
}
}

fun Context.dialogResize(dialog: Dialog, width: Float, height: Float) {
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
val marginInDp = 8
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,7 @@ data class Asset(
}

fun assetColor(): Int {
color?.let {
return Color.parseColor(it)
} ?: run {
return Color.parseColor("#ffffff")
}
return Color.parseColor("#ffffff")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.Context
import com.cosmos.base.v1beta1.CoinProto
import com.google.gson.Gson
import com.google.gson.JsonArray
import com.google.gson.JsonElement
import com.google.gson.JsonObject
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
Expand Down Expand Up @@ -651,30 +652,43 @@ data class CosmosHistory(
} else if (msgType.contains("MsgInstantiateContract")) {
result = c.getString(R.string.tx_cosmwasm_instantiate)
} else if (msgType.contains("MsgExecuteContract")) {
msgValue["msg__@stringify"].asString?.let { wasmMsg ->
val wasmFunc = Gson().fromJson(wasmMsg, JsonObject::class.java)
val recipient = try {
wasmFunc.asJsonObject["transfer"].asJsonObject["recipient"].asString
} catch (e: Exception) {
null
val msgStringify: JsonElement? = msgValue.get("msg__@stringify")
when {
msgStringify == null -> {
result = c.getString(R.string.tx_cosmwasm_execontract)
}
if (recipient != null) {
result = if (recipient.equals(address, true)) {
c.getString(R.string.tx_cosmwasm_token_receive)
} else {
c.getString(R.string.tx_cosmwasm_token_send)

msgStringify.isJsonPrimitive && msgStringify.asJsonPrimitive.isString -> {
val wasmMsg = msgStringify.asString
val wasmFunc = Gson().fromJson(wasmMsg, JsonObject::class.java)
val recipient = try {
wasmFunc.asJsonObject["transfer"].asJsonObject["recipient"].asString
} catch (e: Exception) {
null
}
if (recipient != null) {
result = if (recipient.equals(address, true)) {
c.getString(R.string.tx_cosmwasm_token_receive)
} else {
c.getString(R.string.tx_cosmwasm_token_send)
}

} else {
val description = wasmFunc.entrySet().first().key ?: ""
result = c.getString(R.string.tx_wasm) + "_" + description
result = result.split('_').joinToString(" ") { des ->
des.replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() }
} else {
val description = if (wasmFunc.entrySet().isNotEmpty()) {
wasmFunc.entrySet().first().key
} else {
""
}
result = c.getString(R.string.tx_wasm) + "_" + description
result = result.split('_').joinToString(" ") { des ->
des.replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() }
}
}
}

} ?: run {
result = c.getString(R.string.tx_cosmwasm_execontract)
else -> {
result = c.getString(R.string.tx_cosmwasm_execontract)
}
}
}

Expand Down Expand Up @@ -1051,22 +1065,36 @@ data class CosmosHistory(
val msgValue = firstMsg.asJsonObject[msgType.replace(".", "-")]

if (msgType.contains("cosmwasm.") && msgType.contains("MsgExecuteContract")) {
msgValue.asJsonObject["contract"].asString?.let { contractAddress ->
val wasmMsg = msgValue.asJsonObject["msg__@stringify"].asString
val wasmFunc = Gson().fromJson(wasmMsg, JsonObject::class.java)
val amount = try {
wasmFunc.asJsonObject["transfer"].asJsonObject["amount"].asString
} catch (e: Exception) {
null
}
if (amount != null) {
chain.cosmosFetcher?.tokens?.firstOrNull { it.contract == contractAddress }
?.let { cw20 ->
return Pair(cw20, amount.toBigDecimal())
if (msgValue.asJsonObject["contract"] != null) {
val contractAddress = msgValue.asJsonObject["contract"].asString
val msgStringify: JsonElement? =
msgValue.asJsonObject.get("msg__@stringify")
when {
msgStringify?.isJsonPrimitive == true && msgStringify.asJsonPrimitive?.isString == true -> {
val wasmMsg = msgStringify.asString
val wasmFunc = Gson().fromJson(wasmMsg, JsonObject::class.java)
val amount = try {
wasmFunc.asJsonObject["transfer"].asJsonObject["amount"].asString
} catch (e: Exception) {
null
}
} else {
return null
if (amount != null) {
chain.cosmosFetcher?.tokens?.firstOrNull { it.contract == contractAddress }
?.let { cw20 ->
return Pair(cw20, amount.toBigDecimal())
}
} else {
return null
}
}

else -> {
null
}
}

} else {
null
}

} else if (msgType.contains("ethermint.evm") && msgType.contains("MsgEthereumTx")) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package wannabit.io.cosmostaion.ui.main.chain.cosmos
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.os.Parcelable
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand Down Expand Up @@ -85,6 +86,9 @@ class EcoSystemFragment : Fragment() {

ecoSystemAdapter.setOnItemClickListener {
Intent(requireActivity(), DappActivity::class.java).apply {
if (selectedChain.isSupportErc20()) {
putExtra("selectedEvmChain", selectedChain as Parcelable)
}
putExtra("dapp", it)
startActivity(this)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,11 +124,12 @@ class DappActivity : BaseActivity() {
loadAsset()
}

selectEvmChain = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
val ecoChain = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
intent.getParcelableExtra("selectedEvmChain", BaseChain::class.java)
} else {
(intent.getParcelableExtra("selectedEvmChain")) as? BaseChain
}
selectEvmChain = allChains?.firstOrNull { it.name == ecoChain?.name }
}

private fun initAllKeyData(): MutableList<BaseChain> {
Expand Down Expand Up @@ -995,7 +996,8 @@ class DappActivity : BaseActivity() {
currentEvmChainId = chainId
selectEvmChain =
allChains?.firstOrNull { it.chainIdEvm == currentEvmChainId }
rpcUrl = selectEvmChain?.evmRpcFetcher?.getEvmRpc() ?: selectEvmChain?.evmRpcURL
rpcUrl = selectEvmChain?.evmRpcFetcher?.getEvmRpc()
?: selectEvmChain?.evmRpcURL
web3j = Web3j.build(HttpService(rpcUrl))
appToWebResult(messageJson, JSONObject.NULL, messageId)
emitToWeb(chainId)
Expand Down
Loading

0 comments on commit 588e70c

Please sign in to comment.