Loading app/build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -191,7 +191,7 @@ dependencies { libs.timber ) debugImplementation libs.leakcanary // debugImplementation libs.leakcanary testImplementation libs.junit } Loading app/src/main/java/foundation/e/advancedprivacy/domain/usecases/WeeklyReportUseCase.kt +65 −20 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import foundation.e.advancedprivacy.data.repositories.AppListRepository import foundation.e.advancedprivacy.data.repositories.ResourcesRepository import foundation.e.advancedprivacy.data.repositories.WeeklyReportLocalRepository import foundation.e.advancedprivacy.domain.entities.DisplayableApp import foundation.e.advancedprivacy.domain.entities.TrackerWithCount import foundation.e.advancedprivacy.domain.entities.WeeklyReport import foundation.e.advancedprivacy.trackers.data.StatsDatabase import foundation.e.advancedprivacy.trackers.data.TrackersRepository Loading Loading @@ -78,46 +79,90 @@ class WeeklyReportUseCase( ) } suspend fun computeWeeklyReport(endOfWeek: Instant): WeeklyReport = withContext(Dispatchers.IO) { suspend fun debugGenerateReportWeeksAgo(weeksAgo: Int) = withContext(Dispatchers.IO) { val endOfWeek = Instant.now().minus(weeksAgo.toLong() * 7, ChronoUnit.DAYS) val weeklyReport = computeWeeklyReport(endOfWeek) weeklyReportRepository.setLastWeeklyReport(weeklyReport) buildLabel(weeklyReport)?.let { _showWeeklyReportNotification.emit(it) } } private suspend fun computeWeeklyReport(endOfWeek: Instant): WeeklyReport = withContext(Dispatchers.IO) { Log.e("DEBUG-weekly", "buildWeeklyReport") val startOfWeek = endOfWeek.minus(7, ChronoUnit.DAYS) val trackerAppsHistoric = mapIdsToEntities( val startOfYear = endOfWeek.minus(365, ChronoUnit.DAYS) val trackerAppsHistoric = // mapIdsToEntities( statsDatabase.getDistinctTrackerAndApp( periodStart = endOfWeek.minus(365, ChronoUnit.DAYS), periodStart = startOfYear, periodEnd = startOfWeek ) ) // ) val trackerAppsOfWeek = mapIdsToEntities( val trackerAppsOfWeek = // mapIdsToEntities( statsDatabase.getDistinctTrackerAndApp( periodStart = startOfWeek, periodEnd = endOfWeek ) ) // ) // val newTrackers = trackerAppsOfWeek.map { it.first }.toSet() - trackerAppsHistoric.map { it.second }.toSet() val newTrackerIds = trackerAppsOfWeek.map { it.first }.toSet() - trackerAppsHistoric.map { it.first }.toSet() Log.d("DebugReport", "$endOfWeek : newTrackers: $newTrackerIds") val newTrackers = newTrackerIds.mapNotNull { trackersRepository.getTracker(it) } val newTrackerApps = trackerAppsOfWeek.toSet() - trackerAppsHistoric.toSet() val appsWithNewTrackers = newTrackerApps.groupBy { it.second }.map { val newTrackerApps = (trackerAppsOfWeek.toSet() - trackerAppsHistoric.toSet()) val appsWithNewTrackers = newTrackerApps.groupBy { it.second } .mapValues { it.value.map { it.first } }.let { Log.d("DebugReport", "$endOfWeek : appsWithNewTrackers: $it") it } .mapNotNull { appListRepository.getInternetAppByApId(it.key)?.let { app -> WeeklyReport.AppWithTrackers( app = it.key, trackers = it.value.map { it.first } app = app, trackers = it.value.mapNotNull { trackerId -> trackersRepository.getTracker(trackerId) } ) } } // val newTrackers = newTrackerApps.map { it.first }.distinct() // Log.d("DebugReport", "$endOfWeek : newTrackers: $newTrackers") val maxCallsByTrackersHistory = statsDatabase.getMaxCallsByTrackerByWeek(startOfYear, startOfWeek) val maxCallsByTrackerOfWeek = statsDatabase.getCallsByTrackers(startOfWeek, endOfWeek) val newTrackers = newTrackerApps.map { it.first }.distinct() val trackersWithCallsChanges = maxCallsByTrackerOfWeek.mapNotNull { kv -> val trackerId: String = kv.key val calls = kv.value.first // val callsByTrackerOfWeek = statsDatabase.getTrackersCallsByPeriod(ChronoUnit.HOURS, startOfWeek, endOfWeek).groupBy { } // // val callsByTrackerHistory = val historyCalls = maxCallsByTrackersHistory.get(trackerId)?.first // val trackersWithCallChanges = statsDatabase.get if (historyCalls != null && historyCalls > 0 && calls > (2 * historyCalls)) { trackersRepository.getTracker(trackerId)?.let { TrackerWithCount( it, (100 * (calls - historyCalls)) / historyCalls ) } } else { null } }.let { Log.d("DebugReport", "$endOfWeek : trackersWithCallsChanges: ${it.map { it.tracker.id }}") it } // Log.e("DEBUG-weekly", "buildWeeklyReport: appsWithNewTrackers: $appsWithNewTrackers") Log.e("DEBUG-weekly", "buildWeeklyReport: appsWithNewTraclers: $appsWithNewTrackers") WeeklyReport( appsWithNewTrackers = appsWithNewTrackers, trackersWithCallsChanges = emptyList(), trackersWithCallsChanges = trackersWithCallsChanges, newTrackers = newTrackers ) } Loading app/src/main/java/foundation/e/advancedprivacy/features/weeklyreport/WeeklyReportFragment.kt +5 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,11 @@ class WeeklyReportFragment : NavToolbarFragment(R.layout.weeklyreport_fragment) shareScreenshot() } binding.debugGenerateOldReport.setOnClickListener { val count = binding.debugWeeksAgo.text.toString().toInt() viewModel.onClickDebugGenerateReport(count) } listenViewModel() } Loading app/src/main/java/foundation/e/advancedprivacy/features/weeklyreport/WeeklyReportViewModel.kt +5 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,11 @@ class WeeklyReportViewModel( weeklyReportUseCase.updateWeeklyReport() doOnStartedState() } fun onClickDebugGenerateReport(weekAgo: Int) = viewModelScope.launch(Dispatchers.IO) { weeklyReportUseCase.debugGenerateReportWeeksAgo(weekAgo) doOnStartedState() } } data class WeeklyReportUiState( Loading app/src/main/res/layout/weeklyreport_fragment.xml +27 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,33 @@ android:layout_height="wrap_content" android:layout_marginBottom="32dp" tools:itemCount="3"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <androidx.appcompat.widget.AppCompatButton android:id="@+id/debugGenerateOldReport" android:layout_width="wrap_content" android:layout_height="52dp" android:layout_gravity="center" style="@style/ThemeOverlay.Material3.Button.TextButton" android:text="Generate report of week ago:" android:background="?attr/selectableItemBackgroundBorderless" android:textSize="14sp" android:lineHeight="20sp" android:textFontWeight="400" android:textColor="@color/accent" android:textAllCaps="true" /> <EditText android:id="@+id/debugWeeksAgo" android:layout_width="30dp" android:layout_height="wrap_content" android:inputType="number" /> </LinearLayout> </LinearLayout> <com.google.android.material.button.MaterialButton Loading Loading
app/build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -191,7 +191,7 @@ dependencies { libs.timber ) debugImplementation libs.leakcanary // debugImplementation libs.leakcanary testImplementation libs.junit } Loading
app/src/main/java/foundation/e/advancedprivacy/domain/usecases/WeeklyReportUseCase.kt +65 −20 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import foundation.e.advancedprivacy.data.repositories.AppListRepository import foundation.e.advancedprivacy.data.repositories.ResourcesRepository import foundation.e.advancedprivacy.data.repositories.WeeklyReportLocalRepository import foundation.e.advancedprivacy.domain.entities.DisplayableApp import foundation.e.advancedprivacy.domain.entities.TrackerWithCount import foundation.e.advancedprivacy.domain.entities.WeeklyReport import foundation.e.advancedprivacy.trackers.data.StatsDatabase import foundation.e.advancedprivacy.trackers.data.TrackersRepository Loading Loading @@ -78,46 +79,90 @@ class WeeklyReportUseCase( ) } suspend fun computeWeeklyReport(endOfWeek: Instant): WeeklyReport = withContext(Dispatchers.IO) { suspend fun debugGenerateReportWeeksAgo(weeksAgo: Int) = withContext(Dispatchers.IO) { val endOfWeek = Instant.now().minus(weeksAgo.toLong() * 7, ChronoUnit.DAYS) val weeklyReport = computeWeeklyReport(endOfWeek) weeklyReportRepository.setLastWeeklyReport(weeklyReport) buildLabel(weeklyReport)?.let { _showWeeklyReportNotification.emit(it) } } private suspend fun computeWeeklyReport(endOfWeek: Instant): WeeklyReport = withContext(Dispatchers.IO) { Log.e("DEBUG-weekly", "buildWeeklyReport") val startOfWeek = endOfWeek.minus(7, ChronoUnit.DAYS) val trackerAppsHistoric = mapIdsToEntities( val startOfYear = endOfWeek.minus(365, ChronoUnit.DAYS) val trackerAppsHistoric = // mapIdsToEntities( statsDatabase.getDistinctTrackerAndApp( periodStart = endOfWeek.minus(365, ChronoUnit.DAYS), periodStart = startOfYear, periodEnd = startOfWeek ) ) // ) val trackerAppsOfWeek = mapIdsToEntities( val trackerAppsOfWeek = // mapIdsToEntities( statsDatabase.getDistinctTrackerAndApp( periodStart = startOfWeek, periodEnd = endOfWeek ) ) // ) // val newTrackers = trackerAppsOfWeek.map { it.first }.toSet() - trackerAppsHistoric.map { it.second }.toSet() val newTrackerIds = trackerAppsOfWeek.map { it.first }.toSet() - trackerAppsHistoric.map { it.first }.toSet() Log.d("DebugReport", "$endOfWeek : newTrackers: $newTrackerIds") val newTrackers = newTrackerIds.mapNotNull { trackersRepository.getTracker(it) } val newTrackerApps = trackerAppsOfWeek.toSet() - trackerAppsHistoric.toSet() val appsWithNewTrackers = newTrackerApps.groupBy { it.second }.map { val newTrackerApps = (trackerAppsOfWeek.toSet() - trackerAppsHistoric.toSet()) val appsWithNewTrackers = newTrackerApps.groupBy { it.second } .mapValues { it.value.map { it.first } }.let { Log.d("DebugReport", "$endOfWeek : appsWithNewTrackers: $it") it } .mapNotNull { appListRepository.getInternetAppByApId(it.key)?.let { app -> WeeklyReport.AppWithTrackers( app = it.key, trackers = it.value.map { it.first } app = app, trackers = it.value.mapNotNull { trackerId -> trackersRepository.getTracker(trackerId) } ) } } // val newTrackers = newTrackerApps.map { it.first }.distinct() // Log.d("DebugReport", "$endOfWeek : newTrackers: $newTrackers") val maxCallsByTrackersHistory = statsDatabase.getMaxCallsByTrackerByWeek(startOfYear, startOfWeek) val maxCallsByTrackerOfWeek = statsDatabase.getCallsByTrackers(startOfWeek, endOfWeek) val newTrackers = newTrackerApps.map { it.first }.distinct() val trackersWithCallsChanges = maxCallsByTrackerOfWeek.mapNotNull { kv -> val trackerId: String = kv.key val calls = kv.value.first // val callsByTrackerOfWeek = statsDatabase.getTrackersCallsByPeriod(ChronoUnit.HOURS, startOfWeek, endOfWeek).groupBy { } // // val callsByTrackerHistory = val historyCalls = maxCallsByTrackersHistory.get(trackerId)?.first // val trackersWithCallChanges = statsDatabase.get if (historyCalls != null && historyCalls > 0 && calls > (2 * historyCalls)) { trackersRepository.getTracker(trackerId)?.let { TrackerWithCount( it, (100 * (calls - historyCalls)) / historyCalls ) } } else { null } }.let { Log.d("DebugReport", "$endOfWeek : trackersWithCallsChanges: ${it.map { it.tracker.id }}") it } // Log.e("DEBUG-weekly", "buildWeeklyReport: appsWithNewTrackers: $appsWithNewTrackers") Log.e("DEBUG-weekly", "buildWeeklyReport: appsWithNewTraclers: $appsWithNewTrackers") WeeklyReport( appsWithNewTrackers = appsWithNewTrackers, trackersWithCallsChanges = emptyList(), trackersWithCallsChanges = trackersWithCallsChanges, newTrackers = newTrackers ) } Loading
app/src/main/java/foundation/e/advancedprivacy/features/weeklyreport/WeeklyReportFragment.kt +5 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,11 @@ class WeeklyReportFragment : NavToolbarFragment(R.layout.weeklyreport_fragment) shareScreenshot() } binding.debugGenerateOldReport.setOnClickListener { val count = binding.debugWeeksAgo.text.toString().toInt() viewModel.onClickDebugGenerateReport(count) } listenViewModel() } Loading
app/src/main/java/foundation/e/advancedprivacy/features/weeklyreport/WeeklyReportViewModel.kt +5 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,11 @@ class WeeklyReportViewModel( weeklyReportUseCase.updateWeeklyReport() doOnStartedState() } fun onClickDebugGenerateReport(weekAgo: Int) = viewModelScope.launch(Dispatchers.IO) { weeklyReportUseCase.debugGenerateReportWeeksAgo(weekAgo) doOnStartedState() } } data class WeeklyReportUiState( Loading
app/src/main/res/layout/weeklyreport_fragment.xml +27 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,33 @@ android:layout_height="wrap_content" android:layout_marginBottom="32dp" tools:itemCount="3"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <androidx.appcompat.widget.AppCompatButton android:id="@+id/debugGenerateOldReport" android:layout_width="wrap_content" android:layout_height="52dp" android:layout_gravity="center" style="@style/ThemeOverlay.Material3.Button.TextButton" android:text="Generate report of week ago:" android:background="?attr/selectableItemBackgroundBorderless" android:textSize="14sp" android:lineHeight="20sp" android:textFontWeight="400" android:textColor="@color/accent" android:textAllCaps="true" /> <EditText android:id="@+id/debugWeeksAgo" android:layout_width="30dp" android:layout_height="wrap_content" android:inputType="number" /> </LinearLayout> </LinearLayout> <com.google.android.material.button.MaterialButton Loading