From 3a5c8061a772c122bf3eaf1b33a41bd52feaa6bc Mon Sep 17 00:00:00 2001 From: darken Date: Tue, 24 Sep 2024 14:50:52 +0200 Subject: [PATCH] Analyzer: Add action to refresh individual apps when browsing their details --- .../ui/storage/app/AppDetailsFragment.kt | 12 ++++++++++-- .../ui/storage/app/AppDetailsViewModel.kt | 7 ++++++- .../main/res/layout/analyzer_app_fragment.xml | 7 ++++--- .../res/menu/menu_analyzer_appdetails_list.xml | 16 ++++++++++++++++ 4 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 app/src/main/res/menu/menu_analyzer_appdetails_list.xml diff --git a/app/src/main/java/eu/darken/sdmse/analyzer/ui/storage/app/AppDetailsFragment.kt b/app/src/main/java/eu/darken/sdmse/analyzer/ui/storage/app/AppDetailsFragment.kt index cede75847..d05ae3596 100644 --- a/app/src/main/java/eu/darken/sdmse/analyzer/ui/storage/app/AppDetailsFragment.kt +++ b/app/src/main/java/eu/darken/sdmse/analyzer/ui/storage/app/AppDetailsFragment.kt @@ -1,6 +1,7 @@ package eu.darken.sdmse.analyzer.ui.storage.app import android.os.Bundle +import android.view.MenuItem import android.view.View import androidx.core.view.isInvisible import androidx.fragment.app.viewModels @@ -21,17 +22,23 @@ class AppDetailsFragment : Fragment3(R.layout.analyzer_app_fragment) { override val vm: AppDetailsViewModel by viewModels() override val ui: AnalyzerAppFragmentBinding by viewBinding() + private val menuRefreshAction: MenuItem? + get() = ui.toolbar.menu?.findItem(R.id.menu_action_refresh) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { ui.toolbar.apply { setupWithNavController(findNavController()) setOnMenuItemClickListener { when (it.itemId) { + R.id.menu_action_refresh -> { + vm.refresh() + true + } + else -> false } } - } - val adapter = AppDetailsAdapter() ui.list.setupDefaults(adapter, verticalDividers = false) @@ -42,6 +49,7 @@ class AppDetailsFragment : Fragment3(R.layout.analyzer_app_fragment) { adapter.update(state.items) loadingOverlay.setProgress(state.progress) list.isInvisible = state.progress != null + menuRefreshAction?.isVisible = state.progress == null } super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/eu/darken/sdmse/analyzer/ui/storage/app/AppDetailsViewModel.kt b/app/src/main/java/eu/darken/sdmse/analyzer/ui/storage/app/AppDetailsViewModel.kt index 3083c2e31..94b66d2a6 100644 --- a/app/src/main/java/eu/darken/sdmse/analyzer/ui/storage/app/AppDetailsViewModel.kt +++ b/app/src/main/java/eu/darken/sdmse/analyzer/ui/storage/app/AppDetailsViewModel.kt @@ -36,7 +36,7 @@ class AppDetailsViewModel @Inject constructor( @Suppress("unused") private val handle: SavedStateHandle, dispatcherProvider: DispatcherProvider, @Suppress("StaticFieldLeak") @ApplicationContext private val context: Context, - analyzer: Analyzer, + private val analyzer: Analyzer, ) : ViewModel3(dispatcherProvider) { private val navArgs by handle.navArgs() @@ -70,6 +70,11 @@ class AppDetailsViewModel @Inject constructor( return appContent?.pkgStats?.get(targetInstallId) } + fun refresh() = launch { + log(TAG) { "refresh()" } + analyzer.submit(AppDeepScanTask(targetStorageId, targetInstallId)) + } + val state = combine( // Handle process death+restore analyzer.data.filter { it.findPkg() != null }, diff --git a/app/src/main/res/layout/analyzer_app_fragment.xml b/app/src/main/res/layout/analyzer_app_fragment.xml index 4307a0e88..907de20c4 100644 --- a/app/src/main/res/layout/analyzer_app_fragment.xml +++ b/app/src/main/res/layout/analyzer_app_fragment.xml @@ -9,26 +9,27 @@ android:id="@+id/toolbar" style="@style/Widget.MaterialComponents.Toolbar.Primary" android:layout_width="0dp" - android:minHeight="?actionBarSize" android:layout_height="wrap_content" + android:minHeight="?actionBarSize" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" + app:menu="@menu/menu_analyzer_appdetails_list" app:title="@string/analyzer_storage_content_type_app_label" /> + + + + + + \ No newline at end of file