diff --git a/.idea/androidTestResultsUserPreferences.xml b/.idea/androidTestResultsUserPreferences.xml
index b7119ac08..1c3cb7253 100644
--- a/.idea/androidTestResultsUserPreferences.xml
+++ b/.idea/androidTestResultsUserPreferences.xml
@@ -97,6 +97,19 @@
+
+
+
+
+
+
+
@@ -111,6 +124,19 @@
+
+
+
+
+
+
+
diff --git a/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityBehaviorTest.kt b/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityBehaviorTest.kt
index 5078111ea..068111095 100644
--- a/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityBehaviorTest.kt
+++ b/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityBehaviorTest.kt
@@ -45,6 +45,7 @@ import com.itsaky.androidide.testing.android.hasObjectWithText
import com.itsaky.androidide.testing.android.launchAndroidIDE
import com.itsaky.androidide.testing.android.stringRes
import com.itsaky.androidide.testing.android.uiAutomation
+import com.itsaky.androidide.utils.isAtLeastR
import com.itsaky.androidide.utils.isAtLeastT
import org.junit.FixMethodOrder
import org.junit.Rule
@@ -200,7 +201,11 @@ class OnboardingActivityBehaviorTest {
grantButton.clickAndWaitForNewWindow()
// check permission denied behavior
- device.handleAndroidRPermissions(false)
+ if (permissionDesc == R.string.permission_desc_install_packages || isAtLeastR()) {
+ device.handlePermissionInSettings(false)
+ } else {
+ device.getObjectWithText("DENY").clickAndWaitForWindowUpdate(device)
+ }
// verify AndroidIDE is visible
assertThat(device.currentPackageName).isEqualTo(BuildInfo.PACKAGE_NAME)
@@ -218,7 +223,11 @@ class OnboardingActivityBehaviorTest {
grantButton.clickAndWaitForNewWindow()
// check permission granted behavior
- device.handleAndroidRPermissions(true)
+ if (permissionDesc == R.string.permission_desc_install_packages || isAtLeastR()) {
+ device.handlePermissionInSettings(true)
+ } else {
+ device.getObjectWithText("ALLOW").clickAndWaitForWindowUpdate(device)
+ }
grantButton = device.getObjectWithText(permissionDesc)
.parent!!
diff --git a/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityStatesTest.kt b/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityStatesTest.kt
index 52adbe881..5b35fdaa7 100644
--- a/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityStatesTest.kt
+++ b/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityStatesTest.kt
@@ -18,14 +18,12 @@
package com.itsaky.androidide.activities
import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.FlakyTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import com.adevinta.android.barista.assertion.BaristaCheckedAssertions.assertChecked
import com.adevinta.android.barista.assertion.BaristaCheckedAssertions.assertUnchecked
import com.adevinta.android.barista.assertion.BaristaEnabledAssertions.assertDisabled
import com.adevinta.android.barista.assertion.BaristaEnabledAssertions.assertEnabled
-import com.adevinta.android.barista.assertion.BaristaRecyclerViewAssertions.assertRecyclerViewItemCount
import com.adevinta.android.barista.assertion.BaristaVisibilityAssertions.assertDisplayed
import com.adevinta.android.barista.assertion.BaristaVisibilityAssertions.assertNotDisplayed
import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickBack
@@ -34,7 +32,6 @@ import com.adevinta.android.barista.rule.BaristaRule
import com.google.common.truth.Truth.assertThat
import com.itsaky.androidide.R
import com.itsaky.androidide.preferences.internal.statOptIn
-import com.itsaky.androidide.testing.android.launchAndroidIDE
import com.itsaky.androidide.testing.android.stringRes
import org.junit.FixMethodOrder
import org.junit.Rule
diff --git a/app/src/androidTest/java/com/itsaky/androidide/activities/onboardingUtils.kt b/app/src/androidTest/java/com/itsaky/androidide/activities/onboardingUtils.kt
index a13ea58fa..06c02c19e 100644
--- a/app/src/androidTest/java/com/itsaky/androidide/activities/onboardingUtils.kt
+++ b/app/src/androidTest/java/com/itsaky/androidide/activities/onboardingUtils.kt
@@ -22,13 +22,13 @@ import android.widget.Switch
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiObject2
-import androidx.test.uiautomator.UiSelector
import com.google.common.truth.Truth.assertThat
import com.itsaky.androidide.R
import com.itsaky.androidide.testing.android.clickAndWaitForNewWindow
import com.itsaky.androidide.testing.android.clickAndWaitForWindowUpdate
import com.itsaky.androidide.testing.android.getObjectWithText
import com.itsaky.androidide.testing.android.hasObjectWithText
+import com.itsaky.androidide.utils.isAtLeastR
/**
* @author Akash Yadav
@@ -52,8 +52,12 @@ fun UiDevice.grantAndroidIDEPermissions() {
.findObject(By.clazz(Button::class.java))
if (grantButton.text != null) {
- grantButton.clickAndWaitForNewWindow()
- handleAndroidRPermissions(allowPermission = true)
+ if (desc == R.string.permission_desc_install_packages || isAtLeastR()) {
+ grantButton.clickAndWaitForNewWindow()
+ handlePermissionInSettings(allowPermission = true)
+ } else {
+ getObjectWithText("ALLOW").clickAndWaitForWindowUpdate(this)
+ }
}
}
@@ -65,26 +69,26 @@ fun UiDevice.nextButton(): UiObject2 {
return findObject(By.desc("NEXT"))!!
}
-fun UiDevice.handleAndroidRPermissions(
+fun UiDevice.handlePermissionInSettings(
allowPermission: Boolean = true,
) {
assertThat(currentPackageName).isAnyOf("com.android.settings", "com.android.permissioncontroller")
assertThat(hasObjectWithText(R.string.app_name)).isTrue()
- val storageSwitch = findObject(UiSelector().className(Switch::class.java))
- assertThat(storageSwitch).isNotNull()
+ val switch = findObject(By.clazz(Switch::class.java))
+ assertThat(switch).isNotNull()
// verify initial state
- assertThat(storageSwitch.isCheckable).isTrue()
- assertThat(storageSwitch.isEnabled).isTrue()
- assertThat(storageSwitch.isChecked).isFalse()
+ assertThat(switch.isCheckable).isTrue()
+ assertThat(switch.isEnabled).isTrue()
+ assertThat(switch.isChecked).isFalse()
if (allowPermission) {
// enable permission
- storageSwitch.click()
+ switch.click()
// verify changed state
- assertThat(storageSwitch.isChecked).isTrue()
+ assertThat(switch.isChecked).isTrue()
}
// navigate back without enabling the permission