From 0c9dce4b23fcd88b06b104a5c1b8e766213a5ebe Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 25 Oct 2019 17:00:25 +0300 Subject: [PATCH] Updated on 2026-08-14 --- tangem-sdk-new/build.gradle | 4 + .../BasicCardManagerDelegate.kt | 53 +++- .../com/tangem/tangem_sdk_new/NfcLocation.kt | 245 ++++++++++++++++++ .../com/tangem/tangem_sdk_new/NfcManager.kt | 5 +- .../com/tangem/tangem_sdk_new/NfcReader.kt | 77 ++++-- .../tangem_sdk_new/TouchCardAnimation.kt | 99 +++++++ .../java/com/tangem/tangem_sdk_new/Utils.kt | 11 + .../res/drawable/hand_card_horizontal.png | Bin 0 -> 17362 bytes .../main/res/drawable/hand_card_vertical.png | Bin 0 -> 15582 bytes .../src/main/res/drawable/smartphone.png | Bin 0 -> 4876 bytes .../src/main/res/layout/layout_touch_card.xml | 106 ++++++++ .../src/main/res/layout/nfc_bottom_sheet.xml | 18 ++ tangem-sdk-new/src/main/res/values/colors.xml | 8 + tangem-sdk-new/src/main/res/values/dimens.xml | 4 + .../src/main/res/values/strings.xml | 1 + 15 files changed, 598 insertions(+), 33 deletions(-) create mode 100644 tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/NfcLocation.kt create mode 100644 tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/TouchCardAnimation.kt create mode 100644 tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/Utils.kt create mode 100644 tangem-sdk-new/src/main/res/drawable/hand_card_horizontal.png create mode 100644 tangem-sdk-new/src/main/res/drawable/hand_card_vertical.png create mode 100644 tangem-sdk-new/src/main/res/drawable/smartphone.png create mode 100644 tangem-sdk-new/src/main/res/layout/layout_touch_card.xml create mode 100644 tangem-sdk-new/src/main/res/layout/nfc_bottom_sheet.xml create mode 100644 tangem-sdk-new/src/main/res/values/colors.xml create mode 100644 tangem-sdk-new/src/main/res/values/dimens.xml diff --git a/tangem-sdk-new/build.gradle b/tangem-sdk-new/build.gradle index dd2eea186d..3eee0d71a4 100644 --- a/tangem-sdk-new/build.gradle +++ b/tangem-sdk-new/build.gradle @@ -36,6 +36,9 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'com.google.android.material:material:1.1.0-beta01' + implementation 'com.skyfishjy.ripplebackground:library:1.0.1' + implementation 'androidx.core:core-ktx:1.1.0' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0' @@ -44,4 +47,5 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + implementation "org.jetbrains.kotlin:kotlin-reflect:1.3.50" } diff --git a/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/BasicCardManagerDelegate.kt b/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/BasicCardManagerDelegate.kt index 534554b09b..82a3ddab11 100644 --- a/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/BasicCardManagerDelegate.kt +++ b/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/BasicCardManagerDelegate.kt @@ -1,36 +1,65 @@ package com.tangem.tangem_sdk_new -import android.app.AlertDialog import androidx.fragment.app.FragmentActivity -import com.tangem.CardError +import com.google.android.material.bottomsheet.BottomSheetDialog import com.tangem.CardManagerDelegate +import com.tangem.Log +import com.tangem.tasks.TaskError +import kotlinx.android.synthetic.main.layout_touch_card.* -class BasicCardManagerDelegate(val activity: FragmentActivity) : CardManagerDelegate { - private var dialog: AlertDialog? = null +class BasicCardManagerDelegate(private val activity: FragmentActivity, private val reader: NfcReader) : CardManagerDelegate { - override fun showSecurityDelay(seconds: Int) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + private var dialog: BottomSheetDialog? = null + + override fun showSecurityDelay(ms: Int) { +// activity.runOnUiThread{ +// activity.tv_security_delay?.text = "Security delay. $ms left." +// } } override fun hideSecurityDelay() { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } - override fun requestPin(success: () -> String, error: (cardError: CardError) -> CardError) { + override fun requestPin(success: () -> String, error: (cardError: TaskError.CardError) -> TaskError.CardError) { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } override fun openNfcPopup() { - dialog = AlertDialog.Builder(activity) - .setTitle("NFC reader mode") - .create() - dialog?.show() + activity.runOnUiThread { + val dialogView = activity.getLayoutInflater().inflate(R.layout.nfc_bottom_sheet, null) + + dialog = BottomSheetDialog(activity) + dialog?.setContentView(dialogView) + dialog?.dismissWithAnimation + dialog?.create() +// .setTitle("NFC reader mode") + dialog?.setOnShowListener { + dialog!!.rippleBackgroundNfc?.startRippleAnimation() + + // init NFC Antenna + val nfcDeviceAntenna = TouchCardAnimation( + activity, dialog!!.ivHandCardHorizontal, + dialog!!.ivHandCardVertical, dialog!!.llHand, dialog!!.llNfc) + nfcDeviceAntenna.init() + } + dialog?.setOnDismissListener { + reader.readingCancelled = false + Log.i(this::class.simpleName!!, "readingCancelled is set to true") + } + dialog?.show() + } + Log.i(this::class.simpleName!!, "Nfc PopUp is opened") } override fun closeNfcPopup() { - dialog?.dismiss() + activity.runOnUiThread { + dialog?.dismiss() + } + Log.i(this::class.simpleName!!, "Nfc PopUp is closed") + } } \ No newline at end of file diff --git a/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/NfcLocation.kt b/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/NfcLocation.kt new file mode 100644 index 0000000000..e51111ec5b --- /dev/null +++ b/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/NfcLocation.kt @@ -0,0 +1,245 @@ +package com.tangem.tangem_sdk_new + +enum class NfcLocation(val codename: String, val fullName: String, val orientation: Int, val x: Int, val y: Int, val z: Int) { + model1("sailfish", "Google Pixel", 0, 65, 25, 0), + model2("walleye", "Google Pixel 2", 0, 40, 15, 0), + model3("taimen", "Google Pixel 2 XL", 0, 40, 15, 0), + model4("marlin", "Google Pixel XL", 0, 65, 25, 0), + model5("blueline", "Google Pixel 3 ", 0, 40, 30, 0), + model6("crosshatch", "Google Pixel 3 XL", 0, 15, 20, 0), + model7("htc_pme", "HTC 10 ", 0, 50, 20, 0), + model8("htc_himau", "HTC One M9", 0, 50, 20, 0), + model9("htc_himaw", "HTC One M9", 0, 50, 20, 0), + model10("htc_oce", "HTC U Ultra", 0, 50, 20, 0), + model11("htc_ocn", "HTC U11", 0, 50, 25, 0), + model12("htc_ocm", "HTC U11+", 0, 50, 60, 0), + model13("htc_ocluhljapan", "HTC U11 Life", 1, 50, 25, 0), + model14("htc_haydugl", "HTC U11 EYEs", 0, 50, 65, 0), + model15("htc_haydtwl", "HTC U11 EYEs", 0, 50, 65, 0), + model16("htc_ime", "HTC U12+", 0, 50, 20, 0), + model17("htc_bre2dugl", "HTC Desire 12s", 0, 50, 10, 0), + model18("htc_imldugl", "HTC U12 Life", 0, 60, 20, 0), + model19("htc_exodugl", "HTC EXODUS 1", 0, 50, 20, 0), + model20("HWFRD", "Huawei Honor 8", 0, 50, 0, 0), + model21("HWDUK", "Huawei Honor 8 Pro", 0, 50, 0, 0), + model22("HWSTF", "Huawei Honor 9", 0, 50, 0, 0), + model23("HWCOL", "Huawei Honor 10", 0, 50, 0, 0), + model24("HWRVL", "Huawei Honor Note 10", 0, 50, 0, 0), + model25("HWBKL", "Huawei Honor View 10", 0, 50, 0, 0), + model26("HWPCT", "Huawei HONOR V20", 0, 60, 20, 0), + model27("HWTNY", "Huawei Honor Magic 2", 0, 50, 0, 0), + model28("HWBLN-H", "Huawei Mate 9 Lite / Honor 6X", 0, 40, 0, 0), + model29("HWALP", "Huawei Mate 10", 0, 50, 0, 0), + model30("HWBLA", "Huawei Mate 10 Pro", 0, 50, 0, 0), + model31("HWHMA", "Huawei Mate 20", 0, 50, 20, 0), + model32("HWEVR", "Huawei Mate 20 X", 0, 50, 20, 0), + model33("HWLYA", "Huawei Mate 20 Pro", 0, 50, 20, 0), + model34("angler", "Huawei Nexus 6P", 0, 40, 15, 0), + model35("hwALE-", "Huawei P8 Lite ", 1, 75, 65, 0), + model36("HWPRA-H", "Huawei P8 Lite 2017", 0, 50, 25, 0), + model37("HWEVA", "Huawei P9", 0, 50, 0, 0), + model38("HWVIE", "Huawei P9 Plus", 0, 50, 0, 0), + model39("HWVNS-?", "Huawei P9 Lite", 0, 60, 45, 0), + model40("HWVTR", "Huawei P10", 0, 50, 0, 0), + model41("HWWAS-H", "Huawei P10 lite", 0, 50, 0, 0), + model42("HWVKY", "Huawei P10 Plus", 0, 50, 0, 0), + model43("HWEML", "Huawei P20", 0, 50, 50, 0), + model44("HWANE", "Huawei P20 Lite", 0, 50, 20, 0), + model45("HWCLT", "Huawei P20 Pro", 0, 50, 50, 0), + model46("HW-01K", "Huawei P20 Pro", 0, 50, 50, 0), + model47("HWELE", "Huawei P30", 0, 50, 50, 0), + model48("HWVOG", "Huawei P30 Pro", 0, 50, 50, 0), + model49("HW-02L", "Huawei P30 Pro", 0, 50, 50, 0), + model50("HWFIG-H", "Huawei P Smart", 0, 45, 0, 0), + model51("HWPOT-H", "Huawei P smart 2019", 0, 50, 20, 0), + model52("h1", "LG G5", 0, 30, 20, 0), + model53("lucye", "LG G6", 0, 50, 50, 0), + model54("judyln", "LG G7", 0, 50, 50, 0), + model55("hammerhead", "LG Nexus 5", 0, 50, 50, 0), + model56("bullhead", "LG Nexus 5X", 0, 45, 15, 0), + model57("mh", "LG Q6", 1, 25, 50, 0), + model58("ph2n", "LG Stylo 2+", 0, 75, 20, 0), + model59("sf340n", "LG Stylo 3+", 0, 75, 20, 0), + model60("ph1n", "LG Stylus 2", 0, 75, 20, 0), + model61("msf3", "LG Stylus 3", 0, 75, 20, 0), + model62("elsa", "LG V20", 0, 50, 15, 0), + model63("joan", "LG V30", 0, 50, 50, 0), + model64("L-01K", "LG V30+", 0, 50, 50, 0), + model65("judyp", "LG V35 ThinQ", 0, 50, 50, 0), + model66("judyln", "LG G7 ThinQ", 0, 50, 50, 0), + model67("L-02K", "LG JOJO", 0, 50, 60, 0), + model68("mcv5a", "LG Q7", 0, 50, 60, 0), + model69("cv7a", "LG Stylo 4", 0, 50, 60, 0), + model70("nora_8917_n", "Motorola Moto E5", 0, 50, 40, 0), + model71("potter_n", "Motorola Moto G5 Plus", 0, 50, 5, 0), + model72("montana_n", "Motorola Moto G5s", 0, 50, 5, 0), + model73("sanders_n", "Motorola Moto G5s Plus", 0, 50, 5, 0), + model74("ali_n", "Motorola Moto G6", 0, 50, 35, 0), + model75("aljeter_n", "Motorola Moto G6 Play", 0, 50, 35, 0), + model76("evert_n", "Motorola Moto G6 Plus", 0, 40, 40, 0), + model77("river_n", "Motorola moto g(7)", 0, 50, 50, 0), + model78("lake_n", "Motorola moto g(7) plus", 0, 50, 50, 0), + model79("payton", "Motorola Moto X4", 0, 50, 40, 0), + model80("nash", "Motorola Moto Z2 Force", 0, 50, 40, 0), + model81("albus", "Motorola Moto Z2 Play", 0, 50, 5, 0), + model82("beckham", "Motorola Moto Z3 Play", 0, 50, 0, 0), + model83("shamu", "Motorola Nexus 6", 0, 50, 60, 0), + model84("NE1", "Nokia 3", 0, 40, 30, 0), + model85("ND1", "Nokia 5", 0, 40, 30, 0), + model86("PLE", "Nokia 6", 0, 50, 20, 0), + model87("PL2_sprout", "Nokia 6.1", 0, 50, 0, 0), + model88("C1N", "Nokia 7", 0, 50, 25, 0), + model89("B2N", "Nokia 7 Plus", 0, 75, 10, 0), + model90("NB1", "Nokia 8", 0, 50, 30, 0), + model91("A1N_sprout", "Nokia 8 Sirocco", 0, 90, 0, 0), + model92("A1N", "Nokia 8 Sirocco", 0, 90, 0, 0), + model93("OnePlus3", "OnePlus 3", 0, 50, 15, 0), + model94("OnePlus3T", "OnePlus 3t", 0, 50, 15, 0), + model95("OnePlus5", "OnePlus 5", 0, 80, 5, 0), + model96("OnePlus5T", "OnePlus 5t", 0, 80, 5, 0), + model97("OnePlus6", "OnePlus 6", 0, 50, 20, 0), + model98("A0001", "OnePlus One", 0, 50, 50, 0), + model99("OnePlus6T", "OnePlus6T", 0, 50, 20, 0), + model100("OnePlus6TSingle", "OnePlus6T", 0, 50, 20, 0), + model101("OnePlus7Pro", "OnePlus 7 Pro", 0, 30, 25, 0), + model102("OnePlus7ProTMO", "OnePlus 7 Pro", 0, 30, 25, 0), + model103("a5x", "Samsung Galaxy A5 (2016)", 1, 50, 45, 0), + model104("a5y17lte", "Samsung Galaxy A5 (2017)", 1, 65, 45, 0), + model105("a7y17lte", "Samsung Galaxy A7 (2017)", 1, 60, 40, 0), + model106("a7y18lte", "Samsung Galaxy A7 (2018)", 0, 40, 20, 0), + model107("a7y18lteks", "Samsung Galaxy A7 (2018)", 0, 40, 20, 0), + model108("jackpotlte", "Samsung Galaxy A8 (2018)", 1, 50, 50, 0), + model109("a8", "Samsung Galaxy A8 / A8 (2016)", 0, 50, 15, 0), + model110("jackpot2lte", "Samsung Galaxy A8+", 1, 50, 45, 0), + model111("a8sqlte", "Samsung Galaxy A8s", 0, 50, 25, 0), + model112("a8sqltechn", "Samsung Galaxy A8s", 0, 50, 25, 0), + model113("a9xltechn", "Samsung Galaxy A9 (2016)", 1, 50, 45, 0), + model114("a9y18qltekx", "Samsung Galaxy A9 (2018)", 0, 40, 25, 0), + model115("a9y18qlte", "Samsung Galaxy A9 (2018)", 0, 40, 25, 0), + model116("c5ltechn", "Samsung Galaxy C5", 0, 45, 15, 0), + model117("c5pltechn", "Samsung Galaxy C5", 0, 45, 15, 0), + model118("c5proltechn", "Samsung Galaxy C5 Pro", 1, 45, 15, 0), + model119("c7ltechn", "Samsung Galaxy C7", 0, 50, 15, 0), + model120("c7prolte", "Samsung Galaxy C7 Pro", 1, 50, 15, 0), + model121("c9lte", "Samsung Galaxy C9 Pro", 0, 45, 15, 0), + model122("j5x", "Samsung Galaxy J5 (2016)", 1, 40, 50, 0), + model123("j5y17lte", "Samsung Galaxy J5 (2017) / J5 Pro", 1, 60, 50, 0), + model124("j6lte", "Samsung Galaxy J6", 1, 60, 50, 0), + model125("j7y17lte", "Samsung Galaxy J7 Pro", 1, 40, 50, 0), + model126("noblelte", "Samsung Galaxy Note5", 1, 50, 60, 0), + model127("SCV37", "Samsung Galaxy Note8", 1, 50, 45, 0), + model128("SC-01K", "Samsung Galaxy Note8", 1, 50, 45, 0), + model129("great", "Samsung Galaxy Note8", 1, 50, 45, 0), + model130("crownqle", "Samsung Galaxy Note9", 1, 50, 50, 0), + model131("crownlte", "Samsung Galaxy Note9", 1, 50, 50, 0), + model132("SC-01L", "Samsung Galaxy Note9", 1, 50, 50, 0), + model133("SCV40", "Samsung Galaxy Note9", 1, 50, 50, 0), + model134("SC-05G", "Samsung Galaxy S6", 1, 30, 60, 0), + model135("zeroflte", "Samsung Galaxy S6", 1, 30, 60, 0), + model136("SCV31", "Samsung Galaxy S6 edge", 1, 30, 60, 0), + model137("404SC", "Samsung Galaxy S6 edge", 1, 30, 60, 0), + model138("SC-04G", "Samsung Galaxy S6 edge", 1, 30, 60, 0), + model139("zerolte", "Samsung Galaxy S6 edge", 1, 30, 60, 0), + model140("zenlte", "Samsung Galaxy S6 edge+", 1, 50, 55, 0), + model141("heroqlte", "Samsung Galaxy S7", 1, 50, 45, 0), + model142("herolte", "Samsung Galaxy S7", 1, 50, 45, 0), + model143("poseidonlteatt", "Samsung Galaxy S7 Active", 1, 45, 55, 0), + model144("SCV33", "Samsung Galaxy S7 Edge", 1, 50, 45, 0), + model145("SC-02H", "Samsung Galaxy S7 Edge", 1, 50, 45, 0), + model146("hero2", "Samsung Galaxy S7 Edge", 1, 50, 45, 0), + model147("SCV36", "Samsung Galaxy S8", 0, 50, 55, 0), + model148("SC-02J", "Samsung Galaxy S8", 0, 50, 55, 0), + model149("dreamlte", "Samsung Galaxy S8", 0, 50, 55, 0), + model150("dreamqlte", "Samsung Galaxy S8", 0, 50, 55, 0), + model151("cruiserlte", "Samsung Galaxy S8 Active", 0, 50, 50, 0), + model152("SCV35", "Samsung Galaxy S8+", 0, 50, 45, 0), + model153("SC-03J", "Samsung Galaxy S8+", 0, 50, 45, 0), + model154("dream2", "Samsung Galaxy S8+", 0, 50, 45, 0), + model155("SCV38", "Samsung Galaxy S9", 0, 50, 50, 0), + model156("SC-02K", "Samsung Galaxy S9", 0, 50, 50, 0), + model157("starlte", "Samsung Galaxy S9", 0, 50, 50, 0), + model158("starqlte", "Samsung Galaxy S9", 0, 50, 50, 0), + model159("SCV39", "Samsung Galaxy S9+", 0, 50, 60, 0), + model160("SC-03K", "Samsung Galaxy S9+", 0, 50, 60, 0), + model161("star2", "Samsung Galaxy S9+", 0, 50, 60, 0), + model162("beyond1q", "Samsung Galaxy S10", 0, 50, 50, 0), + model163("beyond1", "Samsung Galaxy S10", 0, 50, 50, 0), + model164("beyond2q", "Samsung Galaxy S10+", 0, 50, 50, 0), + model165("beyond2", "Samsung Galaxy S10+", 0, 50, 50, 0), + model166("beyond0q", "Samsung Galaxy S10e", 0, 50, 50, 0), + model167("beyond0", "Samsung Galaxy S10e", 0, 50, 50, 0), + model168("F331", "Sony Xperia E5", 0, 50, 25, 0), + model169("G33", "Sony Xperia L1", 0, 50, 30, 0), + model170("H33", "Sony Xperia L2", 0, 50, 20, 0), + model171("H43", "Sony Xperia L2", 0, 50, 20, 0), + model172("F512", "Sony Xperia X", 0, 10, 5, 1), + model173("suzu", "Sony Xperia X", 0, 10, 5, 1), + model174("F5321", "Sony Xperia X Compact", 0, 50, 55, 0), + model175("SO-02J", "Sony Xperia X Compact", 0, 50, 55, 0), + model176("F813", "Sony Xperia X Performance", 0, 10, 5, 1), + model177("SOV33", "Sony Xperia X Performance", 0, 10, 5, 1), + model178("SO-04H", "Sony Xperia X Performance", 0, 10, 5, 1), + model179("502SO", "Sony Xperia X Performance", 0, 10, 5, 1), + model180("F311", "Sony Xperia XA", 0, 50, 20, 0), + model181("F321", "Sony Xperia XA Ultra", 0, 50, 25, 0), + model182("G31", "Sony Xperia XA1", 0, 50, 20, 0), + model183("G34", "Sony Xperia XA1 Plus", 0, 50, 25, 0), + model184("G32", "Sony Xperia XA1 Ultra", 0, 50, 20, 0), + model185("H31", "Sony Xperia XA2", 0, 50, 15, 0), + model186("H41", "Sony Xperia XA2", 0, 50, 15, 0), + model187("H4493", "Sony Xperia XA2 Plus", 0, 50, 20, 0), + model188("H4413", "Sony Xperia XA2 Plus", 0, 50, 20, 0), + model189("H3413", "Sony Xperia XA2 Plus", 0, 50, 20, 0), + model190("H32", "Sony Xperia XA2 Ultra", 0, 50, 20, 0), + model191("H42", "Sony Xperia XA2 Ultra", 0, 50, 20, 0), + model192("F833", "Sony Xperia XZ", 0, 20, 5, 1), + model193("SO-01J", "Sony Xperia XZ", 0, 20, 5, 1), + model194("601SO", "Sony Xperia XZ", 0, 20, 5, 1), + model195("SOV34", "Sony Xperia XZ", 0, 20, 5, 1), + model196("G81", "Sony Xperia XZ Premium", 0, 50, 55, 0), + model197("SO-04J", "Sony Xperia XZ Premium", 0, 50, 55, 0), + model198("G834", "Sony Xperia XZ1", 0, 45, 5, 0), + model199("701SO", "Sony Xperia XZ1", 0, 45, 5, 0), + model200("SOV36", "Sony Xperia XZ1", 0, 45, 5, 0), + model201("SO-01K", "Sony Xperia XZ1", 0, 45, 5, 0), + model202("G8441", "Sony Xperia XZ1 Compact", 0, 50, 30, 0), + model203("SO-02K", "Sony Xperia XZ1 Compact", 0, 50, 30, 0), + model204("H82", "Sony Xperia XZ2", 0, 20, 40, 0), + model205("SOV37", "Sony Xperia XZ2", 0, 20, 40, 0), + model206("SO-03K", "Sony Xperia XZ2", 0, 20, 40, 0), + model207("702SO", "Sony Xperia XZ2", 0, 20, 40, 0), + model208("H8166", "Sony Xperia XZ2 Premium", 0, 60, 20, 0), + model209("SO-04K", "Sony Xperia XZ2 Premium", 0, 60, 20, 0), + model210("SOV38", "Sony Xperia XZ2 Premium", 0, 60, 20, 0), + model211("H8116", "Sony Xperia XZ2 Premium", 0, 60, 20, 0), + model212("H8324", "Sony Xperia XZ2 Compact", 0, 50, 25, 0), + model213("SO-05K", "Sony Xperia XZ2 Compact", 0, 50, 25, 0), + model214("H8314", "Sony Xperia XZ2 Compact", 0, 50, 25, 0), + model215("G823", "Sony Xperia XZs", 0, 20, 5, 1), + model216("602SO", "Sony Xperia XZs", 0, 20, 5, 1), + model217("SOV35", "Sony Xperia XZs", 0, 20, 5, 1), + model218("SO-03J", "Sony Xperia XZs", 0, 20, 5, 1), + model219("801SO", "Sony Xperia XZ3", 0, 60, 20, 0), + model220("H9493", "Sony Xperia XZ3", 0, 60, 20, 0), + model221("H9436", "Sony Xperia XZ3", 0, 60, 20, 0), + model222("SOV39", "Sony Xperia XZ3", 0, 60, 20, 0), + model223("SO-01L", "Sony Xperia XZ3", 0, 60, 20, 0), + model224("H8416", "Sony Xperia XZ3", 0, 60, 20, 0), + model225("gemini", "Xiaomi Mi 5", 0, 40, 20, 0), + model226("capricorn", "Xiaomi Mi 5S", 0, 50, 10, 0), + model227("natrium", "Xiaomi Mi 5S Plus", 0, 45, 15, 0), + model228("sagit", "Xiaomi Mi 6", 0, 50, 20, 0), + model229("dipper", "Xiaomi Mi 8", 0, 45, 20, 0), + model230("ursa", "Xiaomi MI 8 Explorer Edition", 0, 50, 40, 0), + model231("cepheus", "Xiaomi MI 9", 0, 40, 20, 0), + model232("grus", "Xiaomi MI 9 SE", 0, 40, 20, 0), + model233("lithium", "Xiaomi Mi MIX", 0, 20, 20, 0), + model234("chiron", "Xiaomi Mi MIX 2", 0, 45, 20, 0), + model235("polaris", "Xiaomi Mi MIX 2S", 0, 45, 20, 0), + model236("scorpio", "Xiaomi Mi Note 2", 0, 50, 20, 0), + model237("jason", "Xiaomi Mi Note 3", 0, 50, 20, 0), + model238("perseus", "Xiaomi MIX 3", 0, 60, 20, 0), + model239("bbb100", "BlackBerry KEYone", 0, 60, 20, 0), + model240("bbf100", "BlackBerry KEY2", 0, 50, 30, 0), + model241("CatS61", "Cat S61", 0, 50, 50, 0), +} \ No newline at end of file diff --git a/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/NfcManager.kt b/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/NfcManager.kt index b31ab3c0c0..f9221b0782 100644 --- a/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/NfcManager.kt +++ b/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/NfcManager.kt @@ -37,9 +37,8 @@ class NfcManager(private val reader: NfcReader) : NfcAdapter.ReaderCallback { } override fun onTagDiscovered(tag: Tag?) { - reader.isoDep = IsoDep.get(tag) - reader.onTagDiscovered(tag) - if (!reader.readingActive) ignoreTag(tag) +// reader.isoDep = IsoDep.get(tag) + if (reader.readingActive) reader.onTagDiscovered(tag) else ignoreTag(tag) } diff --git a/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/NfcReader.kt b/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/NfcReader.kt index 60bd44b295..47e7ce5e78 100644 --- a/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/NfcReader.kt +++ b/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/NfcReader.kt @@ -3,41 +3,82 @@ package com.tangem.tangem_sdk_new import android.nfc.Tag import android.nfc.tech.IsoDep import com.tangem.CardReader -import com.tangem.data.ResponseApdu +import com.tangem.Log +import com.tangem.common.CompletionResult +import com.tangem.common.apdu.ResponseApdu +import com.tangem.tasks.TaskError -class NfcReader() : CardReader { +class NfcReader : CardReader { var isoDep: IsoDep? = null - var readingActive = false + set(value) { + if (field == null) { + field = value + connect() + } + } + override var readingActive = false + var startSession = false + var readingCancelled = false + set(value) { + if (value) readingActive = false + field = value + } var data: ByteArray? = null - var callback: ((responseApdu: ResponseApdu) -> Unit)? = null + var callback: ((response: CompletionResult) -> Unit)? = null - override fun sendApdu(apduSerialized: ByteArray, callback: (responseApdu: ResponseApdu) -> Unit) { + override fun setStartSession() { + readingActive = true + readingCancelled = false + } + + override fun sendApdu(apduSerialized: ByteArray, callback: (response: CompletionResult) -> Unit) { data = apduSerialized +// readingActive = true this.callback = callback + if (isoDep != null) { + try { + transceiveData() + } catch (exception: Exception) { + isoDep = null + } + } + } + + private fun transceiveData() { + if (readingCancelled) { + callback?.invoke(CompletionResult.Failure(TaskError.UserCancelledError())) + return + } + val rawResponse = isoDep?.transceive(data) + if (rawResponse != null) { + Log.i(this::class.simpleName!!, "Nfc response is received") + data = null + readingActive = false + } + rawResponse?.let { callback?.invoke(CompletionResult.Success(ResponseApdu(it))) } } fun onTagDiscovered(tag: Tag?) { - if (data != null) { - readingActive = true - connect() - val rawResponse = isoDep?.transceive(data) - if (rawResponse != null) { - readingActive = false - data = null - } - rawResponse?.let { callback?.invoke(ResponseApdu(it)) } - } - +// if (readingActive) { +// if (startSession) { +// connect() +// startSession = false +// } + isoDep = IsoDep.get(tag) + transceiveData() } + private fun connect() { - val timeout = isoDep?.timeout +// val timeout = isoDep?.timeout isoDep?.connect() isoDep?.close() isoDep?.connect() - isoDep?.timeout = timeout ?: 0 + isoDep?.timeout = 120000 + Log.i(this::class.simpleName!!, "Nfc session is started") + } } \ No newline at end of file diff --git a/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/TouchCardAnimation.kt b/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/TouchCardAnimation.kt new file mode 100644 index 0000000000..78fe8fec34 --- /dev/null +++ b/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/TouchCardAnimation.kt @@ -0,0 +1,99 @@ +package com.tangem.tangem_sdk_new + +import android.content.Context +import android.os.Build +import android.view.View +import android.view.animation.Animation +import android.view.animation.DecelerateInterpolator +import android.view.animation.Transformation +import android.widget.ImageView +import android.widget.RelativeLayout +import androidx.appcompat.widget.LinearLayoutCompat + +class TouchCardAnimation(private var context: Context, + private var ivHandCardHorizontal: ImageView, + private var ivHandCardVertical: ImageView, + private var llHand: LinearLayoutCompat, + private var llNfc: LinearLayoutCompat) { + + companion object { + const val CARD_ON_BACK = 0 + const val CARD_ON_FRONT = 1 + const val CARD_ORIENTATION_HORIZONTAL = 0 + const val CARD_ORIENTATION_VERTICAL = 1 + } + + var orientation: Int = 0 + var fullName: String = "" + var x: Float = 0.toFloat() + var y: Float = 0.toFloat() + var z: Int = 0 + + fun init() { + getAntennaLocation() + setCardOrientation() + animate() + } + + fun animate() { + val lp = llHand.layoutParams as RelativeLayout.LayoutParams + val lp2 = llNfc.layoutParams as RelativeLayout.LayoutParams + val dp = context.resources.displayMetrics.density + val lm = dp * (69 + x * 75) + lp.topMargin = (dp * (-100 + y * 250)).toInt() + lp2.topMargin = (dp * (-125 + y * 250)).toInt() + llNfc.layoutParams = lp2 + + val a = object : Animation() { + override fun applyTransformation(interpolatedTime: Float, t: Transformation) { + lp.leftMargin = (lm * interpolatedTime).toInt() + llHand.layoutParams = lp + } + } + a.duration = 2000 + a.interpolator = DecelerateInterpolator() + llHand.startAnimation(a) + } + + private fun getAntennaLocation() { + val codename = Build.DEVICE + + // default values + this.orientation = 0 + this.fullName = "" + this.x = 0.5f + this.y = 0.35f + this.z = 0 + + for (nfcLocation in NfcLocation.values()) { + if (codename.startsWith(nfcLocation.codename)) { + this.fullName = nfcLocation.fullName + this.orientation = nfcLocation.orientation + this.x = nfcLocation.x / 100f + this.y = nfcLocation.y / 100f + this.z = nfcLocation.z + } + } + } + + private fun setCardOrientation() { + when (orientation) { + CARD_ORIENTATION_HORIZONTAL -> { + ivHandCardHorizontal.visibility = View.VISIBLE + ivHandCardVertical.visibility = View.GONE + } + + CARD_ORIENTATION_VERTICAL -> { + ivHandCardVertical.visibility = View.VISIBLE + ivHandCardHorizontal.visibility = View.GONE + } + } + + // set card z position + when (z) { + TouchCardAnimation.CARD_ON_BACK -> llHand.elevation = 0.0f + TouchCardAnimation.CARD_ON_FRONT -> llHand.elevation = 30.0f + } + } + +} \ No newline at end of file diff --git a/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/Utils.kt b/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/Utils.kt new file mode 100644 index 0000000000..3340a96626 --- /dev/null +++ b/tangem-sdk-new/src/main/java/com/tangem/tangem_sdk_new/Utils.kt @@ -0,0 +1,11 @@ +package com.tangem.tangem_sdk_new + +import android.os.Handler +import android.os.Looper + + +val uiHandler = Handler(Looper.getMainLooper()) + +fun postUI(msTime: Long = 0, func: () -> Unit) { + if (msTime > 0) uiHandler.postDelayed({ func() }, msTime) else uiHandler.post(func) +} \ No newline at end of file diff --git a/tangem-sdk-new/src/main/res/drawable/hand_card_horizontal.png b/tangem-sdk-new/src/main/res/drawable/hand_card_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc8b14ad67a8da7579e2071f3ec6a2f1d82ac7b GIT binary patch literal 17362 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 JPDHLkV1j=up*H{k literal 0 HcmV?d00001 diff --git a/tangem-sdk-new/src/main/res/drawable/hand_card_vertical.png b/tangem-sdk-new/src/main/res/drawable/hand_card_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..8b0a7ee8d9cdc0bca7162a3315abffedb6edc68a GIT binary patch literal 15582 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 literal 0 HcmV?d00001 diff --git a/tangem-sdk-new/src/main/res/drawable/smartphone.png b/tangem-sdk-new/src/main/res/drawable/smartphone.png new file mode 100644 index 0000000000000000000000000000000000000000..25c8da2f192424b76d6bec74b17703cde16457a6 GIT binary patch literal 4876 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 F{0}f9F)IK7 literal 0 HcmV?d00001 diff --git a/tangem-sdk-new/src/main/res/layout/layout_touch_card.xml b/tangem-sdk-new/src/main/res/layout/layout_touch_card.xml new file mode 100644 index 0000000000..1cb313a80a --- /dev/null +++ b/tangem-sdk-new/src/main/res/layout/layout_touch_card.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tangem-sdk-new/src/main/res/layout/nfc_bottom_sheet.xml b/tangem-sdk-new/src/main/res/layout/nfc_bottom_sheet.xml new file mode 100644 index 0000000000..3ed8b1ded6 --- /dev/null +++ b/tangem-sdk-new/src/main/res/layout/nfc_bottom_sheet.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/tangem-sdk-new/src/main/res/values/colors.xml b/tangem-sdk-new/src/main/res/values/colors.xml new file mode 100644 index 0000000000..b154cb7818 --- /dev/null +++ b/tangem-sdk-new/src/main/res/values/colors.xml @@ -0,0 +1,8 @@ + + + #027aff + #027AFF + #027AFF + #4f98c0 + + \ No newline at end of file diff --git a/tangem-sdk-new/src/main/res/values/dimens.xml b/tangem-sdk-new/src/main/res/values/dimens.xml new file mode 100644 index 0000000000..73c2ec40b2 --- /dev/null +++ b/tangem-sdk-new/src/main/res/values/dimens.xml @@ -0,0 +1,4 @@ + + + 135dp + \ No newline at end of file diff --git a/tangem-sdk-new/src/main/res/values/strings.xml b/tangem-sdk-new/src/main/res/values/strings.xml index 3b47e62c4a..00f45c6bc6 100644 --- a/tangem-sdk-new/src/main/res/values/strings.xml +++ b/tangem-sdk-new/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ Tangem Sdk + READING…