Merge "Migrate all default app shortcut preference to use roles."

This commit is contained in:
TreeHugger Robot
2019-03-01 18:34:29 +00:00
committed by Android (Google) Code Review
8 changed files with 45 additions and 326 deletions

View File

@@ -18,7 +18,6 @@ import android.app.role.RoleManager;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle;
import android.os.UserManager; import android.os.UserManager;
import android.permission.PermissionControllerManager; import android.permission.PermissionControllerManager;
import android.text.TextUtils; import android.text.TextUtils;
@@ -28,10 +27,7 @@ import androidx.preference.PreferenceScreen;
import com.android.internal.util.CollectionUtils; import com.android.internal.util.CollectionUtils;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.applications.DefaultAppSettings;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.SubSettingLauncher;
/* /*
* Abstract base controller for the default app shortcut preferences that launches the default app * Abstract base controller for the default app shortcut preferences that launches the default app
@@ -58,8 +54,6 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
mRoleManager = context.getSystemService(RoleManager.class); mRoleManager = context.getSystemService(RoleManager.class);
// TODO: STOPSHIP(b/110557011): Remove this check once we have all default apps migrated.
if (mRoleName != null) {
final PermissionControllerManager permissionControllerManager = final PermissionControllerManager permissionControllerManager =
mContext.getSystemService(PermissionControllerManager.class); mContext.getSystemService(PermissionControllerManager.class);
permissionControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName, permissionControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName,
@@ -68,13 +62,6 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
refreshAvailability(); refreshAvailability();
}); });
} }
}
// TODO: STOPSHIP(b/110557011): Remove this once we have all default apps migrated.
public DefaultAppShortcutPreferenceControllerBase(Context context, String preferenceKey,
String packageName) {
this(context, preferenceKey, null /* roleName */, packageName);
}
@Override @Override
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
@@ -98,7 +85,7 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
if (mContext.getSystemService(UserManager.class).isManagedProfile()) { if (mContext.getSystemService(UserManager.class).isManagedProfile()) {
return DISABLED_FOR_USER; return DISABLED_FOR_USER;
} }
return hasAppCapability() ? AVAILABLE : UNSUPPORTED_ON_DEVICE; return mAppQualified ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
} }
@Override @Override
@@ -112,49 +99,20 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
if (!TextUtils.equals(mPreferenceKey, preference.getKey())) { if (!TextUtils.equals(mPreferenceKey, preference.getKey())) {
return false; return false;
} }
// TODO: STOPSHIP(b/110557011): Remove this check once we have all default apps migrated.
if (mRoleName != null) {
final Intent intent = new Intent(Intent.ACTION_MANAGE_DEFAULT_APP) final Intent intent = new Intent(Intent.ACTION_MANAGE_DEFAULT_APP)
.putExtra(Intent.EXTRA_ROLE_NAME, mRoleName); .putExtra(Intent.EXTRA_ROLE_NAME, mRoleName);
mContext.startActivity(intent); mContext.startActivity(intent);
} else {
final Bundle bundle = new Bundle();
bundle.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, mPreferenceKey);
new SubSettingLauncher(mContext)
.setDestination(DefaultAppSettings.class.getName())
.setArguments(bundle)
.setTitleRes(R.string.configure_apps)
.setSourceMetricsCategory(SettingsEnums.PAGE_UNKNOWN)
.launch();
}
return true; return true;
} }
/**
* Check whether the app has the default app capability
*
* @return true if the app has the default app capability
*/
protected boolean hasAppCapability() {
// TODO: STOPSHIP(b/110557011): Remove this check once we have all default apps migrated.
if (mRoleName != null) {
return mAppQualified;
}
return false;
}
/** /**
* Check whether the app is the default app * Check whether the app is the default app
* *
* @return true if the app is the default app * @return true if the app is the default app
*/ */
protected boolean isDefaultApp() { private boolean isDefaultApp() {
// TODO: STOPSHIP(b/110557011): Remove this check once we have all default apps migrated.
if (mRoleName != null) {
final String packageName = CollectionUtils.firstOrNull(mRoleManager.getRoleHolders( final String packageName = CollectionUtils.firstOrNull(mRoleManager.getRoleHolders(
mRoleName)); mRoleName));
return TextUtils.equals(mPackageName, packageName); return TextUtils.equals(mPackageName, packageName);
} }
return false;
}
} }

