[#209] Compose dependency update
* [#209] Update Compose dependency to latest version 1.2.0-beta03 - Update dependency - Align our integration tests with the new Compose requirements - Add integration folder to tests, if missing - Split integration tests, which require activity to separate classes - Remove unnecessary custom activity for each integration app part and create one custom common activity - Implement Downloadable fonts from Compose 1.2 - Update Third party licenses documentation
This commit is contained in:
parent
3d5ed7b10b
commit
90c2fcb255
|
@ -6,4 +6,4 @@ The majority of the contents of this Git repository are covered under the [LICEN
|
|||
|
||||
|
||||
## Rubik Font
|
||||
The fonts under the [font](../ui-lib/src/main/res/ui/common/font) directory are downloaded from [Google Fonts](https://fonts.google.com/specimen/Rubik) and are licensed under the [Open Font License](https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL).
|
||||
We use fonts from Rubik font family. The fonts are downloaded from [Google Fonts](https://fonts.google.com/specimen/Rubik) and are licensed under the [Open Font License](https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL).
|
||||
|
|
|
@ -94,7 +94,7 @@ ANDROIDX_APPCOMPAT_VERSION=1.4.1
|
|||
ANDROIDX_CAMERA_VERSION=1.1.0-rc01
|
||||
ANDROIDX_COMPOSE_COMPILER_VERSION=1.2.0-beta03
|
||||
ANDROIDX_COMPOSE_MATERIAL3_VERSION=1.0.0-alpha13
|
||||
ANDROIDX_COMPOSE_VERSION=1.1.1
|
||||
ANDROIDX_COMPOSE_VERSION=1.2.0-beta03
|
||||
ANDROIDX_CONSTRAINTLAYOUT_VERSION=1.0.0
|
||||
ANDROIDX_CORE_VERSION=1.7.0
|
||||
ANDROIDX_ESPRESSO_VERSION=3.5.0-alpha07
|
||||
|
|
|
@ -164,6 +164,7 @@ dependencyResolutionManagement {
|
|||
library("androidx-compose-material-icons-extended", "androidx.compose.material:material-icons-extended:$androidxComposeVersion")
|
||||
library("androidx-compose-tooling", "androidx.compose.ui:ui-tooling:$androidxComposeVersion")
|
||||
library("androidx-compose-ui", "androidx.compose.ui:ui:$androidxComposeVersion")
|
||||
library("androidx-compose-ui-fonts", "androidx.compose.ui:ui-text-google-fonts:$androidxComposeVersion")
|
||||
library("androidx-compose-compiler", "androidx.compose.compiler:compiler:$androidxComposeCompilerVersion")
|
||||
library("androidx-core", "androidx.core:core-ktx:$androidxCoreVersion")
|
||||
library("androidx-constraintlayout", "androidx.constraintlayout:constraintlayout-compose:$androidxConstraintlayoutVersion")
|
||||
|
@ -219,6 +220,7 @@ dependencyResolutionManagement {
|
|||
"androidx-compose-material3",
|
||||
"androidx-compose-tooling",
|
||||
"androidx-compose-ui",
|
||||
"androidx-compose-ui-fonts"
|
||||
)
|
||||
)
|
||||
bundle(
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
package co.electriccoin.zcash.ui.design.compat
|
||||
|
||||
import android.content.Context
|
||||
import androidx.annotation.FontRes
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import co.electriccoin.zcash.spackle.AndroidApiVersion
|
||||
import co.electriccoin.zcash.ui.design.R
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
object FontCompat {
|
||||
fun isFontPrefetchNeeded() = !AndroidApiVersion.isAtLeastO
|
||||
|
||||
suspend fun prefetchFontsLegacy(context: Context) {
|
||||
prefetchFontLegacy(context, R.font.rubik_medium)
|
||||
prefetchFontLegacy(context, R.font.rubik_regular)
|
||||
}
|
||||
|
||||
/**
|
||||
* Pre-fetches fonts on Android N (API 25) and below.
|
||||
*/
|
||||
/*
|
||||
* ResourcesCompat is used implicitly by Compose on older Android versions.
|
||||
* The backwards compatibility library performs disk IO and then
|
||||
* caches the results. This moves that IO off the main thread, to prevent ANRs and
|
||||
* jank during app startup.
|
||||
*/
|
||||
private suspend fun prefetchFontLegacy(context: Context, @FontRes fontRes: Int) =
|
||||
withContext(Dispatchers.IO) {
|
||||
ResourcesCompat.getFont(context, fontRes)
|
||||
}
|
||||
}
|
|
@ -3,39 +3,56 @@ package co.electriccoin.zcash.ui.design.theme.internal
|
|||
import androidx.compose.material3.Typography
|
||||
import androidx.compose.runtime.Immutable
|
||||
import androidx.compose.runtime.staticCompositionLocalOf
|
||||
import androidx.compose.ui.text.ExperimentalTextApi
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.font.Font
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.googlefonts.Font
|
||||
import androidx.compose.ui.text.googlefonts.GoogleFont
|
||||
import androidx.compose.ui.text.style.BaselineShift
|
||||
import androidx.compose.ui.unit.ExperimentalUnitApi
|
||||
import androidx.compose.ui.unit.sp
|
||||
import co.electriccoin.zcash.ui.design.R
|
||||
|
||||
private val Rubik = FontFamily(
|
||||
Font(R.font.rubik_regular, FontWeight.W400),
|
||||
Font(R.font.rubik_medium, FontWeight.W500)
|
||||
@OptIn(ExperimentalTextApi::class)
|
||||
private val provider = GoogleFont.Provider(
|
||||
providerAuthority = "com.google.android.gms.fonts",
|
||||
providerPackage = "com.google.android.gms",
|
||||
certificates = R.array.com_google_android_gms_fonts_certs
|
||||
)
|
||||
|
||||
@OptIn(ExperimentalUnitApi::class)
|
||||
// We use bestEffort here to be able to get the closest font weight, if accidentally use
|
||||
// an unspecified font weight and not the default one.
|
||||
@OptIn(ExperimentalTextApi::class)
|
||||
private val RubikFont = GoogleFont(name = "Rubik", bestEffort = true)
|
||||
|
||||
@OptIn(ExperimentalTextApi::class)
|
||||
private val RubikFontFamily = FontFamily(
|
||||
Font(googleFont = RubikFont, fontProvider = provider, weight = FontWeight.Normal), // W400
|
||||
Font(googleFont = RubikFont, fontProvider = provider, weight = FontWeight.Medium), // W500
|
||||
Font(googleFont = RubikFont, fontProvider = provider, weight = FontWeight.SemiBold), // W600
|
||||
Font(googleFont = RubikFont, fontProvider = provider, weight = FontWeight.Bold) // W700
|
||||
)
|
||||
|
||||
// If you change this definition of our Typography, don't forget to check if you use only
|
||||
// the defined font weights above, otherwise the closest one will be used.
|
||||
internal val Typography = Typography(
|
||||
headlineLarge = TextStyle(
|
||||
fontFamily = Rubik,
|
||||
fontWeight = FontWeight.W600,
|
||||
fontFamily = RubikFontFamily,
|
||||
fontWeight = FontWeight.SemiBold,
|
||||
fontSize = 30.sp,
|
||||
),
|
||||
bodyLarge = TextStyle(
|
||||
fontFamily = Rubik,
|
||||
fontFamily = RubikFontFamily,
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 16.sp
|
||||
),
|
||||
bodySmall = TextStyle(
|
||||
fontFamily = Rubik,
|
||||
fontFamily = RubikFontFamily,
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 16.sp
|
||||
),
|
||||
labelLarge = TextStyle(
|
||||
fontFamily = Rubik,
|
||||
fontFamily = RubikFontFamily,
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 16.sp
|
||||
),
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright 2022 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<resources>
|
||||
<array name="com_google_android_gms_fonts_certs">
|
||||
<item>@array/com_google_android_gms_fonts_certs_dev</item>
|
||||
<item>@array/com_google_android_gms_fonts_certs_prod</item>
|
||||
</array>
|
||||
<string-array name="com_google_android_gms_fonts_certs_dev">
|
||||
<item>
|
||||
MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs=
|
||||
</item>
|
||||
</string-array>
|
||||
<string-array name="com_google_android_gms_fonts_certs_prod">
|
||||
<item>
|
||||
MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK
|
||||
</item>
|
||||
</string-array>
|
||||
</resources>
|
|
@ -6,7 +6,7 @@
|
|||
<application
|
||||
android:label="zcash-ui-integration-test">
|
||||
<activity
|
||||
android:name="co.electriccoin.zcash.ui.integration.test.screen.scan.TestScanActivity"
|
||||
android:name="co.electriccoin.zcash.ui.integration.test.common.IntegrationTestingActivity"
|
||||
android:exported="false" />
|
||||
</application>
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
package co.electriccoin.zcash.ui.integration.test.common
|
||||
|
||||
import androidx.activity.ComponentActivity
|
||||
|
||||
class IntegrationTestingActivity : ComponentActivity()
|
|
@ -1,37 +0,0 @@
|
|||
package co.electriccoin.zcash.ui.integration.test.screen.scan
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.ui.Modifier
|
||||
import co.electriccoin.zcash.ui.design.component.GradientSurface
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.screen.scan.WrapScan
|
||||
|
||||
class TestScanActivity : ComponentActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setupUiContent()
|
||||
}
|
||||
|
||||
private fun setupUiContent() {
|
||||
setContent {
|
||||
ZcashTheme {
|
||||
GradientSurface(
|
||||
Modifier
|
||||
.fillMaxWidth()
|
||||
.fillMaxHeight()
|
||||
) {
|
||||
WrapScan(
|
||||
this,
|
||||
goBack = {},
|
||||
onScanned = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,8 +6,8 @@ import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
|||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import androidx.test.filters.LargeTest
|
||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||
import co.electriccoin.zcash.ui.integration.test.common.IntegrationTestingActivity
|
||||
import co.electriccoin.zcash.ui.integration.test.getPermissionPositiveButtonUiObject
|
||||
import co.electriccoin.zcash.ui.integration.test.screen.scan.TestScanActivity
|
||||
import co.electriccoin.zcash.ui.screen.scan.ScanTag
|
||||
import co.electriccoin.zcash.ui.screen.scan.model.ScanState
|
||||
import org.junit.Assert
|
||||
|
@ -19,7 +19,7 @@ import org.junit.Test
|
|||
class ScanViewIntegrationTest : UiTestPrerequisites() {
|
||||
|
||||
@get:Rule
|
||||
val composeTestRule = createAndroidComposeRule<TestScanActivity>()
|
||||
val composeTestRule = createAndroidComposeRule<IntegrationTestingActivity>()
|
||||
|
||||
private lateinit var testSetup: ScanViewTestSetup
|
||||
|
||||
|
|
|
@ -11,9 +11,9 @@ import androidx.compose.ui.test.performClick
|
|||
import androidx.test.filters.LargeTest
|
||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.integration.test.common.IntegrationTestingActivity
|
||||
import co.electriccoin.zcash.ui.integration.test.getPermissionPositiveButtonUiObject
|
||||
import co.electriccoin.zcash.ui.integration.test.getStringResource
|
||||
import co.electriccoin.zcash.ui.integration.test.screen.scan.TestScanActivity
|
||||
import co.electriccoin.zcash.ui.integration.test.waitForDeviceIdle
|
||||
import co.electriccoin.zcash.ui.screen.scan.ScanTag
|
||||
import co.electriccoin.zcash.ui.screen.scan.model.ScanState
|
||||
|
@ -28,7 +28,7 @@ import kotlin.time.Duration.Companion.milliseconds
|
|||
class ScanViewTest : UiTestPrerequisites() {
|
||||
|
||||
@get:Rule
|
||||
val composeTestRule = createAndroidComposeRule<TestScanActivity>()
|
||||
val composeTestRule = createAndroidComposeRule<IntegrationTestingActivity>()
|
||||
|
||||
private lateinit var testSetup: ScanViewTestSetup
|
||||
|
||||
|
|
|
@ -6,13 +6,7 @@
|
|||
<application
|
||||
android:label="zcash-ui-test" >
|
||||
<activity
|
||||
android:name="co.electriccoin.zcash.ui.screen.onboarding.TestOnboardingActivity"
|
||||
android:exported="false" />
|
||||
<activity
|
||||
android:name="co.electriccoin.zcash.ui.screen.backup.TestBackupActivity"
|
||||
android:exported="false" />
|
||||
<activity
|
||||
android:name="co.electriccoin.zcash.ui.screen.update.TestUpdateActivity"
|
||||
android:name="co.electriccoin.zcash.ui.common.UiTestingActivity"
|
||||
android:exported="false" />
|
||||
</application>
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
package co.electriccoin.zcash.ui.common
|
||||
|
||||
import androidx.activity.ComponentActivity
|
||||
|
||||
class UiTestingActivity : ComponentActivity()
|
|
@ -1,40 +0,0 @@
|
|||
package co.electriccoin.zcash.ui.screen.backup
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.ui.Modifier
|
||||
import cash.z.ecc.sdk.fixture.PersistableWalletFixture
|
||||
import co.electriccoin.zcash.ui.design.component.GradientSurface
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.screen.backup.model.BackupStage
|
||||
import co.electriccoin.zcash.ui.screen.backup.state.BackupState
|
||||
|
||||
class TestBackupActivity : ComponentActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setupUiContent()
|
||||
}
|
||||
|
||||
private fun setupUiContent() {
|
||||
setContent {
|
||||
ZcashTheme {
|
||||
GradientSurface(
|
||||
Modifier
|
||||
.fillMaxWidth()
|
||||
.fillMaxHeight()
|
||||
) {
|
||||
WrapBackup(
|
||||
persistableWallet = PersistableWalletFixture.new(),
|
||||
backupState = BackupState(BackupStage.EducationOverview),
|
||||
onCopyToClipboard = {},
|
||||
onBackupComplete = {}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package co.electriccoin.zcash.ui.screen.backup.integration
|
||||
|
||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.test.filters.MediumTest
|
||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.common.UiTestingActivity
|
||||
import co.electriccoin.zcash.ui.fixture.TestChoicesFixture
|
||||
import co.electriccoin.zcash.ui.screen.backup.model.BackupStage
|
||||
import co.electriccoin.zcash.ui.screen.backup.view.BackupTestSetup
|
||||
import co.electriccoin.zcash.ui.test.getStringResource
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
||||
class BackupActivityTest : UiTestPrerequisites() {
|
||||
|
||||
@get:Rule
|
||||
val composeTestRule = createAndroidComposeRule<UiTestingActivity>()
|
||||
|
||||
private fun newTestSetup(): BackupTestSetup {
|
||||
return BackupTestSetup(
|
||||
composeTestRule,
|
||||
BackupStage.EducationOverview,
|
||||
TestChoicesFixture.new(TestChoicesFixture.INITIAL_CHOICES)
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun current_stage_restoration_activity() {
|
||||
val testSetup = newTestSetup()
|
||||
testSetup.setDefaultContent()
|
||||
|
||||
assertEquals(BackupStage.EducationOverview, testSetup.getStage())
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_1_button)).also {
|
||||
it.performClick()
|
||||
}
|
||||
|
||||
assertEquals(BackupStage.EducationRecoveryPhrase, testSetup.getStage())
|
||||
|
||||
composeTestRule.activityRule.scenario.onActivity {
|
||||
it.recreate()
|
||||
}
|
||||
|
||||
assertEquals(BackupStage.EducationRecoveryPhrase, testSetup.getStage())
|
||||
}
|
||||
}
|
|
@ -1,8 +1,8 @@
|
|||
package co.electriccoin.zcash.ui.screen.backup.view
|
||||
package co.electriccoin.zcash.ui.screen.backup.integration
|
||||
|
||||
import androidx.compose.ui.test.hasTestTag
|
||||
import androidx.compose.ui.test.junit4.StateRestorationTester
|
||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import androidx.compose.ui.test.onAllNodesWithTag
|
||||
import androidx.compose.ui.test.onChildren
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
|
@ -12,16 +12,17 @@ import co.electriccoin.zcash.test.UiTestPrerequisites
|
|||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.fixture.TestChoicesFixture
|
||||
import co.electriccoin.zcash.ui.screen.backup.BackupTag
|
||||
import co.electriccoin.zcash.ui.screen.backup.TestBackupActivity
|
||||
import co.electriccoin.zcash.ui.screen.backup.model.BackupStage
|
||||
import co.electriccoin.zcash.ui.screen.backup.view.BackupTestSetup
|
||||
import co.electriccoin.zcash.ui.test.getStringResource
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
||||
class BackupIntegrationTest : UiTestPrerequisites() {
|
||||
|
||||
@get:Rule
|
||||
val composeTestRule = createAndroidComposeRule<TestBackupActivity>()
|
||||
val composeTestRule = createComposeRule()
|
||||
|
||||
private fun newTestSetup(initialStage: BackupStage): BackupTestSetup {
|
||||
return BackupTestSetup(
|
||||
|
@ -92,25 +93,4 @@ class BackupIntegrationTest : UiTestPrerequisites() {
|
|||
assertEquals(2, testSetup.getOnChoicesCallbackCount())
|
||||
assertEquals(4, testSetup.getSelectedChoicesCount())
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun current_stage_restoration_activity() {
|
||||
val testSetup = newTestSetup(BackupStage.EducationOverview)
|
||||
testSetup.setDefaultContent()
|
||||
|
||||
assertEquals(BackupStage.EducationOverview, testSetup.getStage())
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_1_button)).also {
|
||||
it.performClick()
|
||||
}
|
||||
|
||||
assertEquals(BackupStage.EducationRecoveryPhrase, testSetup.getStage())
|
||||
|
||||
composeTestRule.activityRule.scenario.onActivity {
|
||||
it.recreate()
|
||||
}
|
||||
|
||||
assertEquals(BackupStage.EducationRecoveryPhrase, testSetup.getStage())
|
||||
}
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
package co.electriccoin.zcash.ui.screen.onboarding
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.viewModels
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.ui.Modifier
|
||||
import co.electriccoin.zcash.ui.design.component.GradientSurface
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.screen.onboarding.view.Onboarding
|
||||
import co.electriccoin.zcash.ui.screen.onboarding.viewmodel.OnboardingViewModel
|
||||
|
||||
class TestOnboardingActivity : ComponentActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setupUiContent()
|
||||
}
|
||||
|
||||
private fun setupUiContent() {
|
||||
setContent {
|
||||
ZcashTheme {
|
||||
GradientSurface(
|
||||
Modifier
|
||||
.fillMaxWidth()
|
||||
.fillMaxHeight()
|
||||
) {
|
||||
WrapOnboarding()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun WrapOnboarding() {
|
||||
val onboardingViewModel by viewModels<OnboardingViewModel>()
|
||||
|
||||
// TODO [#383]: https://github.com/zcash/secant-android-wallet/issues/383
|
||||
if (!onboardingViewModel.isImporting.collectAsState().value) {
|
||||
Onboarding(
|
||||
onboardingState = onboardingViewModel.onboardingState,
|
||||
isDebugMenuEnabled = false,
|
||||
onImportWallet = { onboardingViewModel.isImporting.value = true },
|
||||
onCreateWallet = {},
|
||||
onFixtureWallet = {}
|
||||
)
|
||||
|
||||
reportFullyDrawn()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package co.electriccoin.zcash.ui.screen.onboarding.integration
|
||||
|
||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.test.filters.MediumTest
|
||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.common.UiTestingActivity
|
||||
import co.electriccoin.zcash.ui.screen.onboarding.model.OnboardingStage
|
||||
import co.electriccoin.zcash.ui.screen.onboarding.view.OnboardingTestSetup
|
||||
import co.electriccoin.zcash.ui.test.getStringResource
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
||||
// TODO [#382]: https://github.com/zcash/secant-android-wallet/issues/382
|
||||
class OnboardingActivityTest : UiTestPrerequisites() {
|
||||
@get:Rule
|
||||
val composeTestRule = createAndroidComposeRule<UiTestingActivity>()
|
||||
|
||||
private fun newTestSetup() = OnboardingTestSetup(composeTestRule, OnboardingStage.ShieldedByDefault)
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun current_stage_restoration_activity() {
|
||||
val testSetup = newTestSetup()
|
||||
testSetup.setDefaultContent()
|
||||
|
||||
assertEquals(OnboardingStage.ShieldedByDefault, testSetup.getOnboardingStage())
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.onboarding_next)).also {
|
||||
it.performClick()
|
||||
}
|
||||
|
||||
assertEquals(OnboardingStage.UnifiedAddresses, testSetup.getOnboardingStage())
|
||||
|
||||
composeTestRule.activityRule.scenario.onActivity {
|
||||
it.recreate()
|
||||
}
|
||||
|
||||
assertEquals(OnboardingStage.UnifiedAddresses, testSetup.getOnboardingStage())
|
||||
}
|
||||
}
|
|
@ -1,14 +1,14 @@
|
|||
package co.electriccoin.zcash.ui.screen.onboarding.view
|
||||
package co.electriccoin.zcash.ui.screen.onboarding.integration
|
||||
|
||||
import androidx.compose.ui.test.junit4.StateRestorationTester
|
||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.test.filters.MediumTest
|
||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.screen.onboarding.TestOnboardingActivity
|
||||
import co.electriccoin.zcash.ui.screen.onboarding.model.OnboardingStage
|
||||
import co.electriccoin.zcash.ui.screen.onboarding.view.OnboardingTestSetup
|
||||
import co.electriccoin.zcash.ui.test.getStringResource
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Rule
|
||||
|
@ -17,7 +17,7 @@ import org.junit.Test
|
|||
// TODO [#382]: https://github.com/zcash/secant-android-wallet/issues/382
|
||||
class OnboardingIntegrationTest : UiTestPrerequisites() {
|
||||
@get:Rule
|
||||
val composeTestRule = createAndroidComposeRule<TestOnboardingActivity>()
|
||||
val composeTestRule = createComposeRule()
|
||||
|
||||
private fun newTestSetup(initialStage: OnboardingStage) = OnboardingTestSetup(composeTestRule, initialStage)
|
||||
|
||||
|
@ -49,25 +49,4 @@ class OnboardingIntegrationTest : UiTestPrerequisites() {
|
|||
|
||||
assertEquals(OnboardingStage.More, testSetup.getOnboardingStage())
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun current_stage_restoration_activity() {
|
||||
val testSetup = newTestSetup(OnboardingStage.ShieldedByDefault)
|
||||
testSetup.setDefaultContent()
|
||||
|
||||
assertEquals(OnboardingStage.ShieldedByDefault, testSetup.getOnboardingStage())
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.onboarding_next)).also {
|
||||
it.performClick()
|
||||
}
|
||||
|
||||
assertEquals(OnboardingStage.UnifiedAddresses, testSetup.getOnboardingStage())
|
||||
|
||||
composeTestRule.activityRule.scenario.onActivity {
|
||||
it.recreate()
|
||||
}
|
||||
|
||||
assertEquals(OnboardingStage.UnifiedAddresses, testSetup.getOnboardingStage())
|
||||
}
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
package co.electriccoin.zcash.ui.screen.update
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.ui.Modifier
|
||||
import co.electriccoin.zcash.ui.design.component.GradientSurface
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.screen.update.fixture.UpdateInfoFixture
|
||||
|
||||
class TestUpdateActivity : ComponentActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setupUiContent()
|
||||
}
|
||||
|
||||
private fun setupUiContent() {
|
||||
setContent {
|
||||
ZcashTheme {
|
||||
GradientSurface(
|
||||
Modifier
|
||||
.fillMaxWidth()
|
||||
.fillMaxHeight()
|
||||
) {
|
||||
WrapUpdate(
|
||||
this,
|
||||
UpdateInfoFixture.new(appUpdateInfo = null)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
package co.electriccoin.zcash.ui.screen.update.integration
|
||||
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.test.filters.MediumTest
|
||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||
import co.electriccoin.zcash.ui.common.UiTestingActivity
|
||||
import co.electriccoin.zcash.ui.screen.update.AppUpdateChecker
|
||||
import co.electriccoin.zcash.ui.screen.update.UpdateTag
|
||||
import co.electriccoin.zcash.ui.screen.update.fixture.UpdateInfoFixture
|
||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateInfo
|
||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateState
|
||||
import co.electriccoin.zcash.ui.screen.update.view.UpdateViewTestSetup
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
||||
class UpdateActivityViewTest : UiTestPrerequisites() {
|
||||
|
||||
@get:Rule
|
||||
val composeTestRule = createAndroidComposeRule<UiTestingActivity>()
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun later_btn_force_update_test() {
|
||||
val updateInfo = UpdateInfoFixture.new(
|
||||
priority = AppUpdateChecker.Priority.HIGH,
|
||||
force = true,
|
||||
appUpdateInfo = null,
|
||||
state = UpdateState.Prepared,
|
||||
)
|
||||
val testSetup = newTestSetup(updateInfo)
|
||||
|
||||
assertEquals(0, testSetup.getOnLaterCount())
|
||||
|
||||
composeTestRule.clickLater()
|
||||
|
||||
assertEquals(0, testSetup.getOnLaterCount())
|
||||
|
||||
composeTestRule.activity.onBackPressed()
|
||||
|
||||
assertEquals(0, testSetup.getOnLaterCount())
|
||||
}
|
||||
|
||||
private fun newTestSetup(updateInfo: UpdateInfo) = UpdateViewTestSetup(
|
||||
composeTestRule,
|
||||
updateInfo
|
||||
).apply {
|
||||
setDefaultContent()
|
||||
}
|
||||
}
|
||||
|
||||
private fun ComposeContentTestRule.clickLater() {
|
||||
onNodeWithTag(UpdateTag.BTN_LATER).also {
|
||||
it.performClick()
|
||||
}
|
||||
}
|
|
@ -3,8 +3,8 @@ package co.electriccoin.zcash.ui.screen.update.integration
|
|||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.test.filters.MediumTest
|
||||
import co.electriccoin.zcash.ui.common.UiTestingActivity
|
||||
import co.electriccoin.zcash.ui.screen.update.AppUpdateChecker
|
||||
import co.electriccoin.zcash.ui.screen.update.TestUpdateActivity
|
||||
import co.electriccoin.zcash.ui.screen.update.fixture.UpdateInfoFixture
|
||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateInfo
|
||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateState
|
||||
|
@ -26,7 +26,7 @@ import kotlin.test.assertNull
|
|||
@ExperimentalCoroutinesApi
|
||||
class UpdateViewModelTest {
|
||||
@get:Rule
|
||||
val composeTestRule = createAndroidComposeRule<TestUpdateActivity>()
|
||||
val composeTestRule = createAndroidComposeRule<UiTestingActivity>()
|
||||
|
||||
private lateinit var viewModel: UpdateViewModel
|
||||
private lateinit var checker: AppUpdateCheckerMock
|
||||
|
|
|
@ -2,12 +2,12 @@ package co.electriccoin.zcash.ui.screen.update.view
|
|||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.filters.MediumTest
|
||||
import cash.z.ecc.android.sdk.ext.onFirst
|
||||
import co.electriccoin.zcash.ui.screen.update.AppUpdateCheckerImp
|
||||
import co.electriccoin.zcash.ui.screen.update.TestUpdateActivity
|
||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateInfo
|
||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateState
|
||||
import com.google.android.play.core.install.model.ActivityResult
|
||||
|
@ -15,7 +15,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
|
|||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Rule
|
||||
import kotlin.test.Test
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertNotNull
|
||||
import kotlin.test.assertNull
|
||||
import kotlin.test.assertTrue
|
||||
|
@ -23,7 +23,7 @@ import kotlin.test.assertTrue
|
|||
class AppUpdateCheckerImpTest {
|
||||
|
||||
@get:Rule
|
||||
val composeTestRule = createAndroidComposeRule<TestUpdateActivity>()
|
||||
val composeTestRule = createAndroidComposeRule<ComponentActivity>()
|
||||
|
||||
companion object {
|
||||
val context: Context = ApplicationProvider.getApplicationContext()
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package co.electriccoin.zcash.ui.screen.update.view
|
||||
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.onRoot
|
||||
|
@ -10,7 +10,6 @@ import androidx.test.filters.MediumTest
|
|||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.screen.update.AppUpdateChecker
|
||||
import co.electriccoin.zcash.ui.screen.update.TestUpdateActivity
|
||||
import co.electriccoin.zcash.ui.screen.update.UpdateTag
|
||||
import co.electriccoin.zcash.ui.screen.update.fixture.UpdateInfoFixture
|
||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateInfo
|
||||
|
@ -24,29 +23,7 @@ import org.junit.Test
|
|||
class UpdateViewTest : UiTestPrerequisites() {
|
||||
|
||||
@get:Rule
|
||||
val composeTestRule = createAndroidComposeRule<TestUpdateActivity>()
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun later_btn_force_update_test() {
|
||||
val updateInfo = UpdateInfoFixture.new(
|
||||
priority = AppUpdateChecker.Priority.HIGH,
|
||||
force = true,
|
||||
appUpdateInfo = null,
|
||||
state = UpdateState.Prepared,
|
||||
)
|
||||
val testSetup = newTestSetup(updateInfo)
|
||||
|
||||
assertEquals(0, testSetup.getOnLaterCount())
|
||||
|
||||
composeTestRule.clickLater()
|
||||
|
||||
assertEquals(0, testSetup.getOnLaterCount())
|
||||
|
||||
composeTestRule.activity.onBackPressed()
|
||||
|
||||
assertEquals(0, testSetup.getOnLaterCount())
|
||||
}
|
||||
val composeTestRule = createComposeRule()
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
|
|
|
@ -23,7 +23,6 @@ import androidx.navigation.compose.composable
|
|||
import androidx.navigation.compose.rememberNavController
|
||||
import cash.z.ecc.sdk.model.ZecRequest
|
||||
import cash.z.ecc.sdk.send
|
||||
import co.electriccoin.zcash.ui.design.compat.FontCompat
|
||||
import co.electriccoin.zcash.ui.design.component.ConfigurationOverride
|
||||
import co.electriccoin.zcash.ui.design.component.GradientSurface
|
||||
import co.electriccoin.zcash.ui.design.component.Override
|
||||
|
@ -82,15 +81,7 @@ class MainActivity : ComponentActivity() {
|
|||
|
||||
setupSplashScreen()
|
||||
|
||||
if (FontCompat.isFontPrefetchNeeded()) {
|
||||
lifecycleScope.launch {
|
||||
FontCompat.prefetchFontsLegacy(applicationContext)
|
||||
|
||||
setupUiContent()
|
||||
}
|
||||
} else {
|
||||
setupUiContent()
|
||||
}
|
||||
setupUiContent()
|
||||
}
|
||||
|
||||
private fun setupSplashScreen() {
|
||||
|
|
Loading…
Reference in New Issue