diff --git a/src/com/android/settings/spa/app/appinfo/AppButtons.kt b/src/com/android/settings/spa/app/appinfo/AppButtons.kt index 06016fcb9c2..cbe2f1a9d42 100644 --- a/src/com/android/settings/spa/app/appinfo/AppButtons.kt +++ b/src/com/android/settings/spa/app/appinfo/AppButtons.kt @@ -21,23 +21,21 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.remember import com.android.settingslib.applications.AppUtils -import com.android.settingslib.spa.framework.compose.collectAsStateWithLifecycle import com.android.settingslib.spa.widget.button.ActionButton import com.android.settingslib.spa.widget.button.ActionButtons -import com.android.settingslib.spaprivileged.model.app.isSystemModule -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map -import kotlinx.coroutines.withContext @Composable fun AppButtons(packageInfoPresenter: PackageInfoPresenter) { + if (remember(packageInfoPresenter) { packageInfoPresenter.isMainlineModule() }) return val presenter = remember { AppButtonsPresenter(packageInfoPresenter) } - if (!presenter.isAvailableFlow.collectAsStateWithLifecycle(initialValue = false).value) return presenter.Dialogs() ActionButtons(actionButtons = presenter.rememberActionsButtons().value) } +private fun PackageInfoPresenter.isMainlineModule(): Boolean = + AppUtils.isMainlineModule(userPackageManager, packageName) + private class AppButtonsPresenter(private val packageInfoPresenter: PackageInfoPresenter) { private val appLaunchButton = AppLaunchButton(packageInfoPresenter) private val appInstallButton = AppInstallButton(packageInfoPresenter) @@ -46,15 +44,6 @@ private class AppButtonsPresenter(private val packageInfoPresenter: PackageInfoP private val appClearButton = AppClearButton(packageInfoPresenter) private val appForceStopButton = AppForceStopButton(packageInfoPresenter) - val isAvailableFlow = flow { emit(isAvailable()) } - - private suspend fun isAvailable(): Boolean = withContext(Dispatchers.IO) { - !packageInfoPresenter.userPackageManager.isSystemModule(packageInfoPresenter.packageName) && - !AppUtils.isMainlineModule( - packageInfoPresenter.userPackageManager, packageInfoPresenter.packageName - ) - } - @Composable fun rememberActionsButtons() = remember { packageInfoPresenter.flow.map { packageInfo -> diff --git a/src/com/android/settings/spa/app/appinfo/PackageInfoPresenter.kt b/src/com/android/settings/spa/app/appinfo/PackageInfoPresenter.kt index 26d2760efaa..2ff0bfe716b 100644 --- a/src/com/android/settings/spa/app/appinfo/PackageInfoPresenter.kt +++ b/src/com/android/settings/spa/app/appinfo/PackageInfoPresenter.kt @@ -148,9 +148,7 @@ class PackageInfoPresenter( private fun getPackageInfo() = PackageManagers.getPackageInfoAsUser( packageName = packageName, - flags = PackageManager.MATCH_DISABLED_COMPONENTS or - PackageManager.GET_SIGNATURES or - PackageManager.GET_PERMISSIONS, + flags = PackageManager.MATCH_DISABLED_COMPONENTS or PackageManager.GET_PERMISSIONS, userId = userId, ) } diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppButtonsTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppButtonsTest.kt index 0ca4f67f800..8faf5c91fe3 100644 --- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppButtonsTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppButtonsTest.kt @@ -18,12 +18,8 @@ package com.android.settings.spa.app.appinfo import android.content.Context import android.content.pm.ApplicationInfo -import android.content.pm.ModuleInfo import android.content.pm.PackageInfo import android.content.pm.PackageManager -import android.content.pm.PackageManager.NameNotFoundException -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsNotDisplayed import androidx.compose.ui.test.junit4.createComposeRule @@ -33,16 +29,13 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.dx.mockito.inline.extended.ExtendedMockito import com.android.settingslib.applications.AppUtils import com.android.settingslib.spa.testutils.delay -import kotlinx.coroutines.flow.flowOf -import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.flow.MutableStateFlow import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock -import org.mockito.Mockito.doReturn -import org.mockito.Mockito.doThrow import org.mockito.MockitoSession import org.mockito.Spy import org.mockito.quality.Strictness @@ -74,7 +67,6 @@ class AppButtonsTest { whenever(packageInfoPresenter.context).thenReturn(context) whenever(packageInfoPresenter.packageName).thenReturn(PACKAGE_NAME) whenever(packageInfoPresenter.userPackageManager).thenReturn(packageManager) - doThrow(NameNotFoundException()).`when`(packageManager).getModuleInfo(PACKAGE_NAME, 0) whenever(packageManager.getPackageInfo(PACKAGE_NAME, 0)).thenReturn(PACKAGE_INFO) whenever(AppUtils.isMainlineModule(packageManager, PACKAGE_NAME)).thenReturn(false) } @@ -84,15 +76,6 @@ class AppButtonsTest { mockSession.finishMocking() } - @Test - fun isSystemModule_notDisplayed() { - doReturn(ModuleInfo()).`when`(packageManager).getModuleInfo(PACKAGE_NAME, 0) - - setContent() - - composeTestRule.onRoot().assertIsNotDisplayed() - } - @Test fun isMainlineModule_notDisplayed() { whenever(AppUtils.isMainlineModule(packageManager, PACKAGE_NAME)).thenReturn(true) @@ -110,12 +93,8 @@ class AppButtonsTest { } private fun setContent() { + whenever(packageInfoPresenter.flow).thenReturn(MutableStateFlow(PACKAGE_INFO)) composeTestRule.setContent { - val scope = rememberCoroutineScope() - LaunchedEffect(Unit) { - whenever(packageInfoPresenter.flow).thenReturn(flowOf(PACKAGE_INFO).stateIn(scope)) - } - AppButtons(packageInfoPresenter) }