View File

@@ -14,10 +14,8 @@
package com.android.settings.applications.appinfo; package com.android.settings.applications.appinfo;
import android.app.role.RoleManager;
import android.content.Context; import android.content.Context;
import android.os.UserHandle;
import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController;
public class DefaultBrowserShortcutPreferenceController public class DefaultBrowserShortcutPreferenceController
extends DefaultAppShortcutPreferenceControllerBase { extends DefaultAppShortcutPreferenceControllerBase {
@@ -25,19 +23,6 @@ public class DefaultBrowserShortcutPreferenceController
private static final String KEY = "default_browser"; private static final String KEY = "default_browser";
public DefaultBrowserShortcutPreferenceController(Context context, String packageName) { public DefaultBrowserShortcutPreferenceController(Context context, String packageName) {
super(context, KEY, packageName); super(context, KEY, RoleManager.ROLE_BROWSER, packageName);
} }
@Override
protected boolean hasAppCapability() {
return DefaultBrowserPreferenceController
.hasBrowserPreference(mPackageName, mContext, UserHandle.myUserId());
}
@Override
protected boolean isDefaultApp() {
return new DefaultBrowserPreferenceController(mContext)
.isBrowserDefault(mPackageName, UserHandle.myUserId());
}
} }

View File

@@ -14,27 +14,15 @@
package com.android.settings.applications.appinfo; package com.android.settings.applications.appinfo;
import android.app.role.RoleManager;
import android.content.Context; import android.content.Context;
import com.android.settings.applications.defaultapps.DefaultEmergencyPreferenceController;
public class DefaultEmergencyShortcutPreferenceController public class DefaultEmergencyShortcutPreferenceController
extends DefaultAppShortcutPreferenceControllerBase { extends DefaultAppShortcutPreferenceControllerBase {
private static final String KEY = "default_emergency_app"; private static final String KEY = "default_emergency_app";
public DefaultEmergencyShortcutPreferenceController(Context context, String packageName) { public DefaultEmergencyShortcutPreferenceController(Context context, String packageName) {
super(context, KEY, packageName); super(context, KEY, RoleManager.ROLE_EMERGENCY, packageName);
} }
@Override
protected boolean hasAppCapability() {
return DefaultEmergencyPreferenceController.hasEmergencyPreference(mPackageName, mContext);
}
@Override
protected boolean isDefaultApp() {
return DefaultEmergencyPreferenceController.isEmergencyDefault(mPackageName, mContext);
}
} }

View File

@@ -14,28 +14,15 @@
package com.android.settings.applications.appinfo; package com.android.settings.applications.appinfo;
import android.app.role.RoleManager;
import android.content.Context; import android.content.Context;
import com.android.settings.applications.defaultapps.DefaultHomePreferenceController;
public class DefaultHomeShortcutPreferenceController public class DefaultHomeShortcutPreferenceController
extends DefaultAppShortcutPreferenceControllerBase { extends DefaultAppShortcutPreferenceControllerBase {
private static final String KEY = "default_home"; private static final String KEY = "default_home";
public DefaultHomeShortcutPreferenceController(Context context, String packageName) { public DefaultHomeShortcutPreferenceController(Context context, String packageName) {
super(context, KEY, packageName); super(context, KEY, RoleManager.ROLE_HOME, packageName);
} }
@Override
protected boolean hasAppCapability() {
return DefaultHomePreferenceController.hasHomePreference(mPackageName, mContext);
}
@Override
protected boolean isDefaultApp() {
return DefaultHomePreferenceController.isHomeDefault(mPackageName,
mContext.getPackageManager());
}
} }

View File

