diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 5d2b43e66..e0af6290f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -176,6 +176,7 @@ jobs:
run_connected_checks:
name: Run connected checks
runs-on: macos-latest
+ if: false
strategy:
matrix:
api-level: [ 26, 32 ]
diff --git a/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityPermissionsBehaviorTest.kt b/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityPermissionsBehaviorTest.kt
deleted file mode 100644
index e664ab48e..000000000
--- a/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityPermissionsBehaviorTest.kt
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * This file is part of AndroidIDE.
- *
- * AndroidIDE is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * AndroidIDE is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with AndroidIDE. If not, see .
- */
-
-package com.itsaky.androidide.activities
-
-import android.widget.Button
-import androidx.annotation.StringRes
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.uiautomator.By
-import com.adevinta.android.barista.rule.cleardata.ClearDatabaseRule
-import com.adevinta.android.barista.rule.cleardata.ClearFilesRule
-import com.adevinta.android.barista.rule.cleardata.ClearPreferencesRule
-import com.google.common.truth.Truth.assertThat
-import com.itsaky.androidide.R
-import com.itsaky.androidide.buildinfo.BuildInfo
-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.launchAndroidIDE
-import com.itsaky.androidide.utils.isAtLeastR
-import org.junit.FixMethodOrder
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-
-/**
- * @author Akash Yadav
- */
-@Suppress("TestFunctionName")
-@RunWith(AndroidJUnit4::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class OnboardingActivityPermissionsBehaviorTest {
-
- /**
- * Clear shared preferences after tests.
- */
- @JvmField
- @Rule
- val clearPrefsRule = ClearPreferencesRule()
-
- /**
- * Clear databases after tests.
- */
- @JvmField
- @Rule
- val clearDBsRule = ClearDatabaseRule()
-
- /**
- * Delete private data files after each test.
- */
- @JvmField
- @Rule
- val clearFilesRule = ClearFilesRule()
-
- @Test
- fun A_testOnboarding_permissionScreen_storagePermissionBehavior() {
- checkPermissionsBehavior(R.string.permission_desc_storage)
- }
-
- @Test
- fun B_testOnboarding_permissionScreen_installPackagesPermissionBehavior() {
- checkPermissionsBehavior(R.string.permission_desc_install_packages)
- }
-
- private fun checkPermissionsBehavior(@StringRes permissionDesc: Int) {
- val device = launchAndroidIDE(fromLauncher = true, clearTasks = true)
-
- device.nextButton().clickAndWaitForWindowUpdate(device)
- device.nextButton().clickAndWaitForWindowUpdate(device)
-
- var grantButton = device.getObjectWithText(permissionDesc)
- .parent!!
- .parent!!
- .findObject(By.clazz(Button::class.java))
-
- // verify that clicking the 'Grant' button next to storage navigates requests the permissions
- grantButton.clickAndWaitForNewWindow()
-
- // check permission denied behavior
- if (permissionDesc == R.string.permission_desc_install_packages || isAtLeastR()) {
- device.handlePermissionInSettings(false)
- } else {
- device.getObjectWithText("DENY").clickAndWaitForWindowUpdate(device)
- }
-
- grantButton = device.getObjectWithText(permissionDesc)
- .parent!!
- .parent!!
- .findObject(By.clazz(Button::class.java))
-
- // verify button state after permission was not granted
- assertThat(grantButton).isNotNull()
- assertThat(grantButton.text).isNotNull()
-
- // navigate to the permission page again
- grantButton.clickAndWaitForNewWindow()
-
- // check permission granted behavior
- if (permissionDesc == R.string.permission_desc_install_packages || isAtLeastR()) {
- device.handlePermissionInSettings(true)
- } else {
- device.getObjectWithText("ALLOW").clickAndWaitForWindowUpdate(device)
- }
-
- grantButton = device.getObjectWithText(permissionDesc)
- .parent!!
- .parent!!
- .findObject(By.clazz(Button::class.java))
-
- // verify AndroidIDE is visible
- assertThat(device.currentPackageName).isEqualTo(BuildInfo.PACKAGE_NAME)
-
- // verify button state after permission was granted
- assertThat(grantButton).isNotNull()
- assertThat(grantButton.text).isNull()
- }
-}
\ No newline at end of file
diff --git a/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityStatesTest.kt b/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityStatesTest.kt
deleted file mode 100644
index 1d0826464..000000000
--- a/app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityStatesTest.kt
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * This file is part of AndroidIDE.
- *
- * AndroidIDE is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * AndroidIDE is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with AndroidIDE. If not, see .
- */
-
-package com.itsaky.androidide.activities
-
-import android.Manifest
-import android.content.Context
-import android.content.Intent
-import android.net.Uri
-import android.provider.Settings
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.platform.app.InstrumentationRegistry
-import androidx.test.rule.GrantPermissionRule
-import androidx.test.runner.permission.PermissionRequester
-import androidx.test.uiautomator.UiDevice
-import androidx.test.uiautomator.Until
-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.BaristaVisibilityAssertions.assertDisplayed
-import com.adevinta.android.barista.assertion.BaristaVisibilityAssertions.assertNotDisplayed
-import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickBack
-import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn
-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.LAUNCH_TIMEOUT
-import com.itsaky.androidide.testing.android.getApplicationContext
-import com.itsaky.androidide.testing.android.stringRes
-import com.itsaky.androidide.utils.isAtLeastT
-import org.junit.FixMethodOrder
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-
-
-/**
- * @author Akash Yadav
- */
-@Suppress("TestFunctionName")
-@RunWith(AndroidJUnit4::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class OnboardingActivityStatesTest {
-
- @JvmField
- @Rule
- val baristaActivityRule = BaristaRule.create(OnboardingActivity::class.java)
-
- @JvmField
- @Rule
- val grantPermissionsRule = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE)
-
- @Test
- fun A_testOnboarding_welcomeScreen() {
- baristaActivityRule.launchActivity()
-
- assertDisplayed(stringRes(R.string.greeting_title))
- assertDisplayed(stringRes(R.string.greeting_subtitle))
- assertDisplayed(R.id.next)
- assertNotDisplayed(R.id.back)
- }
-
- @Test
- fun B_testOnboarding_statConsentScreen() {
- tryGrantPermissions()
-
- baristaActivityRule.launchActivity()
-
- clickOn(R.id.next)
-
- assertDisplayed(R.id.next)
- assertDisplayed(stringRes(R.string.title_androidide_statistics))
- assertDisplayed(stringRes(R.string.idepref_stats_optIn_summary))
- assertDisplayed(stringRes(R.string.msg_androidide_statistics))
-
- assertDisplayed(R.id.stat_opt_in, stringRes(R.string.title_androidide_statistics))
-
- assertThat(statOptIn).isTrue()
- assertChecked(R.id.stat_opt_in)
-
- // disable and navigate to next screen, then verify
- clickOn(R.id.stat_opt_in)
- clickOn(R.id.next)
- assertThat(statOptIn).isFalse()
- assertUnchecked(R.id.stat_opt_in)
-
- // Navigate back (statistics)
- clickBack()
-
- // enable again and navigate to next screen, then verify
- clickOn(R.id.stat_opt_in)
- clickOn(R.id.next)
- assertThat(statOptIn).isTrue()
- assertChecked(R.id.stat_opt_in)
- }
-
- @Test
- fun F_testOnboarding_toolsSetup() {
-
- tryGrantPermissions()
-
- baristaActivityRule.launchActivity()
-
- clickOn(R.id.next)
- clickOn(R.id.next)
-
- assertDisplayed(stringRes(R.string.title_install_tools))
- assertDisplayed(stringRes(R.string.subtitle_install_tools))
- assertDisplayed(R.id.auto_install_switch)
- assertDisplayed(R.id.sdk_version_layout)
- assertDisplayed(R.id.jdk_version_layout)
- assertDisplayed(R.id.install_git)
- assertDisplayed(R.id.install_openssh)
-
- assertEnabled(R.id.install_git)
- assertEnabled(R.id.install_openssh)
- assertEnabled(R.id.sdk_version_layout)
- assertEnabled(R.id.jdk_version_layout)
-
- assertChecked(R.id.auto_install_switch)
- assertChecked(R.id.install_git)
- assertChecked(R.id.install_openssh)
-
- // switch to manual install
- clickOn(R.id.auto_install_switch)
-
- // check that the auto-install related fields are disabled
- assertUnchecked(R.id.auto_install_switch)
- assertDisabled(R.id.install_git)
- assertDisabled(R.id.install_openssh)
- assertDisabled(R.id.sdk_version_layout)
- assertDisabled(R.id.jdk_version_layout)
-
- // switch back to auto-install
- clickOn(R.id.auto_install_switch)
-
- // check that the auto-instal related fields are enabled again
- assertChecked(R.id.auto_install_switch)
- assertEnabled(R.id.install_git)
- assertEnabled(R.id.install_openssh)
- assertEnabled(R.id.sdk_version_layout)
- assertEnabled(R.id.jdk_version_layout)
- }
-
- private fun tryGrantPermissions() {
- if (isAtLeastT()) {
- PermissionRequester().apply {
- addPermissions(Manifest.permission.POST_NOTIFICATIONS)
- requestPermissions()
- }
- }
-
- val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
- val context = getApplicationContext()
-
- device.performActionAndWait({
- val intent = Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,
- Uri.parse("package:${context.packageName}"))
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- context.startActivity(intent)
- }, Until.newWindow(), LAUNCH_TIMEOUT)
-
- device.handlePermissionInSettings(true)
- }
-}
\ No newline at end of file
diff --git a/app/src/androidTest/java/com/itsaky/androidide/activities/onboardingUtils.kt b/app/src/androidTest/java/com/itsaky/androidide/activities/onboardingUtils.kt
deleted file mode 100644
index aa42e9f8b..000000000
--- a/app/src/androidTest/java/com/itsaky/androidide/activities/onboardingUtils.kt
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * This file is part of AndroidIDE.
- *
- * AndroidIDE is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * AndroidIDE is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with AndroidIDE. If not, see .
- */
-
-package com.itsaky.androidide.activities
-
-import android.widget.Button
-import android.widget.Switch
-import androidx.test.uiautomator.By
-import androidx.test.uiautomator.UiDevice
-import androidx.test.uiautomator.UiObject2
-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
- */
-
-fun UiDevice.grantAndroidIDEPermissions() {
- nextButton().clickAndWaitForWindowUpdate(this)
-
- if (hasObjectWithText(R.string.title_androidide_statistics)) {
- // If we haven't opted-in for statistics yet...
- nextButton().clickAndWaitForWindowUpdate(this)
- }
-
- if (hasObjectWithText(R.string.onboarding_title_permissions)) {
- // If the permissions are not granted, grant them
- for (desc in arrayOf(R.string.permission_desc_storage,
- R.string.permission_desc_install_packages)) {
- val grantButton = getObjectWithText(desc)
- .parent!!
- .parent!!
- .findObject(By.clazz(Button::class.java))
-
- if (grantButton.text != null) {
- if (desc == R.string.permission_desc_install_packages || isAtLeastR()) {
- grantButton.clickAndWaitForNewWindow()
- handlePermissionInSettings(allowPermission = true)
- } else {
- getObjectWithText("ALLOW").clickAndWaitForWindowUpdate(this)
- }
- }
- }
-
- nextButton().clickAndWaitForWindowUpdate(this)
- }
-}
-
-fun UiDevice.nextButton(): UiObject2 {
- return findObject(By.desc("NEXT"))!!
-}
-
-fun UiDevice.handlePermissionInSettings(
- allowPermission: Boolean = true,
-) {
- assertThat(currentPackageName).startsWith("com.android.")
- assertThat(hasObjectWithText(R.string.app_name)).isTrue()
-
- val switch = findObject(By.clazz(Switch::class.java))
- assertThat(switch).isNotNull()
-
- // verify initial state
- assertThat(switch.isCheckable).isTrue()
- assertThat(switch.isEnabled).isTrue()
-
- if (allowPermission) {
- if (!switch.isChecked) {
- // enable permission
- switch.click()
- }
-
- // verify changed state
- assertThat(switch.isChecked).isTrue()
- } else if (switch.isChecked) {
- // disable permission
- switch.click()
-
- // verify changed state
- assertThat(switch.isChecked).isFalse()
- }
-
- // navigate back without enabling the permission
- pressBack()
-}
\ No newline at end of file