Loading app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt +3 −1 Original line number Diff line number Diff line Loading @@ -146,7 +146,9 @@ val appModule = module { singleOf(::AppTrackersUseCase) singleOf(::TrackerDetailsUseCase) singleOf(::TrackersScreenUseCase) single { TrackersScreenUseCase(localStateRepository = get()) } single<IPermissionsPrivacyModule> { PermissionsPrivacyModuleImpl(context = androidContext()) Loading app/src/main/java/foundation/e/advancedprivacy/features/dashboard/DashboardFragment.kt +6 −1 Original line number Diff line number Diff line Loading @@ -83,7 +83,12 @@ class DashboardFragment : NavToolbarFragment(R.layout.fragment_dashboard) { binding.fakeLocation.title.setText(R.string.dashboard_location_title) binding.ipScrambling.title.setText(R.string.dashboard_ipscrambling_title) tabAdapter = ShameListsTabPagerAdapter(viewModel) tabAdapter = ShameListsTabPagerAdapter( onClickShameApp = viewModel::onClickShameApp, onClickShameTracker = viewModel::onClickShameTracker, onClickViewAllApps = viewModel::onClickViewAllApps, onClickViewAllTrackers = viewModel::onClickViewAllTrackers ) binding.listsPager.adapter = tabAdapter Loading app/src/main/java/foundation/e/advancedprivacy/features/dashboard/ShameListsTabPagerAdapter.kt +16 −13 Original line number Diff line number Diff line Loading @@ -32,11 +32,16 @@ import foundation.e.advancedprivacy.common.extensions.dpToPx import foundation.e.advancedprivacy.databinding.DashboardShameListBinding import foundation.e.advancedprivacy.databinding.TrackersItemAppBinding import foundation.e.advancedprivacy.domain.entities.AppWithCount import foundation.e.advancedprivacy.domain.entities.ApplicationDescription import foundation.e.advancedprivacy.domain.entities.TrackerWithCount import foundation.e.advancedprivacy.features.trackers.TrackerTab import foundation.e.advancedprivacy.trackers.domain.entities.Tracker class ShameListsTabPagerAdapter( private val viewModel: DashboardViewModel private val onClickShameApp: (ApplicationDescription) -> Unit, private val onClickShameTracker: (Tracker) -> Unit, private val onClickViewAllApps: () -> Unit, private val onClickViewAllTrackers: () -> Unit ) : RecyclerView.Adapter<ShameListsTabPagerAdapter.ListsTabViewHolder>() { private var uiState: DashboardState = DashboardState() Loading @@ -51,10 +56,10 @@ class ShameListsTabPagerAdapter( val view = DashboardShameListBinding.inflate(LayoutInflater.from(parent.context), parent, false) return when (viewType) { TrackerTab.APPS.position -> { ListsTabViewHolder.AppsListViewHolder(view, viewModel) ListsTabViewHolder.AppsListViewHolder(view, onClickShameApp, onClickViewAllApps) } else -> { ListsTabViewHolder.TrackersListViewHolder(view, viewModel) ListsTabViewHolder.TrackersListViewHolder(view, onClickShameTracker, onClickViewAllTrackers) } } } Loading Loading @@ -94,7 +99,8 @@ class ShameListsTabPagerAdapter( class AppsListViewHolder( private val binding: DashboardShameListBinding, private val viewModel: DashboardViewModel private val onClickShameApp: (ApplicationDescription) -> Unit, private val onClickViewAllApps: () -> Unit ) : ListsTabViewHolder(binding.root) { private val adapter = object : BindingListAdapter<TrackersItemAppBinding, AppWithCount>() { Loading @@ -116,9 +122,7 @@ class ShameListsTabPagerAdapter( R.string.dashboard_wall_of_shame_app_calls, numberFormatter.format(item.count) ) holder.binding.root.setOnClickListener { viewModel.onClickShameApp(item.app) } holder.binding.root.setOnClickListener { onClickShameApp(item.app) } } } init { Loading @@ -126,7 +130,7 @@ class ShameListsTabPagerAdapter( binding.list.adapter = adapter binding.viewAll.apply { text = binding.root.context.getString(R.string.dashboard_view_all_apps) setOnClickListener { viewModel.onClickViewAllApps() } setOnClickListener { onClickViewAllApps() } } } Loading @@ -137,7 +141,8 @@ class ShameListsTabPagerAdapter( class TrackersListViewHolder( private val binding: DashboardShameListBinding, private val viewModel: DashboardViewModel private val onClickShameTracker: (Tracker) -> Unit, private val onClickViewAllTrackers: () -> Unit ) : ListsTabViewHolder(binding.root) { private val adapter = object : BindingListAdapter<TrackersItemAppBinding, TrackerWithCount>() { Loading @@ -159,9 +164,7 @@ class ShameListsTabPagerAdapter( R.string.dashboard_wall_of_shame_trackers_calls, numberFormatter.format(item.count) ) holder.binding.root.setOnClickListener { viewModel.onClickShameTracker(item.tracker) } holder.binding.root.setOnClickListener { onClickShameTracker(item.tracker) } } } Loading @@ -170,7 +173,7 @@ class ShameListsTabPagerAdapter( binding.list.adapter = adapter binding.viewAll.apply { text = binding.root.context.getString(R.string.dashboard_view_all_trackers) setOnClickListener { viewModel.onClickViewAllTrackers() } setOnClickListener { onClickViewAllTrackers() } } } Loading app/src/main/java/foundation/e/advancedprivacy/features/trackers/ListsTabPagerAdapter.kt +18 −19 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ */ package foundation.e.advancedprivacy.features.trackers import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup Loading @@ -33,14 +32,14 @@ import foundation.e.advancedprivacy.databinding.TrackersAppsListBinding import foundation.e.advancedprivacy.databinding.TrackersItemAppBinding import foundation.e.advancedprivacy.databinding.TrackersListBinding import foundation.e.advancedprivacy.domain.entities.AppWithCount import foundation.e.advancedprivacy.domain.entities.ApplicationDescription import foundation.e.advancedprivacy.domain.entities.TrackerWithCount const val TAB_APPS = 0 private const val TAB_TRACKERS = 1 import foundation.e.advancedprivacy.trackers.domain.entities.Tracker class ListsTabPagerAdapter( private val context: Context, private val viewModel: TrackersPeriodViewModel private val onClickTracker: (Tracker) -> Unit, private val onClickApp: (ApplicationDescription) -> Unit, private val onToggleHideNoTrackersApps: () -> Unit ) : RecyclerView.Adapter<ListsTabPagerAdapter.ListsTabViewHolder>() { private var uiState: TrackersPeriodState = TrackersPeriodState() Loading @@ -54,16 +53,17 @@ class ListsTabPagerAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListsTabViewHolder { val inflater = LayoutInflater.from(parent.context) return when (viewType) { TAB_APPS -> { TrackerTab.APPS.position -> { ListsTabViewHolder.AppsListViewHolder( TrackersAppsListBinding.inflate(inflater, parent, false), viewModel onClickApp, onToggleHideNoTrackersApps ) } else -> { ListsTabViewHolder.TrackersListViewHolder( TrackersListBinding.inflate(inflater, parent, false), viewModel onClickTracker ) } } Loading @@ -75,10 +75,10 @@ class ListsTabPagerAdapter( override fun onBindViewHolder(holder: ListsTabViewHolder, position: Int) { when (position) { TAB_APPS -> { TrackerTab.APPS.position -> { (holder as ListsTabViewHolder.AppsListViewHolder).onBind(uiState) } TAB_TRACKERS -> { TrackerTab.TRACKERS.position -> { (holder as ListsTabViewHolder.TrackersListViewHolder).onBind(uiState.trackers ?: emptyList()) } } Loading @@ -102,7 +102,8 @@ class ListsTabPagerAdapter( class AppsListViewHolder( private val binding: TrackersAppsListBinding, private val viewModel: TrackersPeriodViewModel private val onClickApp: (ApplicationDescription) -> Unit, private val onToggleHideNoTrackersApps: () -> Unit ) : ListsTabViewHolder(binding.root) { private val adapter = object : BindingListAdapter<TrackersItemAppBinding, AppWithCount>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BindingViewHolder<TrackersItemAppBinding> { Loading @@ -123,7 +124,7 @@ class ListsTabPagerAdapter( R.string.trackers_list_app_trackers_counts, item.count.toString() ) holder.binding.root.setOnClickListener { viewModel.onClickApp(item.app) onClickApp(item.app) } } } Loading @@ -131,7 +132,7 @@ class ListsTabPagerAdapter( init { setupRecyclerView(binding.list) binding.list.adapter = adapter binding.toggleNoTrackerApps.setOnClickListener { viewModel.onToggleHideNoTrackersApps() } binding.toggleNoTrackerApps.setOnClickListener { onToggleHideNoTrackersApps() } } fun onBind(uiState: TrackersPeriodState) { Loading @@ -151,8 +152,8 @@ class ListsTabPagerAdapter( } class TrackersListViewHolder( private val binding: TrackersListBinding, private val viewModel: TrackersPeriodViewModel binding: TrackersListBinding, private val onClickTracker: (Tracker) -> Unit ) : ListsTabViewHolder(binding.root) { private val adapter = object : BindingListAdapter<TrackersItemAppBinding, TrackerWithCount>() { Loading @@ -173,9 +174,7 @@ class ListsTabPagerAdapter( holder.binding.counts.text = itemView.context.getString( R.string.trackers_list_tracker_apps_counts, item.count.toString() ) holder.binding.root.setOnClickListener { viewModel.onClickTracker(item.tracker) } holder.binding.root.setOnClickListener { onClickTracker(item.tracker) } } } Loading app/src/main/java/foundation/e/advancedprivacy/features/trackers/TrackersPeriodFragment.kt +6 −2 Original line number Diff line number Diff line Loading @@ -79,13 +79,17 @@ class TrackersPeriodFragment : Fragment(R.layout.trackers_period_fragment) { graphHolder = GraphHolder(binding.graphContainer) tabAdapter = ListsTabPagerAdapter(requireContext(), viewModel) tabAdapter = ListsTabPagerAdapter( onClickApp = viewModel::onClickApp, onClickTracker = viewModel::onClickTracker, onToggleHideNoTrackersApps = viewModel::onToggleHideNoTrackersApps ) binding.listsPager.adapter = tabAdapter TabLayoutMediator(binding.listsTabs, binding.listsPager) { tab, position -> tab.text = getString( when (position) { TAB_APPS -> R.string.trackers_toggle_list_apps TrackerTab.APPS.position -> R.string.trackers_toggle_list_apps else -> R.string.trackers_toggle_list_trackers } ) Loading Loading
app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt +3 −1 Original line number Diff line number Diff line Loading @@ -146,7 +146,9 @@ val appModule = module { singleOf(::AppTrackersUseCase) singleOf(::TrackerDetailsUseCase) singleOf(::TrackersScreenUseCase) single { TrackersScreenUseCase(localStateRepository = get()) } single<IPermissionsPrivacyModule> { PermissionsPrivacyModuleImpl(context = androidContext()) Loading
app/src/main/java/foundation/e/advancedprivacy/features/dashboard/DashboardFragment.kt +6 −1 Original line number Diff line number Diff line Loading @@ -83,7 +83,12 @@ class DashboardFragment : NavToolbarFragment(R.layout.fragment_dashboard) { binding.fakeLocation.title.setText(R.string.dashboard_location_title) binding.ipScrambling.title.setText(R.string.dashboard_ipscrambling_title) tabAdapter = ShameListsTabPagerAdapter(viewModel) tabAdapter = ShameListsTabPagerAdapter( onClickShameApp = viewModel::onClickShameApp, onClickShameTracker = viewModel::onClickShameTracker, onClickViewAllApps = viewModel::onClickViewAllApps, onClickViewAllTrackers = viewModel::onClickViewAllTrackers ) binding.listsPager.adapter = tabAdapter Loading
app/src/main/java/foundation/e/advancedprivacy/features/dashboard/ShameListsTabPagerAdapter.kt +16 −13 Original line number Diff line number Diff line Loading @@ -32,11 +32,16 @@ import foundation.e.advancedprivacy.common.extensions.dpToPx import foundation.e.advancedprivacy.databinding.DashboardShameListBinding import foundation.e.advancedprivacy.databinding.TrackersItemAppBinding import foundation.e.advancedprivacy.domain.entities.AppWithCount import foundation.e.advancedprivacy.domain.entities.ApplicationDescription import foundation.e.advancedprivacy.domain.entities.TrackerWithCount import foundation.e.advancedprivacy.features.trackers.TrackerTab import foundation.e.advancedprivacy.trackers.domain.entities.Tracker class ShameListsTabPagerAdapter( private val viewModel: DashboardViewModel private val onClickShameApp: (ApplicationDescription) -> Unit, private val onClickShameTracker: (Tracker) -> Unit, private val onClickViewAllApps: () -> Unit, private val onClickViewAllTrackers: () -> Unit ) : RecyclerView.Adapter<ShameListsTabPagerAdapter.ListsTabViewHolder>() { private var uiState: DashboardState = DashboardState() Loading @@ -51,10 +56,10 @@ class ShameListsTabPagerAdapter( val view = DashboardShameListBinding.inflate(LayoutInflater.from(parent.context), parent, false) return when (viewType) { TrackerTab.APPS.position -> { ListsTabViewHolder.AppsListViewHolder(view, viewModel) ListsTabViewHolder.AppsListViewHolder(view, onClickShameApp, onClickViewAllApps) } else -> { ListsTabViewHolder.TrackersListViewHolder(view, viewModel) ListsTabViewHolder.TrackersListViewHolder(view, onClickShameTracker, onClickViewAllTrackers) } } } Loading Loading @@ -94,7 +99,8 @@ class ShameListsTabPagerAdapter( class AppsListViewHolder( private val binding: DashboardShameListBinding, private val viewModel: DashboardViewModel private val onClickShameApp: (ApplicationDescription) -> Unit, private val onClickViewAllApps: () -> Unit ) : ListsTabViewHolder(binding.root) { private val adapter = object : BindingListAdapter<TrackersItemAppBinding, AppWithCount>() { Loading @@ -116,9 +122,7 @@ class ShameListsTabPagerAdapter( R.string.dashboard_wall_of_shame_app_calls, numberFormatter.format(item.count) ) holder.binding.root.setOnClickListener { viewModel.onClickShameApp(item.app) } holder.binding.root.setOnClickListener { onClickShameApp(item.app) } } } init { Loading @@ -126,7 +130,7 @@ class ShameListsTabPagerAdapter( binding.list.adapter = adapter binding.viewAll.apply { text = binding.root.context.getString(R.string.dashboard_view_all_apps) setOnClickListener { viewModel.onClickViewAllApps() } setOnClickListener { onClickViewAllApps() } } } Loading @@ -137,7 +141,8 @@ class ShameListsTabPagerAdapter( class TrackersListViewHolder( private val binding: DashboardShameListBinding, private val viewModel: DashboardViewModel private val onClickShameTracker: (Tracker) -> Unit, private val onClickViewAllTrackers: () -> Unit ) : ListsTabViewHolder(binding.root) { private val adapter = object : BindingListAdapter<TrackersItemAppBinding, TrackerWithCount>() { Loading @@ -159,9 +164,7 @@ class ShameListsTabPagerAdapter( R.string.dashboard_wall_of_shame_trackers_calls, numberFormatter.format(item.count) ) holder.binding.root.setOnClickListener { viewModel.onClickShameTracker(item.tracker) } holder.binding.root.setOnClickListener { onClickShameTracker(item.tracker) } } } Loading @@ -170,7 +173,7 @@ class ShameListsTabPagerAdapter( binding.list.adapter = adapter binding.viewAll.apply { text = binding.root.context.getString(R.string.dashboard_view_all_trackers) setOnClickListener { viewModel.onClickViewAllTrackers() } setOnClickListener { onClickViewAllTrackers() } } } Loading
app/src/main/java/foundation/e/advancedprivacy/features/trackers/ListsTabPagerAdapter.kt +18 −19 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ */ package foundation.e.advancedprivacy.features.trackers import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup Loading @@ -33,14 +32,14 @@ import foundation.e.advancedprivacy.databinding.TrackersAppsListBinding import foundation.e.advancedprivacy.databinding.TrackersItemAppBinding import foundation.e.advancedprivacy.databinding.TrackersListBinding import foundation.e.advancedprivacy.domain.entities.AppWithCount import foundation.e.advancedprivacy.domain.entities.ApplicationDescription import foundation.e.advancedprivacy.domain.entities.TrackerWithCount const val TAB_APPS = 0 private const val TAB_TRACKERS = 1 import foundation.e.advancedprivacy.trackers.domain.entities.Tracker class ListsTabPagerAdapter( private val context: Context, private val viewModel: TrackersPeriodViewModel private val onClickTracker: (Tracker) -> Unit, private val onClickApp: (ApplicationDescription) -> Unit, private val onToggleHideNoTrackersApps: () -> Unit ) : RecyclerView.Adapter<ListsTabPagerAdapter.ListsTabViewHolder>() { private var uiState: TrackersPeriodState = TrackersPeriodState() Loading @@ -54,16 +53,17 @@ class ListsTabPagerAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListsTabViewHolder { val inflater = LayoutInflater.from(parent.context) return when (viewType) { TAB_APPS -> { TrackerTab.APPS.position -> { ListsTabViewHolder.AppsListViewHolder( TrackersAppsListBinding.inflate(inflater, parent, false), viewModel onClickApp, onToggleHideNoTrackersApps ) } else -> { ListsTabViewHolder.TrackersListViewHolder( TrackersListBinding.inflate(inflater, parent, false), viewModel onClickTracker ) } } Loading @@ -75,10 +75,10 @@ class ListsTabPagerAdapter( override fun onBindViewHolder(holder: ListsTabViewHolder, position: Int) { when (position) { TAB_APPS -> { TrackerTab.APPS.position -> { (holder as ListsTabViewHolder.AppsListViewHolder).onBind(uiState) } TAB_TRACKERS -> { TrackerTab.TRACKERS.position -> { (holder as ListsTabViewHolder.TrackersListViewHolder).onBind(uiState.trackers ?: emptyList()) } } Loading @@ -102,7 +102,8 @@ class ListsTabPagerAdapter( class AppsListViewHolder( private val binding: TrackersAppsListBinding, private val viewModel: TrackersPeriodViewModel private val onClickApp: (ApplicationDescription) -> Unit, private val onToggleHideNoTrackersApps: () -> Unit ) : ListsTabViewHolder(binding.root) { private val adapter = object : BindingListAdapter<TrackersItemAppBinding, AppWithCount>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BindingViewHolder<TrackersItemAppBinding> { Loading @@ -123,7 +124,7 @@ class ListsTabPagerAdapter( R.string.trackers_list_app_trackers_counts, item.count.toString() ) holder.binding.root.setOnClickListener { viewModel.onClickApp(item.app) onClickApp(item.app) } } } Loading @@ -131,7 +132,7 @@ class ListsTabPagerAdapter( init { setupRecyclerView(binding.list) binding.list.adapter = adapter binding.toggleNoTrackerApps.setOnClickListener { viewModel.onToggleHideNoTrackersApps() } binding.toggleNoTrackerApps.setOnClickListener { onToggleHideNoTrackersApps() } } fun onBind(uiState: TrackersPeriodState) { Loading @@ -151,8 +152,8 @@ class ListsTabPagerAdapter( } class TrackersListViewHolder( private val binding: TrackersListBinding, private val viewModel: TrackersPeriodViewModel binding: TrackersListBinding, private val onClickTracker: (Tracker) -> Unit ) : ListsTabViewHolder(binding.root) { private val adapter = object : BindingListAdapter<TrackersItemAppBinding, TrackerWithCount>() { Loading @@ -173,9 +174,7 @@ class ListsTabPagerAdapter( holder.binding.counts.text = itemView.context.getString( R.string.trackers_list_tracker_apps_counts, item.count.toString() ) holder.binding.root.setOnClickListener { viewModel.onClickTracker(item.tracker) } holder.binding.root.setOnClickListener { onClickTracker(item.tracker) } } } Loading
app/src/main/java/foundation/e/advancedprivacy/features/trackers/TrackersPeriodFragment.kt +6 −2 Original line number Diff line number Diff line Loading @@ -79,13 +79,17 @@ class TrackersPeriodFragment : Fragment(R.layout.trackers_period_fragment) { graphHolder = GraphHolder(binding.graphContainer) tabAdapter = ListsTabPagerAdapter(requireContext(), viewModel) tabAdapter = ListsTabPagerAdapter( onClickApp = viewModel::onClickApp, onClickTracker = viewModel::onClickTracker, onToggleHideNoTrackersApps = viewModel::onToggleHideNoTrackersApps ) binding.listsPager.adapter = tabAdapter TabLayoutMediator(binding.listsTabs, binding.listsPager) { tab, position -> tab.text = getString( when (position) { TAB_APPS -> R.string.trackers_toggle_list_apps TrackerTab.APPS.position -> R.string.trackers_toggle_list_apps else -> R.string.trackers_toggle_list_trackers } ) Loading