Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package org.mozilla.tryfox

import android.content.Intent
import android.net.Uri
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.hasText
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.test.core.app.ActivityScenario
Expand All @@ -23,27 +25,32 @@ class MainActivityDeeplinkTest {
fun testDeeplink_withHash_populatesRevision() {
val project = "try"
val revision = "abcdef123456"
val deeplinkUri = Uri.parse("https://treeherder.mozilla.org/#/jobs?repo=$project&revision=$revision")
val intent = Intent(ApplicationProvider.getApplicationContext(), MainActivity::class.java).apply {
action = Intent.ACTION_VIEW
data = deeplinkUri
}
val deeplinkUri =
Uri.parse("https://treeherder.mozilla.org/#/jobs?repo=$project&revision=$revision")
val intent =
Intent(ApplicationProvider.getApplicationContext(), MainActivity::class.java).apply {
action = Intent.ACTION_VIEW
data = deeplinkUri
}

ActivityScenario.launch<MainActivity>(intent).use {
composeTestRule.waitForIdle()
composeTestRule.onNodeWithText(revision).assertExists()
composeTestRule.onNodeWithText("Revision").assert(hasText(revision))
composeTestRule.onNodeWithText("Project").assert(hasText(project))
}
}

@Test
fun testDeeplink_withoutHash_populatesRevision() {
val project = "mozilla-central"
val revision = "fedcba654321"
val deeplinkUri = Uri.parse("https://treeherder.mozilla.org/jobs?repo=$project&revision=$revision")
val intent = Intent(ApplicationProvider.getApplicationContext(), MainActivity::class.java).apply {
action = Intent.ACTION_VIEW
data = deeplinkUri
}
val deeplinkUri =
Uri.parse("https://treeherder.mozilla.org/jobs?repo=$project&revision=$revision")
val intent =
Intent(ApplicationProvider.getApplicationContext(), MainActivity::class.java).apply {
action = Intent.ACTION_VIEW
data = deeplinkUri
}

ActivityScenario.launch<MainActivity>(intent).use {
composeTestRule.waitForIdle()
Expand All @@ -58,12 +65,14 @@ class MainActivityDeeplinkTest {

val project = "autoland"
val revision = "abcdef123456"
val deeplinkUri = Uri.parse("https://treeherder.mozilla.org/#/jobs?repo=$project&revision=$revision")
val intent = Intent(ApplicationProvider.getApplicationContext(), MainActivity::class.java).apply {
action = Intent.ACTION_VIEW
data = deeplinkUri
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
val deeplinkUri =
Uri.parse("https://treeherder.mozilla.org/#/jobs?repo=$project&revision=$revision")
val intent =
Intent(ApplicationProvider.getApplicationContext(), MainActivity::class.java).apply {
action = Intent.ACTION_VIEW
data = deeplinkUri
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}

// Now send the deeplink intent
ApplicationProvider.getApplicationContext<android.content.Context>().startActivity(intent)
Expand All @@ -76,11 +85,13 @@ class MainActivityDeeplinkTest {
fun testDeeplink_withAuthorEmail_populatesProfileScreen() {
val email = "tthibaud@mozilla.com"
val encodedEmail = "tthibaud%40mozilla.com"
val deeplinkUri = Uri.parse("https://treeherder.mozilla.org/jobs?repo=try&author=$encodedEmail")
val intent = Intent(ApplicationProvider.getApplicationContext(), MainActivity::class.java).apply {
action = Intent.ACTION_VIEW
data = deeplinkUri
}
val deeplinkUri =
Uri.parse("https://treeherder.mozilla.org/jobs?repo=try&author=$encodedEmail")
val intent =
Intent(ApplicationProvider.getApplicationContext(), MainActivity::class.java).apply {
action = Intent.ACTION_VIEW
data = deeplinkUri
}

ActivityScenario.launch<MainActivity>(intent).use {
composeTestRule.waitForIdle()
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/org/mozilla/tryfox/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,8 @@ class MainActivity : ComponentActivity() {
},
),
) { backStackEntry ->
val project = backStackEntry.arguments?.getString("project") ?: "try"
val revision = backStackEntry.arguments?.getString("revision") ?: ""
val project = backStackEntry.arguments?.getString("project")
val revision = backStackEntry.arguments?.getString("revision")
Log.d(
"MainActivity",
"TreeherderSearchWithArgs composable: project='$project', revision='$revision' from NavBackStackEntry. ID: ${backStackEntry.id}",
Expand Down
16 changes: 13 additions & 3 deletions app/src/main/java/org/mozilla/tryfox/TryFoxViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import org.mozilla.tryfox.data.DownloadState
import org.mozilla.tryfox.data.IFenixRepository
import org.mozilla.tryfox.data.NetworkResult
import org.mozilla.tryfox.data.managers.CacheManager
import org.mozilla.tryfox.data.managers.IntentManager
import org.mozilla.tryfox.model.CacheManagementState
import org.mozilla.tryfox.ui.models.AbiUiModel
import org.mozilla.tryfox.ui.models.ArtifactUiModel
Expand All @@ -35,19 +36,20 @@ import java.io.File
* @param fenixRepository The repository for fetching data from the network.
* @param cacheManager The manager for handling application cache.
* @param revision The initial revision to search for.
* @param repo The initial repository to search in.
* @param project The initial repository to search in.
*/
class TryFoxViewModel(
private val fenixRepository: IFenixRepository,
private val downloadFileRepository: DownloadFileRepository,
private val cacheManager: CacheManager,
private val intentManager: IntentManager,
project: String?,
revision: String?,
repo: String?,
) : ViewModel() {
var revision by mutableStateOf(revision ?: "")
private set

var selectedProject by mutableStateOf(repo ?: "try")
var selectedProject by mutableStateOf(project ?: "try")
private set

var relevantPushComment by mutableStateOf<String?>(null)
Expand Down Expand Up @@ -78,6 +80,10 @@ class TryFoxViewModel(
private val deviceSupportedAbis: List<String> by lazy { Build.SUPPORTED_ABIS.toList() }

init {
Log.d("TryFoxViewModel", "TryFoxViewModel created with revision: $revision, repo: $project")
if (revision != null) {
searchJobsAndArtifacts()
}
cacheManager.cacheState.onEach { state ->
if (state is CacheManagementState.IdleEmpty) {
// Reset download states for artifacts in this ViewModel
Expand Down Expand Up @@ -369,4 +375,8 @@ class TryFoxViewModel(
}
checkAndUpdateDownloadingStatus()
}

fun installApk(file: File) {
intentManager.installApk(file)
}
}
1 change: 1 addition & 0 deletions app/src/main/java/org/mozilla/tryfox/di/AppModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ val viewModelModule = module {
get(),
get(),
get(),
get(),
params.getOrNull(),
params.getOrNull(),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,6 @@ private fun DisplayArtifactCard(
onDownloadClick = {
viewModel.downloadArtifact(artifact)
},
onInstallClick = { viewModel.onInstallApk?.invoke(it) },
onInstallClick = { viewModel.installApk(it) },
)
}