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 @@ -13,13 +13,13 @@ import ooniprobe.composeapp.generated.resources.Dashboard_Overview_ChooseWebsite
import ooniprobe.composeapp.generated.resources.Dashboard_Progress_UpdateLink_Label
import ooniprobe.composeapp.generated.resources.Dashboard_Running_Running
import ooniprobe.composeapp.generated.resources.Dashboard_Tab_Label
import ooniprobe.composeapp.generated.resources.Modal_EnableNotifications_Title
import ooniprobe.composeapp.generated.resources.Notification_StopTest
import ooniprobe.composeapp.generated.resources.OONIRun_Run
import ooniprobe.composeapp.generated.resources.Onboarding_AutomatedTesting_Title
import ooniprobe.composeapp.generated.resources.Onboarding_Crash_Title
import ooniprobe.composeapp.generated.resources.Onboarding_DefaultSettings_Button_Go
import ooniprobe.composeapp.generated.resources.Onboarding_DefaultSettings_Title
import ooniprobe.composeapp.generated.resources.Onboarding_Notifications_Title
import ooniprobe.composeapp.generated.resources.Onboarding_PopQuiz_True
import ooniprobe.composeapp.generated.resources.Onboarding_ThingsToKnow_Button
import ooniprobe.composeapp.generated.resources.Onboarding_ThingsToKnow_Title
Expand Down Expand Up @@ -137,9 +137,9 @@ class AutomateScreenshotsTest {
Screengrab.screenshot("03-crash-reporting")
clickOnTag("Yes-CrashReporting")

if (dependencies.platformInfo.needsToRequestNotificationsPermission) {
if (dependencies.platformInfo.requestNotificationsPermission) {
wait {
onNodeWithText(Res.string.Modal_EnableNotifications_Title).isDisplayed()
onNodeWithText(Res.string.Onboarding_Notifications_Title).isDisplayed()
}
Screengrab.screenshot("04-enable-notifications")
clickOnTag("No-Notifications")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import androidx.compose.ui.test.junit4.createEmptyComposeRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
import ooniprobe.composeapp.generated.resources.Modal_EnableNotifications_Title
import ooniprobe.composeapp.generated.resources.Onboarding_AutomatedTesting_Title
import ooniprobe.composeapp.generated.resources.Onboarding_Crash_Title
import ooniprobe.composeapp.generated.resources.Onboarding_DefaultSettings_Button_Go
import ooniprobe.composeapp.generated.resources.Onboarding_DefaultSettings_Title
import ooniprobe.composeapp.generated.resources.Onboarding_Notifications_Title
import ooniprobe.composeapp.generated.resources.Onboarding_PopQuiz_True
import ooniprobe.composeapp.generated.resources.Onboarding_ThingsToKnow_Button
import ooniprobe.composeapp.generated.resources.Onboarding_ThingsToKnow_Title
Expand Down Expand Up @@ -72,9 +72,9 @@ class OnboardingTest {
clickOnTag("Yes-CrashReporting")
}

if (dependencies.platformInfo.needsToRequestNotificationsPermission) {
if (dependencies.platformInfo.requestNotificationsPermission) {
wait {
onNodeWithText(Res.string.Modal_EnableNotifications_Title).isDisplayed()
onNodeWithText(Res.string.Onboarding_Notifications_Title).isDisplayed()
}
clickOnTag("No-Notifications")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ import ooniprobe.composeapp.generated.resources.Settings_Advanced_Label
import ooniprobe.composeapp.generated.resources.Settings_AutomatedTesting_RunAutomatically
import ooniprobe.composeapp.generated.resources.Settings_AutomatedTesting_RunAutomatically_ChargingOnly
import ooniprobe.composeapp.generated.resources.Settings_AutomatedTesting_RunAutomatically_WiFiOnly
import ooniprobe.composeapp.generated.resources.Settings_Notifications_Enabled
import ooniprobe.composeapp.generated.resources.Settings_Notifications_Label
import ooniprobe.composeapp.generated.resources.Settings_Privacy_Label
import ooniprobe.composeapp.generated.resources.Settings_Privacy_SendCrashReports
import ooniprobe.composeapp.generated.resources.Settings_Proxy_Label
Expand All @@ -27,7 +25,6 @@ import ooniprobe.composeapp.generated.resources.Settings_WarmVPNInUse_Label
import ooniprobe.composeapp.generated.resources.Settings_Websites_Categories_Description
import ooniprobe.composeapp.generated.resources.Settings_Websites_Categories_Label
import org.jetbrains.compose.resources.getString
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
Expand Down Expand Up @@ -56,22 +53,6 @@ class SettingsTest {
start()
}

@Test
fun notifications() =
runTest {
assertTrue(preferences.getValueByKey(SettingsKey.NOTIFICATIONS_ENABLED).first() != true)

with(compose) {
clickOnText(Res.string.Settings_Title)
clickOnText(Res.string.Settings_Notifications_Label)
clickOnText(Res.string.Settings_Notifications_Enabled)

wait {
preferences.getValueByKey(SettingsKey.NOTIFICATIONS_ENABLED).first() == true
}
}
}

@Test
fun testOptions_runAutoTests() =
runTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,3 @@ val isNewsMediaScan

val isCrashReportingEnabled
get() = dependencies.flavorConfig.isCrashReportingEnabled

val isRemoteNotificationsEnabled
get() = dependencies.flavorConfig.isRemoteNotificationsEnabled
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ suspend fun defaultSettings() {
SettingsKey.AUTOMATED_TESTING_ENABLED to true,
SettingsKey.AUTOMATED_TESTING_WIFIONLY to true,
SettingsKey.AUTOMATED_TESTING_CHARGING to true,
SettingsKey.NOTIFICATIONS_ENABLED to true,
) +
organizationPreferenceDefaults(),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,7 @@ class AndroidApplication : Application() {
platform = Platform.Android,
osVersion = Build.VERSION.SDK_INT.toString(),
model = "${Build.MANUFACTURER} ${Build.MODEL}",
needsToRequestNotificationsPermission =
Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU,
requestNotificationsPermission = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU,
sentryDsn =
"https://7a49ffedcb48b9b69705d1ac2c032c69@o155150.ingest.sentry.io/4508325642764288",
)
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,6 @@
<!-- Settings -->

<string name="Settings_Title">Settings</string>
<string name="Settings_Notifications_Label">Notifications</string>
<string name="Settings_Notifications_Enabled">Enabled</string>

<string name="Settings_TestOptions_Label">Test options</string>
<string name="Settings_TestOptions_LongRunningTest">Long running test</string>
Expand Down Expand Up @@ -269,6 +267,10 @@
<string name="Onboarding_Crash_Title">Crash Reporting</string>
<string name="Onboarding_Crash_Button_Yes">Yes</string>
<string name="Onboarding_Crash_Button_No">No</string>
<string name="Onboarding_Notifications_Title">Enable Notifications</string>
<string name="Onboarding_Notifications_Paragraph">After you start running tests, you can close the app and they will continue running in the background. Enable notifications so you can keep track of what tests are running, or stop them, without having to open the app.</string>
<string name="Onboarding_Notifications_Ok">OK</string>
<string name="Onboarding_Notifications_Skip">Skip</string>
<string name="Onboarding_DefaultSettings_Title">Default Settings</string>
<string name="Onboarding_DefaultSettings_Header">We collect and publish:</string>
<string name="Onboarding_DefaultSettings_Bullet_1">Country code (e.g. IT for Italy)</string>
Expand Down Expand Up @@ -319,7 +321,6 @@
<string name="Modal_CustomURL_NotSaved">Your URLs will not be saved when you leave this screen. Are you sure you want to leave this screen?</string>
<string name="Modal_Autorun_BatteryOptimization_Onboarding">The application cannot run tests automatically without background permission. Do you want to try again?</string>
<string name="Modal_Autorun_BatteryOptimization_Reminder">The application needs permission to run tests automatically in the background.</string>
<string name="Modal_EnableNotifications_Title">Get updates on internet censorship</string>

<!-- Common / Others -->

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,13 @@ package org.ooni.probe.config

enum class OptionalFeature {
CrashReporting,
RemoteNotifications,
}

interface FlavorConfigInterface {
val optionalFeatures: Set<OptionalFeature>
get() = setOf(
OptionalFeature.CrashReporting,
OptionalFeature.RemoteNotifications,
)
val isCrashReportingEnabled: Boolean
get() = optionalFeatures.contains(OptionalFeature.CrashReporting)
val isRemoteNotificationsEnabled: Boolean
get() = optionalFeatures.contains(OptionalFeature.RemoteNotifications)
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ enum class PreferenceItemType {
}

enum class PreferenceCategoryKey(val value: String) {
NOTIFICATIONS("notifications"),
TEST_OPTIONS("test_options"),
PRIVACY("privacy"),
PROXY("proxy"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package org.ooni.probe.data.models

enum class SettingsKey(val value: String) {
// Notifications
NOTIFICATIONS_ENABLED("notifications_enabled"),

// Test Options
AUTOMATED_TESTING_ENABLED("automated_testing_enabled"),
AUTOMATED_TESTING_WIFIONLY("automated_testing_wifionly"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,6 @@ class Dependencies(
clearStorage = clearStorage::invoke,
supportsCrashReporting = flavorConfig.isCrashReportingEnabled,
knownBatteryState = platformInfo.knownBatteryState,
supportsNotificationSettings = platformInfo.supportsNotificationSettings,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import kotlinx.coroutines.launch
import ooniprobe.composeapp.generated.resources.Modal_Cancel
import ooniprobe.composeapp.generated.resources.Modal_Delete
import ooniprobe.composeapp.generated.resources.Modal_DoYouWantToDeleteAllTests
import ooniprobe.composeapp.generated.resources.Modal_EnableNotifications_Paragraph
import ooniprobe.composeapp.generated.resources.Res
import ooniprobe.composeapp.generated.resources.Settings_About_Label
import ooniprobe.composeapp.generated.resources.Settings_Advanced_DebugLogs
Expand All @@ -31,8 +30,6 @@ import ooniprobe.composeapp.generated.resources.Settings_AutomatedTesting_RunAut
import ooniprobe.composeapp.generated.resources.Settings_AutomatedTesting_RunAutomatically_Description
import ooniprobe.composeapp.generated.resources.Settings_AutomatedTesting_RunAutomatically_Footer
import ooniprobe.composeapp.generated.resources.Settings_AutomatedTesting_RunAutomatically_WiFiOnly
import ooniprobe.composeapp.generated.resources.Settings_Notifications_Enabled
import ooniprobe.composeapp.generated.resources.Settings_Notifications_Label
import ooniprobe.composeapp.generated.resources.Settings_Privacy_Label
import ooniprobe.composeapp.generated.resources.Settings_Privacy_SendCrashReports
import ooniprobe.composeapp.generated.resources.Settings_Proxy_Label
Expand All @@ -50,7 +47,6 @@ import ooniprobe.composeapp.generated.resources.Settings_Websites_MaxRuntimeEnab
import ooniprobe.composeapp.generated.resources.Settings_Websites_MaxRuntime_New
import ooniprobe.composeapp.generated.resources.advanced
import ooniprobe.composeapp.generated.resources.ic_settings
import ooniprobe.composeapp.generated.resources.notifications
import ooniprobe.composeapp.generated.resources.outline_info
import ooniprobe.composeapp.generated.resources.privacy
import ooniprobe.composeapp.generated.resources.proxy
Expand All @@ -75,7 +71,6 @@ class GetSettings(
val observeStorageUsed: () -> Flow<Long>,
private val supportsCrashReporting: Boolean,
private val knownBatteryState: Boolean,
private val supportsNotificationSettings: Boolean,
) {
operator fun invoke(): Flow<List<SettingsCategoryItem>> {
return combine(
Expand Down Expand Up @@ -104,26 +99,6 @@ class GetSettings(
}
}

private fun createNotificationsSettings(): SettingsCategoryItem {
return SettingsCategoryItem(
icon = Res.drawable.notifications,
title = Res.string.Settings_Notifications_Label,
route = PreferenceCategoryKey.NOTIFICATIONS,
settings = listOf(
SettingsItem(
title = Res.string.Settings_Notifications_Enabled,
key = SettingsKey.NOTIFICATIONS_ENABLED,
type = PreferenceItemType.SWITCH,
),
),
footerContent = {
SettingsDescription(
Res.string.Modal_EnableNotifications_Paragraph,
)
},
)
}

private fun buildSettings(
hasWebsitesDescriptor: Boolean,
uploadResultsEnabled: Boolean,
Expand All @@ -135,7 +110,6 @@ class GetSettings(
supportsCrashReporting: Boolean = false,
): List<SettingsCategoryItem> {
return listOfNotNull(
createNotificationsSettings().takeIf { supportsNotificationSettings },
SettingsCategoryItem(
icon = Res.drawable.ic_settings,
title = Res.string.Settings_TestOptions_Label,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ data class PlatformInfo(
val platform: Platform,
val osVersion: String,
val model: String,
val needsToRequestNotificationsPermission: Boolean,
val supportsNotificationSettings: Boolean = true,
val requestNotificationsPermission: Boolean,
val knownBatteryState: Boolean = true,
val sentryDsn: String,
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import ooniprobe.composeapp.generated.resources.Modal_Autorun_BatteryOptimization_Onboarding
import ooniprobe.composeapp.generated.resources.Modal_Cancel
import ooniprobe.composeapp.generated.resources.Modal_EnableNotifications_Paragraph
import ooniprobe.composeapp.generated.resources.Modal_EnableNotifications_Title
import ooniprobe.composeapp.generated.resources.Modal_OK
import ooniprobe.composeapp.generated.resources.Onboarding_AutomatedTesting_Paragraph
import ooniprobe.composeapp.generated.resources.Onboarding_AutomatedTesting_Title
Expand All @@ -69,6 +67,10 @@ import ooniprobe.composeapp.generated.resources.Onboarding_DefaultSettings_Butto
import ooniprobe.composeapp.generated.resources.Onboarding_DefaultSettings_Header
import ooniprobe.composeapp.generated.resources.Onboarding_DefaultSettings_Paragraph
import ooniprobe.composeapp.generated.resources.Onboarding_DefaultSettings_Title
import ooniprobe.composeapp.generated.resources.Onboarding_Notifications_Skip
import ooniprobe.composeapp.generated.resources.Onboarding_Notifications_Ok
import ooniprobe.composeapp.generated.resources.Onboarding_Notifications_Paragraph
import ooniprobe.composeapp.generated.resources.Onboarding_Notifications_Title
import ooniprobe.composeapp.generated.resources.Onboarding_ThingsToKnow_Bullet_1
import ooniprobe.composeapp.generated.resources.Onboarding_ThingsToKnow_Bullet_2
import ooniprobe.composeapp.generated.resources.Onboarding_ThingsToKnow_Bullet_3
Expand Down Expand Up @@ -336,45 +338,46 @@ fun ColumnScope.RequestPermissionStep(onEvent: (OnboardingViewModel.Event) -> Un
val coroutineScope: CoroutineScope = rememberCoroutineScope()

OnboardingImage(OrganizationConfig.onboardingImages.image3)
OnboardingTitle(Res.string.Modal_EnableNotifications_Title)
OnboardingTitle(Res.string.Onboarding_Notifications_Title)

Column(
modifier = Modifier
.verticalScroll(rememberScrollState())
.weight(1f)
.padding(bottom = 16.dp),
) {
OnboardingText(Res.string.Modal_EnableNotifications_Paragraph)
OnboardingText(Res.string.Onboarding_Notifications_Paragraph)
}

Row(modifier = Modifier.padding(horizontal = 8.dp)) {
OnboardingMainOutlineButton(
text = Res.string.Onboarding_Crash_Button_No,
onClick = { onEvent(OnboardingViewModel.Event.NextClicked) },
text = Res.string.Onboarding_Notifications_Skip,
onClick = { onEvent(OnboardingViewModel.Event.RequestNotificationsPermissionSkipped) },
modifier = Modifier
.padding(horizontal = 8.dp)
.weight(1f)
.testTag("No-Notifications"),
)
OnboardingMainButton(
text = Res.string.Onboarding_Crash_Button_Yes,
text = Res.string.Onboarding_Notifications_Ok,
onClick = {
coroutineScope.launch {
try {
permissionsController.providePermission(Permission.RemoteNotification)
onEvent(OnboardingViewModel.Event.RequestNotificationsPermissionClicked)
Logger.i("Notifications permission accepted")
} catch (e: PermissionDeniedException) {
Logger.i("Permission denied")
Logger.i("Notifications permission denied")
onEvent(OnboardingViewModel.Event.NextClicked)
} catch (e: PermissionDeniedAlwaysException) {
Logger.i("Permission already denied")
Logger.i("Notifications permission already denied")
onEvent(OnboardingViewModel.Event.NextClicked)
} catch (e: PermissionRequestCanceledException) {
Logger.i("Permission request cancelled")
Logger.i("Notifications permission request cancelled")
// Nothing to do here
} catch (e: Exception) {
Logger.e("Error requesting permission", e)
Logger.e("Error requesting notifications permission", e)
}
onEvent(OnboardingViewModel.Event.RequestNotificationsPermissionDone)
}
},
modifier = Modifier
Expand Down
Loading
Loading