DO NOT MERGE: Cherry-pick a bunch fixes to AOSP

Task affinity updates

- Remove task affinity for AppDrawOver Settings
- Remove task affinity for ConfigNotificationSettings

The task affinity is messing with the back stack for this activity when
launched externally

Fixes: 80281932
Fixes: 80290571
Test: manual

Disable uninstall update option for secondary users.

Fixes: 110249550
Test: manual

Suppress some gesture search when there is no hardware

Fixes: 110250839
Test: robotests

Check wifi password length by byte, not char.

Change-Id: Ic25ef766886507211c3de8764c1cffef2b27a025
Fixes: 79209073
Test: robotest
This commit is contained in:
Fan Zhang
2018-08-27 14:28:54 -07:00
parent fcaf926dc1
commit 07e55d97ca
7 changed files with 42 additions and 19 deletions

View File

@@ -2620,7 +2620,6 @@
android:name="Settings$ConfigureNotificationSettingsActivity" android:name="Settings$ConfigureNotificationSettingsActivity"
android:label="@string/configure_notification_settings" android:label="@string/configure_notification_settings"
android:exported="true" android:exported="true"
android:taskAffinity="com.android.settings"
android:parentActivityName="Settings"> android:parentActivityName="Settings">
<intent-filter android:priority="1"> <intent-filter android:priority="1">
<action android:name="android.settings.NOTIFICATION_SETTINGS" /> <action android:name="android.settings.NOTIFICATION_SETTINGS" />
@@ -2951,7 +2950,6 @@
<activity <activity
android:name="Settings$AppDrawOverlaySettingsActivity" android:name="Settings$AppDrawOverlaySettingsActivity"
android:label="@string/draw_overlay" android:label="@string/draw_overlay"
android:taskAffinity="com.android.settings"
android:parentActivityName="Settings"> android:parentActivityName="Settings">
<intent-filter android:priority="1"> <intent-filter android:priority="1">
<action android:name="android.settings.action.MANAGE_OVERLAY_PERMISSION" /> <action android:name="android.settings.action.MANAGE_OVERLAY_PERMISSION" />

View File

@@ -67,6 +67,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
* Dashboard fragment to display application information from Settings. This activity presents * Dashboard fragment to display application information from Settings. This activity presents
* extended information associated with a package like code, data, total size, permissions * extended information associated with a package like code, data, total size, permissions
@@ -350,8 +351,10 @@ public class AppInfoDashboardFragment extends DashboardFragment
final MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES); final MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES);
final boolean uninstallUpdateDisabled = getContext().getResources().getBoolean( final boolean uninstallUpdateDisabled = getContext().getResources().getBoolean(
R.bool.config_disable_uninstall_update); R.bool.config_disable_uninstall_update);
uninstallUpdatesItem.setVisible( uninstallUpdatesItem.setVisible(mUserManager.isAdminUser()
mUpdatedSysApp && !mAppsControlDisallowedBySystem && !uninstallUpdateDisabled); && mUpdatedSysApp
&& !mAppsControlDisallowedBySystem
&& !uninstallUpdateDisabled);
if (uninstallUpdatesItem.isVisible()) { if (uninstallUpdatesItem.isVisible()) {
RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getActivity(), RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getActivity(),
uninstallUpdatesItem, mAppsControlDisallowedAdmin); uninstallUpdatesItem, mAppsControlDisallowedAdmin);

View File

@@ -70,5 +70,10 @@ public class SwipeToNotificationSettings extends DashboardFragment {
sir.xmlResId = R.xml.swipe_to_notification_settings; sir.xmlResId = R.xml.swipe_to_notification_settings;
return Arrays.asList(sir); return Arrays.asList(sir);
} }
@Override
protected boolean isPageSearchEnabled(Context context) {
return SwipeToNotificationPreferenceController.isAvailable(context);
}
}; };
} }

View File