@@ -34,8 +34,6 @@ import android.permission.PermissionControllerManager;
import androidx.preference.Preference; import androidx.preference.Preference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.applications.DefaultAppSettings;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -73,7 +71,6 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {
private ShadowUserManager mShadowUserManager; private ShadowUserManager mShadowUserManager;
private TestRolePreferenceController mController; private TestRolePreferenceController mController;
private TestLegacyPreferenceController mLegacyController;
@Before @Before
public void setUp() { public void setUp() {
@@ -86,7 +83,6 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {
mShadowUserManager = shadowOf(mActivity.getSystemService(UserManager.class)); mShadowUserManager = shadowOf(mActivity.getSystemService(UserManager.class));
mController = new TestRolePreferenceController(mActivity); mController = new TestRolePreferenceController(mActivity);
when(mPreference.getKey()).thenReturn(mController.getPreferenceKey()); when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
mLegacyController = new TestLegacyPreferenceController(mActivity);
} }
@Test @Test
@@ -141,8 +137,8 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {
when(mRoleManager.getRoleHolders(eq(TEST_ROLE_NAME))).thenReturn(Collections.singletonList( when(mRoleManager.getRoleHolders(eq(TEST_ROLE_NAME))).thenReturn(Collections.singletonList(
TEST_PACKAGE_NAME)); TEST_PACKAGE_NAME));
final CharSequence yesText = mActivity.getText(R.string.yes); final CharSequence yesText = mActivity.getText(R.string.yes);
mController.updateState(mPreference); mController.updateState(mPreference);
verify(mPreference).setSummary(yesText); verify(mPreference).setSummary(yesText);
} }
@@ -150,17 +146,17 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {
public void updateState_notRoleHoler_shouldSetSummaryToNo() { public void updateState_notRoleHoler_shouldSetSummaryToNo() {
when(mRoleManager.getRoleHolders(eq(TEST_ROLE_NAME))).thenReturn(Collections.emptyList()); when(mRoleManager.getRoleHolders(eq(TEST_ROLE_NAME))).thenReturn(Collections.emptyList());
final CharSequence noText = mActivity.getText(R.string.no); final CharSequence noText = mActivity.getText(R.string.no);
mController.updateState(mPreference); mController.updateState(mPreference);
verify(mPreference).setSummary(noText); verify(mPreference).setSummary(noText);
} }
@Test @Test
public void handlePreferenceTreeClick_shouldStartManageDefaultAppIntent() { public void handlePreferenceTreeClick_shouldStartManageDefaultAppIntent() {
final ShadowActivity shadowActivity = shadowOf(mActivity); final ShadowActivity shadowActivity = shadowOf(mActivity);
mController.handlePreferenceTreeClick(mPreference); mController.handlePreferenceTreeClick(mPreference);
final Intent intent = shadowActivity.getNextStartedActivity(); final Intent intent = shadowActivity.getNextStartedActivity();
assertThat(intent).isNotNull(); assertThat(intent).isNotNull();
assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MANAGE_DEFAULT_APP); assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MANAGE_DEFAULT_APP);
assertThat(intent.getStringExtra(Intent.EXTRA_ROLE_NAME)).isEqualTo(TEST_ROLE_NAME); assertThat(intent.getStringExtra(Intent.EXTRA_ROLE_NAME)).isEqualTo(TEST_ROLE_NAME);
@@ -172,76 +168,4 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {
super(context, TEST_PREFERENCE_KEY, TEST_ROLE_NAME, TEST_PACKAGE_NAME); super(context, TEST_PREFERENCE_KEY, TEST_ROLE_NAME, TEST_PACKAGE_NAME);
} }
} }
// TODO: STOPSHIP(b/110557011): Remove following tests once we have all default apps migrated.
@Test
public void getAvailabilityStatus_hasAppCapability_shouldReturnAvailable() {
mShadowUserManager.setManagedProfile(false);
mLegacyController.mHasAppCapability = true;
assertThat(mLegacyController.getAvailabilityStatus()).isEqualTo(
DefaultAppShortcutPreferenceControllerBase.AVAILABLE);
}
@Test
public void getAvailabilityStatus_noAppCapability_shouldReturnDisabled() {
mShadowUserManager.setManagedProfile(false);
mLegacyController.mHasAppCapability = false;
assertThat(mLegacyController.getAvailabilityStatus()).isEqualTo(
DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE);
}
@Test
public void updateState_isDefaultApp_shouldSetSummaryToYes() {
mLegacyController.mIsDefaultApp = true;
final CharSequence yesText = mActivity.getText(R.string.yes);
mLegacyController.updateState(mPreference);
verify(mPreference).setSummary(yesText);
}
@Test
public void updateState_notDefaultApp_shouldSetSummaryToNo() {
mLegacyController.mIsDefaultApp = false;
final CharSequence noText = mActivity.getText(R.string.no);
mLegacyController.updateState(mPreference);
verify(mPreference).setSummary(noText);
}
@Test
public void handlePreferenceTreeClick_shouldStartDefaultAppSettings() {
final ShadowActivity shadowActivity = shadowOf(mActivity);
mLegacyController.handlePreferenceTreeClick(mPreference);
final Intent intent = shadowActivity.getNextStartedActivity();
assertThat(intent).isNotNull();
assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo(
DefaultAppSettings.class.getName());
assertThat(intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS).getString(
SettingsActivity.EXTRA_FRAGMENT_ARG_KEY)).isEqualTo(TEST_PREFERENCE_KEY);
}
private class TestLegacyPreferenceController
extends DefaultAppShortcutPreferenceControllerBase {
private boolean mIsDefaultApp;
private boolean mHasAppCapability;
private TestLegacyPreferenceController(Context context) {
super(context, TEST_PREFERENCE_KEY, TEST_PACKAGE_NAME);
}
@Override
protected boolean hasAppCapability() {
return mHasAppCapability;
}
@Override
protected boolean isDefaultApp() {
return mIsDefaultApp;
}
}
} }

