Loading app/build.gradle +0 −4 Original line number Diff line number Diff line Loading @@ -83,15 +83,11 @@ android { productFlavors { eos { dimension 'os' minSdkVersion 29 targetSdkVersion 32 signingConfig signingConfigs.eDebug } standalone { dimension 'os' applicationIdSuffix '.standalone' minSdkVersion 26 targetSdkVersion 31 manifestPlaceholders = [ persistent: "false", mainActivityIntentFilterCategory: "android.intent.category.LAUNCHER" Loading app/src/main/java/foundation/e/advancedprivacy/common/BigNumberFormatter.kt 0 → 100644 +26 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 MURENA SAS * * This program 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. * * This program 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 this program. If not, see <https://www.gnu.org/licenses/>. */ package foundation.e.advancedprivacy.common import android.content.Context import android.icu.number.NumberFormatter class BigNumberFormatter(context: Context) { private val formatter = NumberFormatter.withLocale(context.resources.configuration.locales[0]) fun format(number: Int): CharSequence = formatter.format(number) } app/src/main/java/foundation/e/advancedprivacy/features/dashboard/DashboardFragment.kt +4 −2 Original line number Diff line number Diff line /* * Copyright (C) 2023 MURENA SAS * Copyright (C) 2023-2024 MURENA SAS * Copyright (C) 2021 E FOUNDATION * * This program is free software: you can redistribute it and/or modify Loading Loading @@ -29,6 +29,7 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.navigation.fragment.findNavController import foundation.e.advancedprivacy.R import foundation.e.advancedprivacy.common.BigNumberFormatter import foundation.e.advancedprivacy.common.NavToolbarFragment import foundation.e.advancedprivacy.databinding.FragmentDashboardBinding import foundation.e.advancedprivacy.domain.entities.FeatureState Loading @@ -39,6 +40,7 @@ import org.koin.androidx.viewmodel.ext.android.viewModel class DashboardFragment : NavToolbarFragment(R.layout.fragment_dashboard) { private val viewModel: DashboardViewModel by viewModel() private val numberFormatter: BigNumberFormatter by lazy { BigNumberFormatter(requireContext()) } private lateinit var binding: FragmentDashboardBinding Loading Loading @@ -164,7 +166,7 @@ class DashboardFragment : NavToolbarFragment(R.layout.fragment_dashboard) { } private fun render(state: DashboardState) { binding.dataBlockedTrackers.number.text = state.blockedCallsCount.toString() binding.dataBlockedTrackers.number.text = numberFormatter.format(state.blockedCallsCount) binding.dataApps.number.text = state.appsWithCallsCount.toString() with(binding.trackersControl) { Loading app/src/main/java/foundation/e/advancedprivacy/features/trackers/apptrackers/AppTrackersFragment.kt +6 −3 Original line number Diff line number Diff line /* * Copyright (C) 2023 MURENA SAS * Copyright (C) 2023-2024 MURENA SAS * Copyright (C) 2021 E FOUNDATION * * This program is free software: you can redistribute it and/or modify Loading Loading @@ -33,6 +33,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.divider.MaterialDividerItemDecoration import com.google.android.material.snackbar.Snackbar import foundation.e.advancedprivacy.R import foundation.e.advancedprivacy.common.BigNumberFormatter import foundation.e.advancedprivacy.common.NavToolbarFragment import foundation.e.advancedprivacy.databinding.ApptrackersFragmentBinding import foundation.e.advancedprivacy.features.trackers.setupDisclaimerBlock Loading @@ -45,6 +46,8 @@ class AppTrackersFragment : NavToolbarFragment(R.layout.apptrackers_fragment) { private val args: AppTrackersFragmentArgs by navArgs() private val viewModel: AppTrackersViewModel by viewModel { parametersOf(args.appUid) } private val numberFormatter: BigNumberFormatter by lazy { BigNumberFormatter(requireContext()) } private lateinit var binding: ApptrackersFragmentBinding override fun getTitle(): CharSequence { Loading Loading @@ -145,8 +148,8 @@ class AppTrackersFragment : NavToolbarFragment(R.layout.apptrackers_fragment) { binding.dataBlockedLeaks.apply { primaryMessage.setText(R.string.apptrackers_blocked_leaks_primary) number.text = state.blocked.toString() secondaryMessage.text = getString(R.string.apptrackers_blocked_leaks_secondary, state.leaked.toString()) number.text = numberFormatter.format(state.blocked) secondaryMessage.text = getString(R.string.apptrackers_blocked_leaks_secondary, numberFormatter.format(state.leaked)) } binding.blockAllToggle.isChecked = state.isBlockingActivated Loading app/src/main/java/foundation/e/advancedprivacy/features/trackers/trackerdetails/TrackerDetailsFragment.kt +5 −3 Original line number Diff line number Diff line /* * Copyright (C) 2023 MURENA SAS * Copyright (C) 2023-2024 MURENA SAS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by Loading Loading @@ -31,6 +31,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.divider.MaterialDividerItemDecoration import com.google.android.material.snackbar.Snackbar import foundation.e.advancedprivacy.R import foundation.e.advancedprivacy.common.BigNumberFormatter import foundation.e.advancedprivacy.common.NavToolbarFragment import foundation.e.advancedprivacy.databinding.TrackerdetailsFragmentBinding import foundation.e.advancedprivacy.features.trackers.setupDisclaimerBlock Loading @@ -42,6 +43,7 @@ class TrackerDetailsFragment : NavToolbarFragment(R.layout.trackerdetails_fragme private val args: TrackerDetailsFragmentArgs by navArgs() private val viewModel: TrackerDetailsViewModel by viewModel { parametersOf(args.trackerId) } private val numberFormatter: BigNumberFormatter by lazy { BigNumberFormatter(requireContext()) } private lateinit var binding: TrackerdetailsFragmentBinding Loading Loading @@ -136,8 +138,8 @@ class TrackerDetailsFragment : NavToolbarFragment(R.layout.trackerdetails_fragme binding.dataBlockedLeaks.apply { primaryMessage.setText(R.string.trackerdetails_blocked_leaks_primary) number.text = state.blockedCount.toString() secondaryMessage.text = getString(R.string.trackerdetails_blocked_leaks_secondary, state.leakedCount.toString()) number.text = numberFormatter.format(state.blockedCount) secondaryMessage.text = getString(R.string.trackerdetails_blocked_leaks_secondary, numberFormatter.format(state.leakedCount)) } binding.blockAllToggle.isChecked = state.isBlockAllActivated Loading Loading
app/build.gradle +0 −4 Original line number Diff line number Diff line Loading @@ -83,15 +83,11 @@ android { productFlavors { eos { dimension 'os' minSdkVersion 29 targetSdkVersion 32 signingConfig signingConfigs.eDebug } standalone { dimension 'os' applicationIdSuffix '.standalone' minSdkVersion 26 targetSdkVersion 31 manifestPlaceholders = [ persistent: "false", mainActivityIntentFilterCategory: "android.intent.category.LAUNCHER" Loading
app/src/main/java/foundation/e/advancedprivacy/common/BigNumberFormatter.kt 0 → 100644 +26 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 MURENA SAS * * This program 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. * * This program 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 this program. If not, see <https://www.gnu.org/licenses/>. */ package foundation.e.advancedprivacy.common import android.content.Context import android.icu.number.NumberFormatter class BigNumberFormatter(context: Context) { private val formatter = NumberFormatter.withLocale(context.resources.configuration.locales[0]) fun format(number: Int): CharSequence = formatter.format(number) }
app/src/main/java/foundation/e/advancedprivacy/features/dashboard/DashboardFragment.kt +4 −2 Original line number Diff line number Diff line /* * Copyright (C) 2023 MURENA SAS * Copyright (C) 2023-2024 MURENA SAS * Copyright (C) 2021 E FOUNDATION * * This program is free software: you can redistribute it and/or modify Loading Loading @@ -29,6 +29,7 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.navigation.fragment.findNavController import foundation.e.advancedprivacy.R import foundation.e.advancedprivacy.common.BigNumberFormatter import foundation.e.advancedprivacy.common.NavToolbarFragment import foundation.e.advancedprivacy.databinding.FragmentDashboardBinding import foundation.e.advancedprivacy.domain.entities.FeatureState Loading @@ -39,6 +40,7 @@ import org.koin.androidx.viewmodel.ext.android.viewModel class DashboardFragment : NavToolbarFragment(R.layout.fragment_dashboard) { private val viewModel: DashboardViewModel by viewModel() private val numberFormatter: BigNumberFormatter by lazy { BigNumberFormatter(requireContext()) } private lateinit var binding: FragmentDashboardBinding Loading Loading @@ -164,7 +166,7 @@ class DashboardFragment : NavToolbarFragment(R.layout.fragment_dashboard) { } private fun render(state: DashboardState) { binding.dataBlockedTrackers.number.text = state.blockedCallsCount.toString() binding.dataBlockedTrackers.number.text = numberFormatter.format(state.blockedCallsCount) binding.dataApps.number.text = state.appsWithCallsCount.toString() with(binding.trackersControl) { Loading
app/src/main/java/foundation/e/advancedprivacy/features/trackers/apptrackers/AppTrackersFragment.kt +6 −3 Original line number Diff line number Diff line /* * Copyright (C) 2023 MURENA SAS * Copyright (C) 2023-2024 MURENA SAS * Copyright (C) 2021 E FOUNDATION * * This program is free software: you can redistribute it and/or modify Loading Loading @@ -33,6 +33,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.divider.MaterialDividerItemDecoration import com.google.android.material.snackbar.Snackbar import foundation.e.advancedprivacy.R import foundation.e.advancedprivacy.common.BigNumberFormatter import foundation.e.advancedprivacy.common.NavToolbarFragment import foundation.e.advancedprivacy.databinding.ApptrackersFragmentBinding import foundation.e.advancedprivacy.features.trackers.setupDisclaimerBlock Loading @@ -45,6 +46,8 @@ class AppTrackersFragment : NavToolbarFragment(R.layout.apptrackers_fragment) { private val args: AppTrackersFragmentArgs by navArgs() private val viewModel: AppTrackersViewModel by viewModel { parametersOf(args.appUid) } private val numberFormatter: BigNumberFormatter by lazy { BigNumberFormatter(requireContext()) } private lateinit var binding: ApptrackersFragmentBinding override fun getTitle(): CharSequence { Loading Loading @@ -145,8 +148,8 @@ class AppTrackersFragment : NavToolbarFragment(R.layout.apptrackers_fragment) { binding.dataBlockedLeaks.apply { primaryMessage.setText(R.string.apptrackers_blocked_leaks_primary) number.text = state.blocked.toString() secondaryMessage.text = getString(R.string.apptrackers_blocked_leaks_secondary, state.leaked.toString()) number.text = numberFormatter.format(state.blocked) secondaryMessage.text = getString(R.string.apptrackers_blocked_leaks_secondary, numberFormatter.format(state.leaked)) } binding.blockAllToggle.isChecked = state.isBlockingActivated Loading
app/src/main/java/foundation/e/advancedprivacy/features/trackers/trackerdetails/TrackerDetailsFragment.kt +5 −3 Original line number Diff line number Diff line /* * Copyright (C) 2023 MURENA SAS * Copyright (C) 2023-2024 MURENA SAS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by Loading Loading @@ -31,6 +31,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.divider.MaterialDividerItemDecoration import com.google.android.material.snackbar.Snackbar import foundation.e.advancedprivacy.R import foundation.e.advancedprivacy.common.BigNumberFormatter import foundation.e.advancedprivacy.common.NavToolbarFragment import foundation.e.advancedprivacy.databinding.TrackerdetailsFragmentBinding import foundation.e.advancedprivacy.features.trackers.setupDisclaimerBlock Loading @@ -42,6 +43,7 @@ class TrackerDetailsFragment : NavToolbarFragment(R.layout.trackerdetails_fragme private val args: TrackerDetailsFragmentArgs by navArgs() private val viewModel: TrackerDetailsViewModel by viewModel { parametersOf(args.trackerId) } private val numberFormatter: BigNumberFormatter by lazy { BigNumberFormatter(requireContext()) } private lateinit var binding: TrackerdetailsFragmentBinding Loading Loading @@ -136,8 +138,8 @@ class TrackerDetailsFragment : NavToolbarFragment(R.layout.trackerdetails_fragme binding.dataBlockedLeaks.apply { primaryMessage.setText(R.string.trackerdetails_blocked_leaks_primary) number.text = state.blockedCount.toString() secondaryMessage.text = getString(R.string.trackerdetails_blocked_leaks_secondary, state.leakedCount.toString()) number.text = numberFormatter.format(state.blockedCount) secondaryMessage.text = getString(R.string.trackerdetails_blocked_leaks_secondary, numberFormatter.format(state.leakedCount)) } binding.blockAllToggle.isChecked = state.isBlockAllActivated Loading