@@ -27,6 +27,7 @@ import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
import com.android.settingslib.wrapper.PackageManagerWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.nio.charset.StandardCharsets;
public class WifiUtils { public class WifiUtils {
@@ -40,7 +41,7 @@ public class WifiUtils {
if (TextUtils.isEmpty(ssid)) { if (TextUtils.isEmpty(ssid)) {
return false; return false;
} }
return ssid.length() > SSID_ASCII_MAX_LENGTH; return ssid.getBytes(StandardCharsets.UTF_8).length > SSID_ASCII_MAX_LENGTH;
} }
public static boolean isSSIDTooShort(String ssid) { public static boolean isSSIDTooShort(String ssid) {
@@ -61,8 +62,9 @@ public class WifiUtils {
/** /**
* This method is a stripped and negated version of WifiConfigStore.canModifyNetwork. * This method is a stripped and negated version of WifiConfigStore.canModifyNetwork.
*
* @param context Context of caller * @param context Context of caller
* @param config The WiFi config. * @param config The WiFi config.
* @return true if Settings cannot modify the config due to lockDown. * @return true if Settings cannot modify the config due to lockDown.
*/ */
public static boolean isNetworkLockedDown(Context context, WifiConfiguration config) { public static boolean isNetworkLockedDown(Context context, WifiConfiguration config) {

View File

@@ -91,7 +91,9 @@ public final class AppInfoDashboardFragmentTest {
doReturn(mActivity).when(mFragment).getActivity(); doReturn(mActivity).when(mFragment).getActivity();
doReturn(mShadowContext).when(mFragment).getContext(); doReturn(mShadowContext).when(mFragment).getContext();
doReturn(mPackageManager).when(mActivity).getPackageManager(); doReturn(mPackageManager).when(mActivity).getPackageManager();
when(mUserManager.isAdminUser()).thenReturn(true);
ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
// Default to not considering any apps to be instant (individual tests can override this). // Default to not considering any apps to be instant (individual tests can override this).
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
(InstantAppDataProvider) (i -> false)); (InstantAppDataProvider) (i -> false));
@@ -102,7 +104,7 @@ public final class AppInfoDashboardFragmentTest {
when(mDevicePolicyManager.packageHasActiveAdmins(nullable(String.class))).thenReturn(false); when(mDevicePolicyManager.packageHasActiveAdmins(nullable(String.class))).thenReturn(false);
when(mUserManager.getUsers().size()).thenReturn(2); when(mUserManager.getUsers().size()).thenReturn(2);
ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager); ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager);
ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
final ApplicationInfo info = new ApplicationInfo(); final ApplicationInfo info = new ApplicationInfo();
info.enabled = true; info.enabled = true;
final AppEntry appEntry = mock(AppEntry.class); final AppEntry appEntry = mock(AppEntry.class);
@@ -118,7 +120,6 @@ public final class AppInfoDashboardFragmentTest {
when(mDevicePolicyManager.packageHasActiveAdmins(nullable(String.class))).thenReturn(false); when(mDevicePolicyManager.packageHasActiveAdmins(nullable(String.class))).thenReturn(false);
when(mUserManager.getUsers().size()).thenReturn(2); when(mUserManager.getUsers().size()).thenReturn(2);
ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager); ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager);
ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
final ApplicationInfo info = new ApplicationInfo(); final ApplicationInfo info = new ApplicationInfo();
info.flags = ApplicationInfo.FLAG_INSTALLED; info.flags = ApplicationInfo.FLAG_INSTALLED;
info.enabled = true; info.enabled = true;
@@ -217,7 +218,6 @@ public final class AppInfoDashboardFragmentTest {
final PackageInfo packageInfo = mock(PackageInfo.class); final PackageInfo packageInfo = mock(PackageInfo.class);
ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager); ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager);
ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo); ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo);
assertThat(mFragment.shouldShowUninstallForAll(appEntry)).isFalse(); assertThat(mFragment.shouldShowUninstallForAll(appEntry)).isFalse();
@@ -258,7 +258,6 @@ public final class AppInfoDashboardFragmentTest {
userInfos.add(new UserInfo(userID1, "User1", UserInfo.FLAG_PRIMARY)); userInfos.add(new UserInfo(userID1, "User1", UserInfo.FLAG_PRIMARY));
userInfos.add(new UserInfo(userID2, "yue", UserInfo.FLAG_GUEST)); userInfos.add(new UserInfo(userID2, "yue", UserInfo.FLAG_GUEST));
when(mUserManager.getUsers(true)).thenReturn(userInfos); when(mUserManager.getUsers(true)).thenReturn(userInfos);
ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
final ApplicationInfo appInfo = new ApplicationInfo(); final ApplicationInfo appInfo = new ApplicationInfo();
appInfo.flags = ApplicationInfo.FLAG_INSTALLED; appInfo.flags = ApplicationInfo.FLAG_INSTALLED;
when(mPackageManager.getApplicationInfoAsUser( when(mPackageManager.getApplicationInfoAsUser(
@@ -282,7 +281,6 @@ public final class AppInfoDashboardFragmentTest {
userInfos.add(new UserInfo(userID1, "User1", UserInfo.FLAG_PRIMARY)); userInfos.add(new UserInfo(userID1, "User1", UserInfo.FLAG_PRIMARY));
userInfos.add(new UserInfo(userID2, "yue", UserInfo.FLAG_GUEST)); userInfos.add(new UserInfo(userID2, "yue", UserInfo.FLAG_GUEST));
when(mUserManager.getUsers(true)).thenReturn(userInfos); when(mUserManager.getUsers(true)).thenReturn(userInfos);
ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
final ApplicationInfo appInfo = new ApplicationInfo(); final ApplicationInfo appInfo = new ApplicationInfo();
appInfo.flags = ApplicationInfo.FLAG_INSTALLED; appInfo.flags = ApplicationInfo.FLAG_INSTALLED;
when(mPackageManager.getApplicationInfoAsUser( when(mPackageManager.getApplicationInfoAsUser(

View File

@@ -23,28 +23,33 @@ import android.provider.SearchIndexableResource;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settings.testutils.shadow.ShadowUtils;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
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.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import java.util.List; import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
public class SwipeToNotificationSettingsTest { public class SwipeToNotificationSettingsTest {
@Mock
private Context mContext; private Context mContext;
private SwipeToNotificationSettings mFragment; private SwipeToNotificationSettings mFragment;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application;
mFragment = new SwipeToNotificationSettings(); mFragment = new SwipeToNotificationSettings();
ShadowUtils.reset();
}
@After
public void tearDown() {
ShadowUtils.reset();
} }
@Test @Test
@@ -56,10 +61,22 @@ public class SwipeToNotificationSettingsTest {
@Test @Test
public void testSearchIndexProvider_shouldIndexResource() { public void testSearchIndexProvider_shouldIndexResource() {
final List<SearchIndexableResource> indexRes = final List<SearchIndexableResource> indexRes =
SwipeToNotificationSettings.SEARCH_INDEX_DATA_PROVIDER SwipeToNotificationSettings.SEARCH_INDEX_DATA_PROVIDER
.getXmlResourcesToIndex(RuntimeEnvironment.application, true /* enabled */); .getXmlResourcesToIndex(mContext, true /* enabled */);
assertThat(indexRes).isNotNull(); assertThat(indexRes).isNotNull();
assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId()); assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId());
} }
@Test
@Config(shadows = ShadowUtils.class)
public void getNonIndexableKeys_noFingerprintHardware_shouldSuppressPage() {
ShadowUtils.setFingerprintManager(null);
final List<String> niks = SwipeToNotificationSettings.SEARCH_INDEX_DATA_PROVIDER
.getNonIndexableKeys(mContext);
assertThat(niks).isNotEmpty();
}
} }

View File

@@ -29,7 +29,7 @@ public class WifiUtilsTest {
@Test @Test
public void testSSID() { public void testSSID() {
assertThat(WifiUtils.isSSIDTooLong("123")).isFalse(); assertThat(WifiUtils.isSSIDTooLong("123")).isFalse();
assertThat(WifiUtils.isSSIDTooLong("☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎")).isTrue(); assertThat(WifiUtils.isSSIDTooLong("☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎")).isTrue();
assertThat(WifiUtils.isSSIDTooShort("123")).isFalse(); assertThat(WifiUtils.isSSIDTooShort("123")).isFalse();
assertThat(WifiUtils.isSSIDTooShort("")).isTrue(); assertThat(WifiUtils.isSSIDTooShort("")).isTrue();