View File

@@ -18,15 +18,8 @@ package com.android.settings.applications.appinfo;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.permission.PermissionControllerManager;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -35,57 +28,27 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowApplication;
import java.util.ArrayList;
import java.util.List;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class DefaultBrowserShortcutPreferenceControllerTest { public class DefaultBrowserShortcutPreferenceControllerTest {
@Mock @Mock
private PackageManager mPackageManager; private PermissionControllerManager mPermissionControllerManager;
private Context mContext;
private DefaultBrowserShortcutPreferenceController mController; private DefaultBrowserShortcutPreferenceController mController;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); ShadowApplication.getInstance().setSystemService(Context.PERMISSION_CONTROLLER_SERVICE,
when(mContext.getPackageManager()).thenReturn(mPackageManager); mPermissionControllerManager);
mController = new DefaultBrowserShortcutPreferenceController(mContext, "Package1"); mController = new DefaultBrowserShortcutPreferenceController(RuntimeEnvironment.application,
"Package1");
} }
@Test @Test
public void getPreferenceKey_shouldReturnDefaultBrowser() { public void getPreferenceKey_shouldReturnDefaultBrowser() {
assertThat(mController.getPreferenceKey()).isEqualTo("default_browser"); assertThat(mController.getPreferenceKey()).isEqualTo("default_browser");
} }
@Test
public void hasAppCapability_hasBrowserCapability_shouldReturnTrue() {
List<ResolveInfo> resolveInfos = new ArrayList<>();
resolveInfos.add(new ResolveInfo());
when(mPackageManager.queryIntentActivitiesAsUser(argThat(intent-> intent != null
&& intent.getCategories().contains(Intent.CATEGORY_BROWSABLE)), anyInt(), anyInt()))
.thenReturn(resolveInfos);
assertThat(mController.hasAppCapability()).isTrue();
}
@Test
public void hasAppCapability_noBrowserCapability_shouldReturnFalse() {
assertThat(mController.hasAppCapability()).isFalse();
}
@Test
public void isDefaultApp_isDefaultBrowser_shouldReturnTrue() {
when(mPackageManager.getDefaultBrowserPackageNameAsUser(anyInt())).thenReturn("Package1");
assertThat(mController.isDefaultApp()).isTrue();
}
@Test
public void isDefaultApp_notDefaultBrowser_shouldReturnFalse() {
assertThat(mController.isDefaultApp()).isFalse();
}
} }

View File

