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 @@ -65,7 +65,8 @@ class AndroidApplication : Application() {

private val platformInfo by lazy {
object : PlatformInfo {
override val version = "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})"
override val buildName: String = BuildConfig.VERSION_NAME
override val buildNumber: String = BuildConfig.VERSION_CODE.toString()
override val platform = Platform.Android
override val osVersion = Build.VERSION.SDK_INT.toString()
override val model = "${Build.MANUFACTURER} ${Build.MODEL}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
onboarding1.webp
onboarding2.webp
onboarding3.webp
onboarding.webp
onboarding.webp
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@

logo_probe.xml
logo_probe.xml
ooni_logo.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<resources>
<string name="shareEmailTo" translatable="false">mailto:bugs@openobservatory.org</string>
<string name="shareSubject" translatable="false">[bug-report] OONI Probe %1$s</string>
<string name="version" translatable="false">%1$s: %2$s</string>
</resources>
14 changes: 3 additions & 11 deletions composeApp/src/commonMain/kotlin/org/ooni/engine/Engine.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ import org.ooni.engine.models.TaskSettings
import org.ooni.engine.models.resultOf
import org.ooni.probe.config.OrganizationConfig
import org.ooni.probe.data.models.InstalledTestDescriptorModel
import org.ooni.probe.shared.Platform
import org.ooni.probe.shared.PlatformInfo
import org.ooni.probe.shared.value

class Engine(
private val bridge: OonimkallBridge,
Expand Down Expand Up @@ -133,7 +133,7 @@ class Engine(
options = TaskSettings.Options(
noCollector = !preferences.uploadResults,
softwareName = buildSoftwareName(taskOrigin),
softwareVersion = platformInfo.version,
softwareVersion = platformInfo.buildName,
maxRuntime = preferences.maxRuntime?.inWholeSeconds?.toInt() ?: -1,
),
annotations = TaskSettings.Annotations(
Expand All @@ -150,7 +150,7 @@ class Engine(
preferences: EnginePreferences,
) = OonimkallBridge.SessionConfig(
softwareName = buildSoftwareName(taskOrigin),
softwareVersion = platformInfo.version,
softwareVersion = platformInfo.buildName,
proxy = preferences.proxy,
probeServicesURL = OrganizationConfig.ooniApiBaseUrl,
stateDir = "$baseFilePath/state",
Expand All @@ -165,16 +165,8 @@ class Engine(
OrganizationConfig.baseSoftwareName +
"-" +
platformInfo.platform.value +
"-" +
(if (taskOrigin == TaskOrigin.AutoRun) "-" + "unattended" else "")

private val Platform.value
get() =
when (this) {
Platform.Android -> "android"
Platform.Ios -> "ios"
}

private val oonimkallLogger by lazy {
object : OonimkallBridge.Logger {
override fun debug(msg: String?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,10 @@ class Dependencies(

// ViewModels

fun aboutViewModel(onBack: () -> Unit) = AboutViewModel(onBack = onBack, launchUrl = { launchUrl(it, emptyMap()) })
fun aboutViewModel(onBack: () -> Unit) =
AboutViewModel(onBack = onBack, launchUrl = {
launchUrl(it, emptyMap())
}, platformInfo = platformInfo)

fun addDescriptorViewModel(
descriptorId: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ package org.ooni.probe.shared

interface PlatformInfo {
val version: String
get() = "$buildName ($buildNumber)"
val buildName: String
val buildNumber: String
val platform: Platform
val osVersion: String
val model: String
Expand All @@ -12,3 +15,10 @@ enum class Platform {
Android,
Ios,
}

val Platform.value
get() =
when (this) {
Platform.Android -> "android"
Platform.Ios -> "ios"
}
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,11 @@ fun Navigation(
val viewModel = viewModel {
dependencies.aboutViewModel(onBack = { navController.navigateUp() })
}
AboutScreen(onEvent = viewModel::onEvent)
AboutScreen(
onEvent = viewModel::onEvent,
softwareName = viewModel.softwareName,
softwareVersion = viewModel.softwareVersion,
)
}

PreferenceCategoryKey.PROXY.value -> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,44 +1,73 @@
package org.ooni.probe.ui.settings.about

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import ooniprobe.composeapp.generated.resources.Res
import ooniprobe.composeapp.generated.resources.Settings_About_Content_Paragraph
import ooniprobe.composeapp.generated.resources.Settings_About_Label
import ooniprobe.composeapp.generated.resources.back
import ooniprobe.composeapp.generated.resources.version
import org.jetbrains.compose.resources.stringResource
import org.ooni.probe.ui.shared.MarkdownViewer

@Composable
fun AboutScreen(onEvent: (AboutViewModel.Event) -> Unit) {
LazyColumn {
fun AboutScreen(
onEvent: (AboutViewModel.Event) -> Unit,
softwareName: String,
softwareVersion: String,
) {
LazyColumn(modifier = Modifier.padding(WindowInsets.navigationBars.asPaddingValues())) {
item {
LargeTopAppBar(
title = {
Text(stringResource(Res.string.Settings_About_Label))
},
navigationIcon = {
IconButton(onClick = { onEvent(AboutViewModel.Event.BackClicked) }) {
Icon(
Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = stringResource(Res.string.back),
)
}
},
)
Box(
modifier = Modifier.fillMaxWidth().wrapContentSize(Alignment.TopStart),
) {
InfoBackground(
modifier = Modifier.align(Alignment.BottomCenter).height(200.dp).fillMaxWidth(),
)
Text(
text = stringResource(Res.string.version, softwareName, softwareVersion),
color = Color.White,
modifier = Modifier.align(Alignment.BottomCenter).padding(16.dp),
)

LargeTopAppBar(
title = {},
navigationIcon = {
IconButton(onClick = { onEvent(AboutViewModel.Event.BackClicked) }) {
Icon(
Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = stringResource(Res.string.back),
tint = Color.White,
)
}
},
colors = TopAppBarDefaults.largeTopAppBarColors(
containerColor = MaterialTheme.colorScheme.background.copy(alpha = 0f),
),
)
}
}
item {
Column(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@ import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import org.ooni.probe.config.OrganizationConfig
import org.ooni.probe.shared.PlatformInfo
import org.ooni.probe.shared.value

class AboutViewModel(
onBack: () -> Unit,
launchUrl: (String) -> Unit,
platformInfo: PlatformInfo,
) : ViewModel() {
private val events = MutableSharedFlow<Event>(extraBufferCapacity = 1)

Expand All @@ -23,6 +27,9 @@ class AboutViewModel(
events.tryEmit(event)
}

val softwareName = "${OrganizationConfig.baseSoftwareName}-${platformInfo.platform.value}"
val softwareVersion = platformInfo.version

sealed interface Event {
data object BackClicked : Event

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ class EngineTest {
networkTypeFinder = networkTypeFinder,
isBatteryCharging = { true },
platformInfo = object : PlatformInfo {
override val version = "1"
override val buildName: String = "1"
override val buildNumber: String = "1"
override val platform = Platform.Ios
override val osVersion = "1"
override val model = "test"
Expand Down
21 changes: 21 additions & 0 deletions composeApp/src/dwMain/kotlin/org/ooni/probe/ui/about/InfoLinks.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,28 @@
package org.ooni.probe.ui.settings.about

import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import ooniprobe.composeapp.generated.resources.Res
import ooniprobe.composeapp.generated.resources.onboarding
import org.jetbrains.compose.resources.painterResource

@Composable
fun InfoLinks(launchUrl: (String) -> Unit) {
}

@Composable
fun InfoBackground(modifier: Modifier) {
Box(modifier = modifier.background(Color(0xFFD32625))) {
Image(
painter = painterResource(Res.drawable.onboarding),
contentDescription = null,
modifier = Modifier.align(Alignment.Center).fillMaxWidth(),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,8 @@ class SetupDependencies(

private val platformInfo: PlatformInfo
get() = object : PlatformInfo {
override val version =
override val buildName = NSBundle.mainBundle.infoDictionary?.get("CFBundleShortVersionString") as? String ?: ""
override val buildNumber =
(NSBundle.mainBundle.infoDictionary?.get("CFBundleVersion") as? String).orEmpty()
override val platform = Platform.Ios
override val osVersion = with(UIDevice.currentDevice) { "$systemName $systemVersion" }
Expand Down
Loading