Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c28df703 authored by Guillaume Jacquart's avatar Guillaume Jacquart
Browse files

feat:2995: debug week ago button, calls count stat.

parent 01b95974
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -191,7 +191,7 @@ dependencies {
        libs.timber
    )

    debugImplementation libs.leakcanary
//    debugImplementation libs.leakcanary

    testImplementation libs.junit
}
+65 −20
Original line number Diff line number Diff line
@@ -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
@@ -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
        )
    }
+5 −0
Original line number Diff line number Diff line
@@ -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()
    }

+5 −0
Original line number Diff line number Diff line
@@ -59,6 +59,11 @@ class WeeklyReportViewModel(
        weeklyReportUseCase.updateWeeklyReport()
        doOnStartedState()
    }

    fun onClickDebugGenerateReport(weekAgo: Int) = viewModelScope.launch(Dispatchers.IO) {
        weeklyReportUseCase.debugGenerateReportWeeksAgo(weekAgo)
        doOnStartedState()
    }
}

data class WeeklyReportUiState(
+27 −0
Original line number Diff line number Diff line
@@ -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