@@ -18,17 +18,8 @@ package com.android.settings.applications.appinfo;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.app.role.RoleManager;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.permission.PermissionControllerManager;
import android.content.pm.ResolveInfo;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -37,62 +28,27 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowApplication;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class DefaultEmergencyShortcutPreferenceControllerTest { public class DefaultEmergencyShortcutPreferenceControllerTest {
@Mock @Mock
private RoleManager mRoleManager; private PermissionControllerManager mPermissionControllerManager;
@Mock
private PackageManager mPackageManager;
private Context mContext;
private DefaultEmergencyShortcutPreferenceController mController; private DefaultEmergencyShortcutPreferenceController mController;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); ShadowApplication.getInstance().setSystemService(Context.PERMISSION_CONTROLLER_SERVICE,
when(mContext.getPackageManager()).thenReturn(mPackageManager); mPermissionControllerManager);
when(mContext.getSystemService(RoleManager.class)).thenReturn(mRoleManager); mController = new DefaultEmergencyShortcutPreferenceController(
mController = new DefaultEmergencyShortcutPreferenceController(mContext, "Package1"); RuntimeEnvironment.application, "Package1");
} }
@Test @Test
public void getPreferenceKey_shouldReturnDefaultEmergency() { public void getPreferenceKey_shouldReturnDefaultEmergency() {
assertThat(mController.getPreferenceKey()).isEqualTo("default_emergency_app"); assertThat(mController.getPreferenceKey()).isEqualTo("default_emergency_app");
} }
@Test
public void hasAppCapability_hasEmergencyCapability_shouldReturnTrue() {
List<ResolveInfo> resolveInfos = new ArrayList<>();
resolveInfos.add(new ResolveInfo());
when(mPackageManager.queryIntentActivities(argThat(intent-> intent != null
&& intent.getAction().equals(TelephonyManager.ACTION_EMERGENCY_ASSISTANCE)),
anyInt())).thenReturn(resolveInfos);
assertThat(mController.hasAppCapability()).isTrue();
}
@Test
public void hasAppCapability_noEmergencyCapability_shouldReturnFalse() {
assertThat(mController.hasAppCapability()).isFalse();
}
@Test
public void isDefaultApp_isDefaultEmergency_shouldReturnTrue() {
when(mRoleManager.getRoleHolders(RoleManager.ROLE_EMERGENCY))
.thenReturn(Collections.singletonList("Package1"));
assertThat(mController.isDefaultApp()).isTrue();
}
@Test
public void isDefaultApp_notDefaultEmergency_shouldReturnFalse() {
assertThat(mController.isDefaultApp()).isFalse();
}
} }

View File

@@ -18,15 +18,8 @@ package com.android.settings.applications.appinfo;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.permission.PermissionControllerManager;
import com.android.settings.applications.defaultapps.DefaultHomePreferenceController;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -35,62 +28,27 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class DefaultHomeShortcutPreferenceControllerTest { public class DefaultHomeShortcutPreferenceControllerTest {
@Mock @Mock
private PackageManager mPackageManager; private PermissionControllerManager mPermissionControllerManager;
private Context mContext;
private DefaultHomeShortcutPreferenceController mController; private DefaultHomeShortcutPreferenceController mController;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); ShadowApplication.getInstance().setSystemService(Context.PERMISSION_CONTROLLER_SERVICE,
when(mContext.getPackageManager()).thenReturn(mPackageManager); mPermissionControllerManager);
mController = new DefaultHomeShortcutPreferenceController(mContext, "Package1"); mController = new DefaultHomeShortcutPreferenceController(RuntimeEnvironment.application,
"Package1");
} }
@Test @Test
public void getPreferenceKey_shouldReturnDefaultHome() { public void getPreferenceKey_shouldReturnDefaultHome() {
assertThat(mController.getPreferenceKey()).isEqualTo("default_home"); assertThat(mController.getPreferenceKey()).isEqualTo("default_home");
} }
@Test
@Config(shadows = ShadowDefaultHomePreferenceController.class)
public void hasAppCapability_hasHomeCapability_shouldReturnTrue() {
assertThat(mController.hasAppCapability()).isTrue();
}
@Test
public void hasAppCapability_noHomeCapability_shouldReturnFalse() {
assertThat(mController.hasAppCapability()).isFalse();
}
@Test
public void isDefaultApp_isDefaultHome_shouldReturnTrue() {
when(mPackageManager.getHomeActivities(anyList()))
.thenReturn(new ComponentName("Package1", "cls1"));
assertThat(mController.isDefaultApp()).isTrue();
}
@Test
public void isDefaultApp_notDefaultHome_shouldReturnFalse() {
when(mPackageManager.getHomeActivities(anyList()))
.thenReturn(new ComponentName("pkg2", "cls1"));
assertThat(mController.isDefaultApp()).isFalse();
}
@Implements(DefaultHomePreferenceController.class)
public static class ShadowDefaultHomePreferenceController {
@Implementation
protected static boolean hasHomePreference(String pkg, Context context) {
return true;
}
}
} }