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

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

Merge branch '1960-wall_of_shame' into 'main'

feat:1960: trackers and apps Wall of shame

See merge request !167
parents 837311e2 aefc74c2
Loading
Loading
Loading
Loading
Loading
+6 −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
@@ -146,7 +146,9 @@ val appModule = module {

    singleOf(::AppTrackersUseCase)
    singleOf(::TrackerDetailsUseCase)
    singleOf(::TrackersScreenUseCase)
    single {
        TrackersScreenUseCase(localStateRepository = get())
    }

    single<IPermissionsPrivacyModule> {
        PermissionsPrivacyModuleImpl(context = androidContext())
@@ -185,7 +187,8 @@ val appModule = module {
        TrackersPeriodViewModel(
            period = period,
            trackersStatisticsUseCase = get(),
            trackersAndAppsListsUseCase = get()
            trackersAndAppsListsUseCase = get(),
            trackersScreenUseCase = get()
        )
    }

+33 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 - 2023 MURENA SAS
 * Copyright (C) 2021 E FOUNDATION
 * 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
@@ -16,48 +15,19 @@
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

package foundation.e.advancedprivacy.features.trackers
package foundation.e.advancedprivacy.common

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import foundation.e.advancedprivacy.R
import foundation.e.advancedprivacy.databinding.TrackersItemAppBinding
import androidx.viewbinding.ViewBinding

class AppsAdapter(
    private val viewModel: TrackersPeriodViewModel
) :
    RecyclerView.Adapter<AppsAdapter.ViewHolder>() {
class BindingViewHolder<T : ViewBinding>(val binding: T) : RecyclerView.ViewHolder(binding.root)

    class ViewHolder(view: View, private val parentViewModel: TrackersPeriodViewModel) : RecyclerView.ViewHolder(view) {
        val binding = TrackersItemAppBinding.bind(view)
        fun bind(item: AppWithTrackersCount) {
            binding.icon.setImageDrawable(item.app.icon)
            binding.title.text = item.app.label
            binding.counts.text = itemView.context.getString(R.string.trackers_list_app_trackers_counts, item.trackersCount.toString())
            itemView.setOnClickListener {
                parentViewModel.onClickApp(item.app)
            }
        }
    }

    var dataSet: List<AppWithTrackersCount> = emptyList()
abstract class BindingListAdapter<T : ViewBinding, U> : RecyclerView.Adapter<BindingViewHolder<T>>() {
    var dataSet: List<U> = emptyList()
        set(value) {
            field = value
            notifyDataSetChanged()
        }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.trackers_item_app, parent, false)
        return ViewHolder(view, viewModel)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val app = dataSet[position]
        holder.bind(app)
    }

    override fun getItemCount(): Int = dataSet.size
}
+3 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 MURENA SAS
 * Copyright (C) 2022 E FOUNDATION
 *
 * This program is free software: you can redistribute it and/or modify
@@ -20,3 +21,5 @@ package foundation.e.advancedprivacy.common.extensions
import android.content.Context

fun Int.dpToPxF(context: Context): Float = this.toFloat() * context.resources.displayMetrics.density

fun Int.dpToPx(context: Context): Int = (this * context.resources.displayMetrics.density).toInt()
+3 −1
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
@@ -130,6 +130,8 @@ class LocalStateRepositoryImpl(context: Context) : LocalStateRepository {
        get() = sharedPref.getInt(KEY_TRACKERS_SCREEN_LAST_POSITION, 0)
        set(value) = sharedPref.edit().putInt(KEY_TRACKERS_SCREEN_LAST_POSITION, value).apply()

    override var trackersScreenTabStartPosition: Int = 0

    private fun set(key: String, value: Boolean) {
        sharedPref.edit().putBoolean(key, value).apply()
    }
+14 −5
Original line number Diff line number Diff line
@@ -16,11 +16,20 @@
 */
package foundation.e.advancedprivacy.domain.entities

import foundation.e.advancedprivacy.features.trackers.AppWithTrackersCount
import foundation.e.advancedprivacy.features.trackers.TrackerWithAppsCount
import foundation.e.advancedprivacy.trackers.domain.entities.Tracker

data class TrackersAndAppsLists(
    val trackers: List<TrackerWithAppsCount>,
    val allApps: List<AppWithTrackersCount>,
    val appsWithTrackers: List<AppWithTrackersCount>
    val trackers: List<TrackerWithCount>,
    val allApps: List<AppWithCount>,
    val appsWithTrackers: List<AppWithCount>
)

data class AppWithCount(
    val app: ApplicationDescription,
    val count: Int = 0
)

data class TrackerWithCount(
    val tracker: Tracker,
    val count: Int = 0
)
Loading