From a165020047af2ed5a4263435f26d5cbe18497d2b Mon Sep 17 00:00:00 2001 From: Leon Liao Date: Thu, 14 Feb 2019 18:26:49 +0800 Subject: [PATCH 01/11] Update education strings on A11y 'Time to read' UI Correction to 'Time to read' UI education strings. Bug: 119283926 Test: atest AccessibilityTimeoutControllerTest Test: make RunSettingsRoboTests Change-Id: I52d0902a2151252803ee694f678aeebbce0b3151 --- res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 7bd9950f9b3..7511dbb29b1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -4724,7 +4724,7 @@ Time to take action - Choose how much time you want to read and take action on messages that automatically go away.\n\nSupport for this setting is up to each app. + Choose how long to show messages that you need to read, but are visible only temporarily.\n\nNot all apps support this setting. Choose how long to show messages that ask you to take action, but are visible only temporarily.\n\nNot all apps support this setting. From 9fcfae63674db5cfff3f5671f07912d3c08bb810 Mon Sep 17 00:00:00 2001 From: cosmohsieh Date: Thu, 21 Feb 2019 16:29:59 +0800 Subject: [PATCH 02/11] [Passpointv2] Implement confirm dialog for passpoint forget button Add a confirm dialog when clicking forget button and this is a passpoint network. Bug: 122671580 Test: atest WifiDetailPreferenceControllerTest Change-Id: Ib3410ab0e8fb771a82ab928022c49977bc759962 --- res/values/strings.xml | 3 ++ .../WifiDetailPreferenceController.java | 25 ++++++++++++++- .../WifiDetailPreferenceControllerTest.java | 32 +++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 7eb8efefc4b..7d7f61cbc8f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10653,4 +10653,7 @@ Switch output Currently playing on %1$s + + + Your subscription with this provider may be cancelled. Recurring subscriptions will not be cancelled. For more information, check with your provider. diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java index 8e72f65825f..73104525b9c 100644 --- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java @@ -20,6 +20,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; import android.app.Activity; +import android.app.AlertDialog; import android.app.KeyguardManager; import android.app.settings.SettingsEnums; import android.content.BroadcastReceiver; @@ -42,7 +43,6 @@ import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Handler; import android.text.TextUtils; -import android.util.FeatureFlagUtils; import android.util.Log; import android.widget.ImageView; import android.widget.Toast; @@ -58,6 +58,7 @@ import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.FeatureFlags; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.development.featureflags.FeatureFlagPersistent; import com.android.settings.widget.EntityHeaderController; import com.android.settings.wifi.WifiDialog; import com.android.settings.wifi.WifiDialog.WifiDialogListener; @@ -545,6 +546,12 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController mWifiManager.disableEphemeralNetwork(mWifiInfo.getSSID()); } else if (mWifiConfig != null) { if (mWifiConfig.isPasspoint()) { + // Post a dialog to confirm if user really want to forget the passpoint network. + if (FeatureFlagPersistent.isEnabled(mContext, FeatureFlags.NETWORK_INTERNET_V2)) { + showConfirmForgetDialog(); + return; + } + mWifiManager.removePasspointConfiguration(mWifiConfig.FQDN); } else { mWifiManager.forget(mWifiConfig.networkId, null /* action listener */); @@ -555,6 +562,22 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController mFragment.getActivity().finish(); } + @VisibleForTesting + protected void showConfirmForgetDialog() { + final AlertDialog dialog = new AlertDialog.Builder(mContext) + .setPositiveButton(R.string.forget, ((dialog1, which) -> { + mWifiManager.removePasspointConfiguration(mWifiConfig.FQDN); + mMetricsFeatureProvider.action( + mFragment.getActivity(), SettingsEnums.ACTION_WIFI_FORGET); + mFragment.getActivity().finish(); + })) + .setNegativeButton(R.string.cancel, null /* listener */) + .setTitle(R.string.wifi_forget_dialog_title) + .setMessage(R.string.forget_passpoint_dialog_message) + .create(); + dialog.show(); + } + /** * Show QR code to share the network represented by this preference. */ diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java index 308d4b57cc1..5a8cd7c650b 100644 --- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java @@ -65,6 +65,8 @@ import androidx.preference.PreferenceScreen; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; +import com.android.settings.core.FeatureFlags; +import com.android.settings.development.featureflags.FeatureFlagPersistent; import com.android.settings.testutils.shadow.ShadowDevicePolicyManager; import com.android.settings.testutils.shadow.ShadowEntityHeaderController; import com.android.settings.widget.EntityHeaderController; @@ -755,6 +757,36 @@ public class WifiDetailPreferenceControllerTest { .action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET); } + @Test + public void forgetNetwork_Passpoint() { + mockWifiConfig.networkId = 5; + when(mockWifiConfig.isPasspoint()).thenReturn(true); + + mController.displayPreference(mockScreen); + mForgetClickListener.getValue().onClick(null); + + verify(mockWifiManager).removePasspointConfiguration(mockWifiConfig.FQDN); + verify(mockMetricsFeatureProvider) + .action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET); + } + + @Test + public void forgetNetwork_PasspointV2_shouldShowDialog() { + final WifiDetailPreferenceController spyController = spy(mController); + + mockWifiConfig.networkId = 5; + when(mockWifiConfig.isPasspoint()).thenReturn(true); + FeatureFlagPersistent.setEnabled(mContext, FeatureFlags.NETWORK_INTERNET_V2, true); + + spyController.displayPreference(mockScreen); + mForgetClickListener.getValue().onClick(null); + + verify(mockWifiManager, times(0)).removePasspointConfiguration(mockWifiConfig.FQDN); + verify(mockMetricsFeatureProvider, times(0)) + .action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET); + verify(spyController).showConfirmForgetDialog(); + } + @Test public void networkStateChangedIntent_shouldRefetchInfo() { displayAndResume(); From 9feca638d4b194c0d7dc3806cd0e155c6e5e8bff Mon Sep 17 00:00:00 2001 From: Quang Luong Date: Tue, 26 Feb 2019 17:28:58 -0800 Subject: [PATCH 03/11] Handled exeption in forget() for removePasspointConfiguration() Added a catch for the call to removePasspointConfiguration(). Bug: 70393078 Test: atest WifiSettingsTest Change-Id: If0213006f3fe42c50657bc2dde89a8dce4cff2b6 --- src/com/android/settings/wifi/WifiSettings.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 27c495ed3db..c00fe249308 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -1116,7 +1116,12 @@ public class WifiSettings extends RestrictedSettingsFragment return; } } else if (mSelectedAccessPoint.getConfig().isPasspoint()) { - mWifiManager.removePasspointConfiguration(mSelectedAccessPoint.getConfig().FQDN); + try { + mWifiManager.removePasspointConfiguration(mSelectedAccessPoint.getConfig().FQDN); + } catch (IllegalArgumentException e) { + Log.e(TAG, "Failed to remove Passpoint configuration with error: " + e); + return; + } } else { mWifiManager.forget(mSelectedAccessPoint.getConfig().networkId, mForgetListener); } From 3064ca585ea3ec94fa1acd80df0a4ed9b3a4d398 Mon Sep 17 00:00:00 2001 From: Hai Zhang Date: Thu, 28 Feb 2019 13:36:53 -0800 Subject: [PATCH 04/11] Migrate all default app shortcut preference to use roles. Bug: 124452117 Test: build Change-Id: I19375dc21bfcd932a263c49330dc9a040a446beb --- ...ltAppShortcutPreferenceControllerBase.java | 72 ++++------------ ...ltBrowserShortcutPreferenceController.java | 19 +---- ...EmergencyShortcutPreferenceController.java | 16 +--- ...faultHomeShortcutPreferenceController.java | 17 +--- ...pShortcutPreferenceControllerBaseTest.java | 82 +------------------ ...owserShortcutPreferenceControllerTest.java | 51 ++---------- ...gencyShortcutPreferenceControllerTest.java | 58 ++----------- ...tHomeShortcutPreferenceControllerTest.java | 56 ++----------- 8 files changed, 45 insertions(+), 326 deletions(-) diff --git a/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java b/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java index 20169d8706f..b056b2042b3 100644 --- a/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java +++ b/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java @@ -18,7 +18,6 @@ import android.app.role.RoleManager; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; -import android.os.Bundle; import android.os.UserManager; import android.permission.PermissionControllerManager; import android.text.TextUtils; @@ -28,10 +27,7 @@ import androidx.preference.PreferenceScreen; import com.android.internal.util.CollectionUtils; 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.SubSettingLauncher; /* * Abstract base controller for the default app shortcut preferences that launches the default app @@ -58,22 +54,13 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre 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 = - mContext.getSystemService(PermissionControllerManager.class); - permissionControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName, - mContext.getMainExecutor(), qualified -> { - mAppQualified = qualified; - 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); + final PermissionControllerManager permissionControllerManager = + mContext.getSystemService(PermissionControllerManager.class); + permissionControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName, + mContext.getMainExecutor(), qualified -> { + mAppQualified = qualified; + refreshAvailability(); + }); } @Override @@ -98,7 +85,7 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre if (mContext.getSystemService(UserManager.class).isManagedProfile()) { return DISABLED_FOR_USER; } - return hasAppCapability() ? AVAILABLE : UNSUPPORTED_ON_DEVICE; + return mAppQualified ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } @Override @@ -112,49 +99,20 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre if (!TextUtils.equals(mPreferenceKey, preference.getKey())) { 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) - .putExtra(Intent.EXTRA_ROLE_NAME, mRoleName); - 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(); - } + final Intent intent = new Intent(Intent.ACTION_MANAGE_DEFAULT_APP) + .putExtra(Intent.EXTRA_ROLE_NAME, mRoleName); + mContext.startActivity(intent); 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 * * @return true if the app is the default app */ - protected 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( - mRoleName)); - return TextUtils.equals(mPackageName, packageName); - } - return false; + private boolean isDefaultApp() { + final String packageName = CollectionUtils.firstOrNull(mRoleManager.getRoleHolders( + mRoleName)); + return TextUtils.equals(mPackageName, packageName); } } diff --git a/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceController.java b/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceController.java index 4c7dd819ced..d554620010f 100644 --- a/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceController.java @@ -14,10 +14,8 @@ package com.android.settings.applications.appinfo; +import android.app.role.RoleManager; import android.content.Context; -import android.os.UserHandle; - -import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController; public class DefaultBrowserShortcutPreferenceController extends DefaultAppShortcutPreferenceControllerBase { @@ -25,19 +23,6 @@ public class DefaultBrowserShortcutPreferenceController private static final String KEY = "default_browser"; 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()); - } - } diff --git a/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceController.java b/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceController.java index f0c1b8aec17..bd467ac4118 100644 --- a/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceController.java @@ -14,27 +14,15 @@ package com.android.settings.applications.appinfo; +import android.app.role.RoleManager; import android.content.Context; -import com.android.settings.applications.defaultapps.DefaultEmergencyPreferenceController; - public class DefaultEmergencyShortcutPreferenceController extends DefaultAppShortcutPreferenceControllerBase { private static final String KEY = "default_emergency_app"; 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); - } - } diff --git a/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceController.java b/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceController.java index a58ef852009..beb2d7e5b97 100644 --- a/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceController.java @@ -14,28 +14,15 @@ package com.android.settings.applications.appinfo; +import android.app.role.RoleManager; import android.content.Context; -import com.android.settings.applications.defaultapps.DefaultHomePreferenceController; - public class DefaultHomeShortcutPreferenceController extends DefaultAppShortcutPreferenceControllerBase { private static final String KEY = "default_home"; 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()); - } - } diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java index 89beede13a5..f3f4ca6f1f6 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java @@ -34,8 +34,6 @@ import android.permission.PermissionControllerManager; import androidx.preference.Preference; import com.android.settings.R; -import com.android.settings.SettingsActivity; -import com.android.settings.applications.DefaultAppSettings; import org.junit.Before; import org.junit.Test; @@ -73,7 +71,6 @@ public class DefaultAppShortcutPreferenceControllerBaseTest { private ShadowUserManager mShadowUserManager; private TestRolePreferenceController mController; - private TestLegacyPreferenceController mLegacyController; @Before public void setUp() { @@ -86,7 +83,6 @@ public class DefaultAppShortcutPreferenceControllerBaseTest { mShadowUserManager = shadowOf(mActivity.getSystemService(UserManager.class)); mController = new TestRolePreferenceController(mActivity); when(mPreference.getKey()).thenReturn(mController.getPreferenceKey()); - mLegacyController = new TestLegacyPreferenceController(mActivity); } @Test @@ -141,8 +137,8 @@ public class DefaultAppShortcutPreferenceControllerBaseTest { when(mRoleManager.getRoleHolders(eq(TEST_ROLE_NAME))).thenReturn(Collections.singletonList( TEST_PACKAGE_NAME)); final CharSequence yesText = mActivity.getText(R.string.yes); - mController.updateState(mPreference); + verify(mPreference).setSummary(yesText); } @@ -150,17 +146,17 @@ public class DefaultAppShortcutPreferenceControllerBaseTest { public void updateState_notRoleHoler_shouldSetSummaryToNo() { when(mRoleManager.getRoleHolders(eq(TEST_ROLE_NAME))).thenReturn(Collections.emptyList()); final CharSequence noText = mActivity.getText(R.string.no); - mController.updateState(mPreference); + verify(mPreference).setSummary(noText); } @Test public void handlePreferenceTreeClick_shouldStartManageDefaultAppIntent() { final ShadowActivity shadowActivity = shadowOf(mActivity); - mController.handlePreferenceTreeClick(mPreference); final Intent intent = shadowActivity.getNextStartedActivity(); + assertThat(intent).isNotNull(); assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MANAGE_DEFAULT_APP); 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); } } - - // 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; - } - } } diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java index 65b68aaab44..c2a3b4a8f02 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java @@ -18,15 +18,8 @@ package com.android.settings.applications.appinfo; 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.Intent; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; +import android.permission.PermissionControllerManager; import org.junit.Before; import org.junit.Test; @@ -35,57 +28,27 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; - -import java.util.ArrayList; -import java.util.List; +import org.robolectric.shadows.ShadowApplication; @RunWith(RobolectricTestRunner.class) public class DefaultBrowserShortcutPreferenceControllerTest { @Mock - private PackageManager mPackageManager; + private PermissionControllerManager mPermissionControllerManager; - private Context mContext; private DefaultBrowserShortcutPreferenceController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); - when(mContext.getPackageManager()).thenReturn(mPackageManager); - mController = new DefaultBrowserShortcutPreferenceController(mContext, "Package1"); + ShadowApplication.getInstance().setSystemService(Context.PERMISSION_CONTROLLER_SERVICE, + mPermissionControllerManager); + mController = new DefaultBrowserShortcutPreferenceController(RuntimeEnvironment.application, + "Package1"); } @Test public void getPreferenceKey_shouldReturnDefaultBrowser() { assertThat(mController.getPreferenceKey()).isEqualTo("default_browser"); } - - @Test - public void hasAppCapability_hasBrowserCapability_shouldReturnTrue() { - List 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(); - } } diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceControllerTest.java index 9f2ee44294c..8466092fa55 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceControllerTest.java @@ -18,17 +18,8 @@ package com.android.settings.applications.appinfo; 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.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.provider.Settings; -import android.telephony.TelephonyManager; +import android.permission.PermissionControllerManager; import org.junit.Before; import org.junit.Test; @@ -37,62 +28,27 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import org.robolectric.shadows.ShadowApplication; @RunWith(RobolectricTestRunner.class) public class DefaultEmergencyShortcutPreferenceControllerTest { @Mock - private RoleManager mRoleManager; - @Mock - private PackageManager mPackageManager; + private PermissionControllerManager mPermissionControllerManager; - private Context mContext; private DefaultEmergencyShortcutPreferenceController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); - when(mContext.getPackageManager()).thenReturn(mPackageManager); - when(mContext.getSystemService(RoleManager.class)).thenReturn(mRoleManager); - mController = new DefaultEmergencyShortcutPreferenceController(mContext, "Package1"); + ShadowApplication.getInstance().setSystemService(Context.PERMISSION_CONTROLLER_SERVICE, + mPermissionControllerManager); + mController = new DefaultEmergencyShortcutPreferenceController( + RuntimeEnvironment.application, "Package1"); } @Test public void getPreferenceKey_shouldReturnDefaultEmergency() { assertThat(mController.getPreferenceKey()).isEqualTo("default_emergency_app"); } - - @Test - public void hasAppCapability_hasEmergencyCapability_shouldReturnTrue() { - List 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(); - } } diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceControllerTest.java index ff281b2d1e0..c5cae3ae307 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceControllerTest.java @@ -18,15 +18,8 @@ package com.android.settings.applications.appinfo; 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.pm.PackageManager; - -import com.android.settings.applications.defaultapps.DefaultHomePreferenceController; +import android.permission.PermissionControllerManager; import org.junit.Before; import org.junit.Test; @@ -35,62 +28,27 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; +import org.robolectric.shadows.ShadowApplication; @RunWith(RobolectricTestRunner.class) public class DefaultHomeShortcutPreferenceControllerTest { @Mock - private PackageManager mPackageManager; + private PermissionControllerManager mPermissionControllerManager; - private Context mContext; private DefaultHomeShortcutPreferenceController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); - when(mContext.getPackageManager()).thenReturn(mPackageManager); - mController = new DefaultHomeShortcutPreferenceController(mContext, "Package1"); + ShadowApplication.getInstance().setSystemService(Context.PERMISSION_CONTROLLER_SERVICE, + mPermissionControllerManager); + mController = new DefaultHomeShortcutPreferenceController(RuntimeEnvironment.application, + "Package1"); } @Test public void getPreferenceKey_shouldReturnDefaultHome() { 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; - } - } } From cafeaadaa66a129e4ce6d9cb9b32ee19003b8cec Mon Sep 17 00:00:00 2001 From: Matthew Fritze Date: Thu, 28 Feb 2019 12:48:39 -0800 Subject: [PATCH 05/11] UX Fixes for Settings Panels UI Fixes include: - Fix height of bottom bar - Fix start / end padding of See More and Done buttons - Remove scroll shadow in recycler view - Consolidate most layout code into a single file, only separating the distinguished elements into the landscape file. I cannot fix b/126731930 until a Slice bug is fixed, where the top padding is applied to the bottom of sliceview instead. Fixes: 126720235 Fixes: 126720220 Fixes: 126720167 Test: manual inspection & layout inspector Change-Id: I6e3434aabe221134e7278f92bab34122719c179a --- res/layout-land/panel_layout.xml | 42 -------------------------- res/layout-land/panel_slice_list.xml | 24 +++++++++++++++ res/layout/panel_buttons.xml | 45 ---------------------------- res/layout/panel_layout.xml | 35 ++++++++++++++++++---- res/layout/panel_slice_list.xml | 24 +++++++++++++++ res/layout/panel_slice_row.xml | 2 +- 6 files changed, 78 insertions(+), 94 deletions(-) delete mode 100644 res/layout-land/panel_layout.xml create mode 100644 res/layout-land/panel_slice_list.xml delete mode 100644 res/layout/panel_buttons.xml create mode 100644 res/layout/panel_slice_list.xml diff --git a/res/layout-land/panel_layout.xml b/res/layout-land/panel_layout.xml deleted file mode 100644 index 049fd0b579b..00000000000 --- a/res/layout-land/panel_layout.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/res/layout-land/panel_slice_list.xml b/res/layout-land/panel_slice_list.xml new file mode 100644 index 00000000000..ea7d8281a11 --- /dev/null +++ b/res/layout-land/panel_slice_list.xml @@ -0,0 +1,24 @@ + + + + \ No newline at end of file diff --git a/res/layout/panel_buttons.xml b/res/layout/panel_buttons.xml deleted file mode 100644 index 1bb38988888..00000000000 --- a/res/layout/panel_buttons.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - -