Loading src/com/android/settings/applications/defaultapps/DefaultHomePicker.java +3 −1 Original line number Diff line number Diff line Loading @@ -63,13 +63,15 @@ public class DefaultHomePicker extends DefaultAppPickerFragment { } final String summary; boolean enabled = true; if (mustSupportManagedProfile && !launcherHasManagedProfilesFeature(resolveInfo)) { summary = getContext().getString(R.string.home_work_profile_not_supported); enabled = false; } else { summary = null; } final DefaultAppInfo candidate = new DefaultAppInfo(mPm, mUserId, activityName, summary); new DefaultAppInfo(mPm, mUserId, activityName, summary, enabled); candidates.add(candidate); } return candidates; Loading tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java +83 −6 Original line number Diff line number Diff line Loading @@ -16,11 +16,17 @@ package com.android.settings.applications.defaultapps; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; import android.os.Build; import android.os.UserManager; import com.android.settings.SettingsRobolectricTestRunner; Loading @@ -33,14 +39,22 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; import java.util.List; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyList; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -55,7 +69,9 @@ public class DefaultHomePickerTest { @Mock private UserManager mUserManager; @Mock private PackageManagerWrapper mPackageManager; private PackageManagerWrapper mPackageManagerWrapper; @Mock private PackageManager mPackageManager; private DefaultHomePicker mPicker; Loading @@ -63,28 +79,89 @@ public class DefaultHomePickerTest { public void setUp() { MockitoAnnotations.initMocks(this); when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); when(mPackageManagerWrapper.getPackageManager()).thenReturn(mPackageManager); mPicker = new DefaultHomePicker(); mPicker = spy(new DefaultHomePicker()); mPicker.onAttach((Context) mActivity); ReflectionHelpers.setField(mPicker, "mPm", mPackageManager); ReflectionHelpers.setField(mPicker, "mPm", mPackageManagerWrapper); doReturn(RuntimeEnvironment.application).when(mPicker).getContext(); } @Test public void setDefaultAppKey_shouldUpdateDefault() { assertThat(mPicker.setDefaultKey(TEST_APP_KEY)).isTrue(); verify(mPackageManager).replacePreferredActivity(any(IntentFilter.class), verify(mPackageManagerWrapper).replacePreferredActivity(any(IntentFilter.class), anyInt(), any(ComponentName[].class), any(ComponentName.class)); } @Test public void getDefaultAppKey_shouldReturnDefault() { final ComponentName cn = mock(ComponentName.class); when(mPackageManager.getHomeActivities(anyList())) when(mPackageManagerWrapper.getHomeActivities(anyList())) .thenReturn(cn); mPicker.getDefaultKey(); verify(cn).flattenToString(); } @Test public void getCandidates_allLaunchersAvailableIfNoManagedProfile() throws NameNotFoundException { addLaunchers(); List<DefaultAppInfo> candidates = mPicker.getCandidates(); assertThat(candidates.size()).isEqualTo(2); assertThat(candidates.get(0).summary).isNull(); assertThat(candidates.get(0).enabled).isTrue(); assertThat(candidates.get(1).summary).isNull(); assertThat(candidates.get(1).enabled).isTrue(); } @Test public void getCandidates_onlyLollipopPlusLaunchersAvailableIfManagedProfile() throws NameNotFoundException { createManagedProfile(); addLaunchers(); List<DefaultAppInfo> candidates = mPicker.getCandidates(); assertThat(candidates.size()).isEqualTo(2); DefaultAppInfo lollipopPlusLauncher = candidates.get(0); assertThat(lollipopPlusLauncher.summary).isNull(); assertThat(lollipopPlusLauncher.enabled).isTrue(); DefaultAppInfo preLollipopLauncher = candidates.get(1); assertThat(preLollipopLauncher.summary).isNotNull(); assertThat(preLollipopLauncher.enabled).isFalse(); } private void createManagedProfile() { ArrayList<UserInfo> profiles = new ArrayList<UserInfo>(); profiles.add(new UserInfo(/*id=*/ 10, "TestUserName", UserInfo.FLAG_MANAGED_PROFILE)); when(mUserManager.getProfiles(anyInt())).thenReturn(profiles); } private ResolveInfo createLauncher( String packageName, String className, int targetSdk) throws NameNotFoundException { ResolveInfo launcher = new ResolveInfo(); launcher.activityInfo = new ActivityInfo(); launcher.activityInfo.packageName = packageName; launcher.activityInfo.name = className; ApplicationInfo launcherAppInfo = new ApplicationInfo(); launcherAppInfo.targetSdkVersion = targetSdk; when(mPackageManager.getApplicationInfo(eq(launcher.activityInfo.packageName), anyInt())) .thenReturn(launcherAppInfo); return launcher; } private void addLaunchers() throws NameNotFoundException { doAnswer(invocation -> { // The result of this method is stored in the first parameter... List<ResolveInfo> parameter = (List<ResolveInfo>) invocation.getArguments()[0]; parameter.add(createLauncher( "package.1", "LollipopPlusLauncher", Build.VERSION_CODES.LOLLIPOP)); parameter.add(createLauncher( "package.2", "PreLollipopLauncher", Build.VERSION_CODES.KITKAT)); return null; }) .when(mPackageManagerWrapper).getHomeActivities(anyList()); } } Loading
src/com/android/settings/applications/defaultapps/DefaultHomePicker.java +3 −1 Original line number Diff line number Diff line Loading @@ -63,13 +63,15 @@ public class DefaultHomePicker extends DefaultAppPickerFragment { } final String summary; boolean enabled = true; if (mustSupportManagedProfile && !launcherHasManagedProfilesFeature(resolveInfo)) { summary = getContext().getString(R.string.home_work_profile_not_supported); enabled = false; } else { summary = null; } final DefaultAppInfo candidate = new DefaultAppInfo(mPm, mUserId, activityName, summary); new DefaultAppInfo(mPm, mUserId, activityName, summary, enabled); candidates.add(candidate); } return candidates; Loading
tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java +83 −6 Original line number Diff line number Diff line Loading @@ -16,11 +16,17 @@ package com.android.settings.applications.defaultapps; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; import android.os.Build; import android.os.UserManager; import com.android.settings.SettingsRobolectricTestRunner; Loading @@ -33,14 +39,22 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; import java.util.List; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyList; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -55,7 +69,9 @@ public class DefaultHomePickerTest { @Mock private UserManager mUserManager; @Mock private PackageManagerWrapper mPackageManager; private PackageManagerWrapper mPackageManagerWrapper; @Mock private PackageManager mPackageManager; private DefaultHomePicker mPicker; Loading @@ -63,28 +79,89 @@ public class DefaultHomePickerTest { public void setUp() { MockitoAnnotations.initMocks(this); when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); when(mPackageManagerWrapper.getPackageManager()).thenReturn(mPackageManager); mPicker = new DefaultHomePicker(); mPicker = spy(new DefaultHomePicker()); mPicker.onAttach((Context) mActivity); ReflectionHelpers.setField(mPicker, "mPm", mPackageManager); ReflectionHelpers.setField(mPicker, "mPm", mPackageManagerWrapper); doReturn(RuntimeEnvironment.application).when(mPicker).getContext(); } @Test public void setDefaultAppKey_shouldUpdateDefault() { assertThat(mPicker.setDefaultKey(TEST_APP_KEY)).isTrue(); verify(mPackageManager).replacePreferredActivity(any(IntentFilter.class), verify(mPackageManagerWrapper).replacePreferredActivity(any(IntentFilter.class), anyInt(), any(ComponentName[].class), any(ComponentName.class)); } @Test public void getDefaultAppKey_shouldReturnDefault() { final ComponentName cn = mock(ComponentName.class); when(mPackageManager.getHomeActivities(anyList())) when(mPackageManagerWrapper.getHomeActivities(anyList())) .thenReturn(cn); mPicker.getDefaultKey(); verify(cn).flattenToString(); } @Test public void getCandidates_allLaunchersAvailableIfNoManagedProfile() throws NameNotFoundException { addLaunchers(); List<DefaultAppInfo> candidates = mPicker.getCandidates(); assertThat(candidates.size()).isEqualTo(2); assertThat(candidates.get(0).summary).isNull(); assertThat(candidates.get(0).enabled).isTrue(); assertThat(candidates.get(1).summary).isNull(); assertThat(candidates.get(1).enabled).isTrue(); } @Test public void getCandidates_onlyLollipopPlusLaunchersAvailableIfManagedProfile() throws NameNotFoundException { createManagedProfile(); addLaunchers(); List<DefaultAppInfo> candidates = mPicker.getCandidates(); assertThat(candidates.size()).isEqualTo(2); DefaultAppInfo lollipopPlusLauncher = candidates.get(0); assertThat(lollipopPlusLauncher.summary).isNull(); assertThat(lollipopPlusLauncher.enabled).isTrue(); DefaultAppInfo preLollipopLauncher = candidates.get(1); assertThat(preLollipopLauncher.summary).isNotNull(); assertThat(preLollipopLauncher.enabled).isFalse(); } private void createManagedProfile() { ArrayList<UserInfo> profiles = new ArrayList<UserInfo>(); profiles.add(new UserInfo(/*id=*/ 10, "TestUserName", UserInfo.FLAG_MANAGED_PROFILE)); when(mUserManager.getProfiles(anyInt())).thenReturn(profiles); } private ResolveInfo createLauncher( String packageName, String className, int targetSdk) throws NameNotFoundException { ResolveInfo launcher = new ResolveInfo(); launcher.activityInfo = new ActivityInfo(); launcher.activityInfo.packageName = packageName; launcher.activityInfo.name = className; ApplicationInfo launcherAppInfo = new ApplicationInfo(); launcherAppInfo.targetSdkVersion = targetSdk; when(mPackageManager.getApplicationInfo(eq(launcher.activityInfo.packageName), anyInt())) .thenReturn(launcherAppInfo); return launcher; } private void addLaunchers() throws NameNotFoundException { doAnswer(invocation -> { // The result of this method is stored in the first parameter... List<ResolveInfo> parameter = (List<ResolveInfo>) invocation.getArguments()[0]; parameter.add(createLauncher( "package.1", "LollipopPlusLauncher", Build.VERSION_CODES.LOLLIPOP)); parameter.add(createLauncher( "package.2", "PreLollipopLauncher", Build.VERSION_CODES.KITKAT)); return null; }) .when(mPackageManagerWrapper).getHomeActivities(anyList()); } }