mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-18 14:55:26 +02:00
current stand
This commit is contained in:
parent
5416fcb046
commit
a816f2355d
@ -106,6 +106,7 @@ dependencies {
|
||||
implementation 'androidx.appcompat:appcompat:1.6.1'
|
||||
implementation 'androidx.documentfile:documentfile:1.0.1'
|
||||
implementation 'androidx.lifecycle:lifecycle-service:2.6.2'
|
||||
implementation 'androidx.test.uiautomator:uiautomator:2.2.0'
|
||||
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
|
||||
@ -144,8 +145,14 @@ dependencies {
|
||||
implementation "androidx.camera:camera-view:${camerax_version}"
|
||||
implementation "androidx.camera:camera-extensions:${camerax_version}"
|
||||
|
||||
|
||||
implementation "com.valentinilk.shimmer:compose-shimmer:1.2.0"
|
||||
|
||||
implementation "androidx.biometric:biometric-ktx:1.2.0-alpha05"
|
||||
|
||||
implementation "androidx.fragment:fragment-ktx:1.6.2"
|
||||
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
|
||||
androidTestImplementation 'androidx.test:runner:1.5.2'
|
||||
androidTestImplementation 'androidx.test:rules:1.5.0'
|
||||
androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3'
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package app.myzel394.alibi
|
||||
|
||||
import android.accessibilityservice.AccessibilityService
|
||||
import android.os.Build
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.ui.test.assertIsDisplayed
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.test.espresso.Espresso.onView
|
||||
import androidx.test.espresso.matcher.ViewMatchers.isRoot
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import androidx.test.filters.LargeTest
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.rule.GrantPermissionRule
|
||||
import androidx.test.rule.GrantPermissionRule.grant
|
||||
import androidx.test.uiautomator.By
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import androidx.test.uiautomator.UiSelector
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
@LargeTest
|
||||
class MicrophoneRecordingTest {
|
||||
private val permissions = arrayOf(
|
||||
android.Manifest.permission.RECORD_AUDIO,
|
||||
android.Manifest.permission.CAMERA,
|
||||
)
|
||||
|
||||
@get:Rule
|
||||
val composeTestRule = createComposeRule()
|
||||
|
||||
@JvmField
|
||||
@Rule
|
||||
val permissionRule: GrantPermissionRule =
|
||||
grant(*permissions)
|
||||
|
||||
@Test
|
||||
fun runMicrophoneTest() {
|
||||
composeTestRule.setContent {
|
||||
AlibiApp()
|
||||
}
|
||||
|
||||
finishTutorial(composeTestRule)
|
||||
|
||||
composeTestRule.onNodeWithTag("AudioRecorderStartButton").performClick()
|
||||
onView(isRoot()).perform(waitFor(1000))
|
||||
composeTestRule.onNodeWithTag("SaveButton").performClick()
|
||||
onView(isRoot()).perform(waitFor(1000))
|
||||
|
||||
UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()).pressBack()
|
||||
|
||||
composeTestRule.onNodeWithTag("AudioRecorderStartButton").assertIsDisplayed()
|
||||
}
|
||||
}
|
24
app/src/androidTest/java/app/myzel394/alibi/utils.kt
Normal file
24
app/src/androidTest/java/app/myzel394/alibi/utils.kt
Normal file
@ -0,0 +1,24 @@
|
||||
package app.myzel394.alibi
|
||||
|
||||
import android.view.View
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.test.espresso.UiController
|
||||
import androidx.test.espresso.ViewAction
|
||||
import androidx.test.espresso.matcher.ViewMatchers.isRoot
|
||||
|
||||
fun waitFor(delay: Long): ViewAction {
|
||||
return object : ViewAction {
|
||||
override fun getConstraints() = isRoot()
|
||||
override fun getDescription(): String = "wait for $delay milliseconds"
|
||||
override fun perform(uiController: UiController, v: View?) {
|
||||
uiController.loopMainThreadForAtLeast(delay)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun finishTutorial(composeTestRule: ComposeContentTestRule) {
|
||||
composeTestRule.onNodeWithTag("ExplanationContinueButton").performClick()
|
||||
composeTestRule.onNodeWithTag("ResponsibilityContinueButton").performClick()
|
||||
}
|
31
app/src/main/java/app/myzel394/alibi/AlibiApp.kt
Normal file
31
app/src/main/java/app/myzel394/alibi/AlibiApp.kt
Normal file
@ -0,0 +1,31 @@
|
||||
package app.myzel394.alibi
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import app.myzel394.alibi.ui.AsLockedApp
|
||||
import app.myzel394.alibi.ui.LockedAppHandlers
|
||||
import app.myzel394.alibi.ui.Navigation
|
||||
import app.myzel394.alibi.ui.theme.AlibiTheme
|
||||
|
||||
@Composable
|
||||
fun AlibiApp() {
|
||||
AlibiTheme {
|
||||
LockedAppHandlers()
|
||||
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(
|
||||
MaterialTheme.colorScheme.background
|
||||
)
|
||||
) {
|
||||
AsLockedApp {
|
||||
Navigation()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -30,21 +30,7 @@ class MainActivity : AppCompatActivity() {
|
||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||
|
||||
setContent {
|
||||
AlibiTheme {
|
||||
LockedAppHandlers()
|
||||
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(
|
||||
MaterialTheme.colorScheme.background
|
||||
)
|
||||
) {
|
||||
AsLockedApp {
|
||||
Navigation()
|
||||
}
|
||||
}
|
||||
}
|
||||
AlibiApp()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.semantics.contentDescription
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
@ -29,6 +30,7 @@ fun SaveButton(
|
||||
.semantics {
|
||||
contentDescription = label
|
||||
}
|
||||
.testTag("SaveButton")
|
||||
.then(modifier),
|
||||
onClick = onSave,
|
||||
colors = ButtonDefaults.textButtonColors(),
|
||||
|
@ -23,6 +23,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.semantics.contentDescription
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
@ -67,7 +68,8 @@ fun AudioRecordingStart(
|
||||
contentDescription = label
|
||||
}
|
||||
.size(250.dp)
|
||||
.clip(shape = CircleShape),
|
||||
.clip(shape = CircleShape)
|
||||
.testTag("AudioRecorderStartButton"),
|
||||
colors = ButtonDefaults.outlinedButtonColors(),
|
||||
) {
|
||||
Column(
|
||||
|
@ -20,6 +20,7 @@ import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import app.myzel394.alibi.R
|
||||
@ -63,7 +64,8 @@ fun ExplanationPage(
|
||||
modifier = Modifier
|
||||
.padding(16.dp)
|
||||
.fillMaxWidth()
|
||||
.height(BIG_PRIMARY_BUTTON_SIZE),
|
||||
.height(BIG_PRIMARY_BUTTON_SIZE)
|
||||
.testTag("ExplanationContinueButton"),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.ChevronRight,
|
||||
|
@ -20,6 +20,7 @@ import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import app.myzel394.alibi.R
|
||||
@ -63,7 +64,8 @@ fun ResponsibilityPage(
|
||||
modifier = Modifier
|
||||
.padding(16.dp)
|
||||
.fillMaxWidth()
|
||||
.height(BIG_PRIMARY_BUTTON_SIZE),
|
||||
.height(BIG_PRIMARY_BUTTON_SIZE)
|
||||
.testTag("ResponsibilityContinueButton"),
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Check,
|
||||
|
@ -35,17 +35,17 @@ fun WelcomeScreen(
|
||||
val pagerState = rememberPagerState(
|
||||
initialPage = 0,
|
||||
initialPageOffsetFraction = 0f,
|
||||
pageCount = {2}
|
||||
pageCount = { 2 }
|
||||
)
|
||||
|
||||
Scaffold() {padding ->
|
||||
Scaffold() { padding ->
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.padding(padding),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
HorizontalPager(state = pagerState) {position ->
|
||||
HorizontalPager(state = pagerState) { position ->
|
||||
when (position) {
|
||||
0 -> ExplanationPage(
|
||||
onContinue = {
|
||||
@ -54,12 +54,12 @@ fun WelcomeScreen(
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
1 -> ResponsibilityPage {
|
||||
scope.launch {
|
||||
dataStore.updateData {
|
||||
settings.setHasSeenOnboarding(true)
|
||||
}
|
||||
navController.navigate(Screen.AudioRecorder.route)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user