Merge "Support App details for work profile apps" into main
This commit is contained in:
@@ -18,7 +18,6 @@ package com.android.settings.applications.appinfo;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.UserManager;
|
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
@@ -39,10 +38,6 @@ public class AppInstallerInfoPreferenceController extends AppInfoPreferenceContr
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
if (UserManager.get(mContext).isManagedProfile()) {
|
|
||||||
return DISABLED_FOR_USER;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AppUtils.isMainlineModule(mContext.getPackageManager(), mPackageName)) {
|
if (AppUtils.isMainlineModule(mContext.getPackageManager(), mPackageName)) {
|
||||||
return DISABLED_FOR_USER;
|
return DISABLED_FOR_USER;
|
||||||
}
|
}
|
||||||
|
@@ -32,9 +32,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
|||||||
import com.android.settingslib.spa.widget.preference.Preference
|
import com.android.settingslib.spa.widget.preference.Preference
|
||||||
import com.android.settingslib.spa.widget.preference.PreferenceModel
|
import com.android.settingslib.spa.widget.preference.PreferenceModel
|
||||||
import com.android.settingslib.spaprivileged.framework.common.asUser
|
import com.android.settingslib.spaprivileged.framework.common.asUser
|
||||||
import com.android.settingslib.spaprivileged.framework.common.userManager
|
|
||||||
import com.android.settingslib.spaprivileged.model.app.userHandle
|
import com.android.settingslib.spaprivileged.model.app.userHandle
|
||||||
import com.android.settingslib.spaprivileged.model.app.userId
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
@@ -71,7 +69,6 @@ private class AppInstallerInfoPresenter(
|
|||||||
) {
|
) {
|
||||||
private val userContext = context.asUser(app.userHandle)
|
private val userContext = context.asUser(app.userHandle)
|
||||||
private val packageManager = userContext.packageManager
|
private val packageManager = userContext.packageManager
|
||||||
private val userManager = context.userManager
|
|
||||||
|
|
||||||
private val installerPackageFlow = flow {
|
private val installerPackageFlow = flow {
|
||||||
emit(withContext(Dispatchers.IO) {
|
emit(withContext(Dispatchers.IO) {
|
||||||
@@ -88,7 +85,6 @@ private class AppInstallerInfoPresenter(
|
|||||||
|
|
||||||
val isAvailableFlow = installerLabelFlow.map { installerLabel ->
|
val isAvailableFlow = installerLabelFlow.map { installerLabel ->
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
!userManager.isManagedProfile(app.userId) &&
|
|
||||||
!AppUtils.isMainlineModule(packageManager, app.packageName) &&
|
!AppUtils.isMainlineModule(packageManager, app.packageName) &&
|
||||||
installerLabel != null
|
installerLabel != null
|
||||||
}
|
}
|
||||||
|
@@ -37,7 +37,6 @@ import android.content.pm.ModuleInfo;
|
|||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.os.UserManager;
|
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
@@ -54,8 +53,6 @@ import org.robolectric.RuntimeEnvironment;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class AppInstallerInfoPreferenceControllerTest {
|
public class AppInstallerInfoPreferenceControllerTest {
|
||||||
|
|
||||||
@Mock
|
|
||||||
private UserManager mUserManager;
|
|
||||||
@Mock
|
@Mock
|
||||||
private PackageManager mPackageManager;
|
private PackageManager mPackageManager;
|
||||||
@Mock
|
@Mock
|
||||||
@@ -74,7 +71,6 @@ public class AppInstallerInfoPreferenceControllerTest {
|
|||||||
public void setUp() throws PackageManager.NameNotFoundException {
|
public void setUp() throws PackageManager.NameNotFoundException {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
|
|
||||||
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
||||||
final String installerPackage = "Installer1";
|
final String installerPackage = "Installer1";
|
||||||
when(mPackageManager.getInstallSourceInfo(anyString())).thenReturn(mInstallSourceInfo);
|
when(mPackageManager.getInstallSourceInfo(anyString())).thenReturn(mInstallSourceInfo);
|
||||||
@@ -86,18 +82,8 @@ public class AppInstallerInfoPreferenceControllerTest {
|
|||||||
mController.setParentFragment(mFragment);
|
mController.setParentFragment(mFragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getAvailabilityStatus_managedProfile_shouldReturnDisabled() {
|
|
||||||
when(mUserManager.isManagedProfile()).thenReturn(true);
|
|
||||||
|
|
||||||
assertThat(mController.getAvailabilityStatus())
|
|
||||||
.isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAvailabilityStatus_noAppLabel_shouldReturnDisabled() {
|
public void getAvailabilityStatus_noAppLabel_shouldReturnDisabled() {
|
||||||
when(mUserManager.isManagedProfile()).thenReturn(false);
|
|
||||||
|
|
||||||
assertThat(mController.getAvailabilityStatus())
|
assertThat(mController.getAvailabilityStatus())
|
||||||
.isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
|
.isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
|
||||||
}
|
}
|
||||||
@@ -106,7 +92,6 @@ public class AppInstallerInfoPreferenceControllerTest {
|
|||||||
public void getAvailabilityStatus_hasAppLabel_shouldReturnAvailable()
|
public void getAvailabilityStatus_hasAppLabel_shouldReturnAvailable()
|
||||||
throws PackageManager.NameNotFoundException {
|
throws PackageManager.NameNotFoundException {
|
||||||
final String packageName = "Package1";
|
final String packageName = "Package1";
|
||||||
when(mUserManager.isManagedProfile()).thenReturn(false);
|
|
||||||
when(mAppInfo.loadLabel(mPackageManager)).thenReturn("Label1");
|
when(mAppInfo.loadLabel(mPackageManager)).thenReturn("Label1");
|
||||||
mController = new AppInstallerInfoPreferenceController(mContext, "test_key");
|
mController = new AppInstallerInfoPreferenceController(mContext, "test_key");
|
||||||
mController.setPackageName(packageName);
|
mController.setPackageName(packageName);
|
||||||
@@ -161,7 +146,6 @@ public class AppInstallerInfoPreferenceControllerTest {
|
|||||||
public void getAvailabilityStatus_isMainlineModule_shouldReturnDisabled()
|
public void getAvailabilityStatus_isMainlineModule_shouldReturnDisabled()
|
||||||
throws PackageManager.NameNotFoundException {
|
throws PackageManager.NameNotFoundException {
|
||||||
final String packageName = "Package";
|
final String packageName = "Package";
|
||||||
when(mUserManager.isManagedProfile()).thenReturn(false);
|
|
||||||
when(mAppInfo.loadLabel(mPackageManager)).thenReturn("Label");
|
when(mAppInfo.loadLabel(mPackageManager)).thenReturn("Label");
|
||||||
mController.setPackageName(packageName);
|
mController.setPackageName(packageName);
|
||||||
mockMainlineModule(packageName, true /* isMainlineModule */);
|
mockMainlineModule(packageName, true /* isMainlineModule */);
|
||||||
|
@@ -19,7 +19,6 @@ package com.android.settings.spa.app.appinfo
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.ApplicationInfo
|
import android.content.pm.ApplicationInfo
|
||||||
import android.os.UserManager
|
|
||||||
import androidx.compose.runtime.CompositionLocalProvider
|
import androidx.compose.runtime.CompositionLocalProvider
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.test.assertIsDisplayed
|
import androidx.compose.ui.test.assertIsDisplayed
|
||||||
@@ -40,16 +39,13 @@ import com.android.settings.Utils
|
|||||||
import com.android.settings.applications.AppStoreUtil
|
import com.android.settings.applications.AppStoreUtil
|
||||||
import com.android.settingslib.applications.AppUtils
|
import com.android.settingslib.applications.AppUtils
|
||||||
import com.android.settingslib.spa.testutils.waitUntilExists
|
import com.android.settingslib.spa.testutils.waitUntilExists
|
||||||
import com.android.settingslib.spaprivileged.framework.common.userManager
|
|
||||||
import com.android.settingslib.spaprivileged.model.app.userHandle
|
import com.android.settingslib.spaprivileged.model.app.userHandle
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.mockito.Mock
|
|
||||||
import org.mockito.Mockito.any
|
import org.mockito.Mockito.any
|
||||||
import org.mockito.Mockito.anyInt
|
|
||||||
import org.mockito.Mockito.eq
|
import org.mockito.Mockito.eq
|
||||||
import org.mockito.Mockito.verify
|
import org.mockito.Mockito.verify
|
||||||
import org.mockito.MockitoSession
|
import org.mockito.MockitoSession
|
||||||
@@ -67,9 +63,6 @@ class AppInstallerInfoPreferenceTest {
|
|||||||
@Spy
|
@Spy
|
||||||
private val context: Context = ApplicationProvider.getApplicationContext()
|
private val context: Context = ApplicationProvider.getApplicationContext()
|
||||||
|
|
||||||
@Mock
|
|
||||||
private lateinit var userManager: UserManager
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
mockSession = mockitoSession()
|
mockSession = mockitoSession()
|
||||||
@@ -79,8 +72,6 @@ class AppInstallerInfoPreferenceTest {
|
|||||||
.mockStatic(AppUtils::class.java)
|
.mockStatic(AppUtils::class.java)
|
||||||
.strictness(Strictness.LENIENT)
|
.strictness(Strictness.LENIENT)
|
||||||
.startMocking()
|
.startMocking()
|
||||||
whenever(context.userManager).thenReturn(userManager)
|
|
||||||
whenever(userManager.isManagedProfile(anyInt())).thenReturn(false)
|
|
||||||
whenever(AppStoreUtil.getInstallerPackageName(any(), eq(PACKAGE_NAME)))
|
whenever(AppStoreUtil.getInstallerPackageName(any(), eq(PACKAGE_NAME)))
|
||||||
.thenReturn(INSTALLER_PACKAGE_NAME)
|
.thenReturn(INSTALLER_PACKAGE_NAME)
|
||||||
whenever(AppStoreUtil.getAppStoreLink(context, INSTALLER_PACKAGE_NAME, PACKAGE_NAME))
|
whenever(AppStoreUtil.getAppStoreLink(context, INSTALLER_PACKAGE_NAME, PACKAGE_NAME))
|
||||||
@@ -114,15 +105,6 @@ class AppInstallerInfoPreferenceTest {
|
|||||||
composeTestRule.onRoot().assertIsNotDisplayed()
|
composeTestRule.onRoot().assertIsNotDisplayed()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
fun whenIsManagedProfile_notDisplayed() {
|
|
||||||
whenever(userManager.isManagedProfile(anyInt())).thenReturn(true)
|
|
||||||
|
|
||||||
setContent()
|
|
||||||
|
|
||||||
composeTestRule.onRoot().assertIsNotDisplayed()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun whenIsMainlineModule_notDisplayed() {
|
fun whenIsMainlineModule_notDisplayed() {
|
||||||
whenever(AppUtils.isMainlineModule(any(), eq(PACKAGE_NAME))).thenReturn(true)
|
whenever(AppUtils.isMainlineModule(any(), eq(PACKAGE_NAME))).thenReturn(true)
|
||||||
|
Reference in New Issue
Block a user