Merge "Fix NPE of AccessibilityShortcutPreferenceFragmentTest."
diff --git a/packages/apps/Settings/src/com/android/settings/dream/OWNERS b/packages/apps/Settings/src/com/android/settings/dream/OWNERS
new file mode 100644
index 0000000..56e1b39
--- /dev/null
+++ b/packages/apps/Settings/src/com/android/settings/dream/OWNERS
@@ -0,0 +1 @@
+lusilva@google.com
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 77d12d7..0107358 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5502,7 +5502,7 @@
<!-- Used in the accessibility service settings to open the activity. [CHAR LIMIT=NONE] -->
<string name="accessibility_service_primary_open_title">Open <xliff:g id="accessibility_app_name" example="TalkBack">%1$s</xliff:g></string>
<!-- Used in the accessibility service settings to show quick settings tooltips. [CHAR LIMIT=NONE] -->
- <string name="accessibility_service_quick_settings_tooltips_content">Swipe down to quickly turn <xliff:g id="accessibility_app_name" example="TalkBack">%1$s</xliff:g> on or off in quick settings</string>
+ <string name="accessibility_service_quick_settings_tooltips_content"><xliff:g id="accessibility_app_name" example="TalkBack">%1$s</xliff:g> added to Quick Settings. Swipe down to turn it on or off anytime.</string>
<!-- Used in the accessibility action for accessibility quick settings tooltips to dismiss. [CHAR LIMIT=NONE] -->
<string name="accessibility_quick_settings_tooltips_dismiss">Dismiss</string>
<!-- Used in the Color correction settings screen to control turning on/off the feature entirely [CHAR LIMIT=60] -->
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
index 1b3b47a..fe20a01 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
@@ -123,13 +123,13 @@
mDataUsageController = null;
}
- private void updateConfiguration(Context context,
+ protected void updateConfiguration(Context context,
int subscriptionId, SubscriptionInfo subInfo) {
final NetworkPolicyManager policyManager =
context.getSystemService(NetworkPolicyManager.class);
mPolicyEditor = new NetworkPolicyEditor(policyManager);
- mDataUsageController = new DataUsageController(context);
+ mDataUsageController = createDataUsageController(context);
mDataUsageController.setSubscriptionId(subscriptionId);
mDataInfoController = new DataUsageInfoController();
@@ -146,6 +146,11 @@
}
@VisibleForTesting
+ DataUsageController createDataUsageController(Context context) {
+ return new DataUsageController(context);
+ }
+
+ @VisibleForTesting
DataUsageSummaryPreferenceController(
DataUsageController dataUsageController,
DataUsageInfoController dataInfoController,
@@ -186,8 +191,7 @@
.getSubscriptionPlans(subscriptionId);
}
- @VisibleForTesting
- SubscriptionInfo getSubscriptionInfo(int subscriptionId) {
+ protected SubscriptionInfo getSubscriptionInfo(int subscriptionId) {
if (!mHasMobileData) {
return null;
}
diff --git a/src/com/android/settings/datausage/WifiDataUsageSummaryPreferenceController.java b/src/com/android/settings/datausage/WifiDataUsageSummaryPreferenceController.java
index 9d3054e..4d2dd00 100644
--- a/src/com/android/settings/datausage/WifiDataUsageSummaryPreferenceController.java
+++ b/src/com/android/settings/datausage/WifiDataUsageSummaryPreferenceController.java
@@ -26,23 +26,19 @@
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.net.DataUsageController;
+import java.util.HashSet;
import java.util.Set;
/**
* The controller displays a data usage chart for the specified Wi-Fi network.
*/
public class WifiDataUsageSummaryPreferenceController extends DataUsageSummaryPreferenceController {
- final String mNetworkId;
+ final Set<String> mAllNetworkKeys;
- public WifiDataUsageSummaryPreferenceController(Activity activity,
- Lifecycle lifecycle, PreferenceFragmentCompat fragment, CharSequence networkId) {
+ public WifiDataUsageSummaryPreferenceController(Activity activity, Lifecycle lifecycle,
+ PreferenceFragmentCompat fragment, Set<String> allNetworkKeys) {
super(activity, lifecycle, fragment, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
-
- if (networkId == null) {
- mNetworkId = null;
- } else {
- mNetworkId = String.valueOf(networkId);
- }
+ mAllNetworkKeys = new HashSet<>(allNetworkKeys);
}
@Override
@@ -52,10 +48,11 @@
}
final DataUsageSummaryPreference mPreference = (DataUsageSummaryPreference) preference;
- // TODO(b/126299427): Currently gets data usage of whole Wi-Fi networks, but should get
- // specified one.
final NetworkTemplate template = new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI)
- .setWifiNetworkKeys(Set.of(mNetworkId)).build();
+ .setWifiNetworkKeys(mAllNetworkKeys).build();
+ if (mDataUsageController == null) {
+ updateConfiguration(mContext, mSubId, getSubscriptionInfo(mSubId));
+ }
final DataUsageController.DataUsageInfo info = mDataUsageController.getDataUsageInfo(
template);
mDataInfoController.updateDataLimit(info, mPolicyEditor.getPolicy(template));
diff --git a/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java b/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
index 8bef708..a7b4b00 100644
--- a/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
@@ -68,16 +68,35 @@
public void onAttach(Context context) {
super.onAttach(context);
final int profileType = getArguments().getInt(ProfileSelectFragment.EXTRA_PROFILE);
- if (profileType == ProfileSelectFragment.ProfileType.WORK) {
- final UserManager userManager = UserManager.get(context);
- final UserHandle workUser = Utils.getManagedProfile(userManager);
- // get work userId
- mUserId = Utils.getManagedProfileId(userManager, UserHandle.myUserId());
- mUserAwareContext = context.createContextAsUser(workUser, 0);
- } else {
- mUserId = UserHandle.myUserId();
- mUserAwareContext = context;
+ final UserManager userManager = context.getSystemService(UserManager.class);
+ final int currentUserId = UserHandle.myUserId();
+ final int newUserId;
+ final Context newUserAwareContext;
+ switch (profileType) {
+ case ProfileSelectFragment.ProfileType.WORK: {
+ final UserHandle workUser;
+ if (currentUserId == UserHandle.MIN_SECONDARY_USER_ID) {
+ newUserId = currentUserId;
+ workUser = UserHandle.of(currentUserId);
+ } else {
+ newUserId = Utils.getManagedProfileId(userManager, currentUserId);
+ workUser = Utils.getManagedProfile(userManager);
+ }
+ newUserAwareContext = context.createContextAsUser(workUser, 0);
+ break;
+ }
+ case ProfileSelectFragment.ProfileType.PERSONAL: {
+ final UserHandle primaryUser = userManager.getPrimaryUser().getUserHandle();
+ newUserId = primaryUser.getIdentifier();
+ newUserAwareContext = context.createContextAsUser(primaryUser, 0);
+ break;
+ }
+ default:
+ newUserId = currentUserId;
+ newUserAwareContext = context;
}
+ mUserId = newUserId;
+ mUserAwareContext = newUserAwareContext;
}
@Override
diff --git a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
index f9d0db0..e3181e3 100644
--- a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
@@ -435,9 +435,9 @@
mDataUsageSummaryPref = screen.findPreference(KEY_DATA_USAGE_HEADER);
mDataUsageSummaryPref.setVisible(true);
mSummaryHeaderController =
- new WifiDataUsageSummaryPreferenceController(mFragment.getActivity(),
- mLifecycle, (PreferenceFragmentCompat) mFragment,
- mWifiEntry.getTitle());
+ new WifiDataUsageSummaryPreferenceController(mFragment.getActivity(),
+ mLifecycle, (PreferenceFragmentCompat) mFragment,
+ mWifiEntry.getWifiConfiguration().getAllNetworkKeys());
return;
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragmentTest.java
index 0c656b3..c44352f 100644
--- a/tests/robotests/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragmentTest.java
@@ -83,9 +83,8 @@
}
@Test
- public void getTileName_noTileServiceAssigned_noMatchString() {
- final CharSequence tileName = mFragment.getTileName();
- assertThat(tileName.toString()).isEqualTo("");
+ public void getTileName_noTileServiceAssigned_returnNull() {
+ assertThat(mFragment.getTileName()).isNull();
}
@Test
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java
index db5b83c..236f9f2 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java
@@ -83,9 +83,8 @@
}
@Test
- public void getTileName_noTileServiceAssigned_noMatchString() {
- final CharSequence tileName = mFragment.getTileName();
- assertThat(tileName.toString()).isEqualTo("");
+ public void getTileName_noTileServiceAssigned_returnNull() {
+ assertThat(mFragment.getTileName()).isNull();
}
@Test
diff --git a/tests/robotests/src/com/android/settings/datausage/WifiDataUsageSummaryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datausage/WifiDataUsageSummaryPreferenceControllerTest.java
new file mode 100644
index 0000000..711f6d7
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/datausage/WifiDataUsageSummaryPreferenceControllerTest.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.datausage;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.content.Context;
+import android.net.NetworkPolicyManager;
+import android.telephony.TelephonyManager;
+
+import androidx.fragment.app.FragmentActivity;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.net.DataUsageController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+
+import java.util.HashSet;
+import java.util.Set;
+
+@RunWith(RobolectricTestRunner.class)
+public class WifiDataUsageSummaryPreferenceControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Spy
+ Context mContext = ApplicationProvider.getApplicationContext();
+ @Mock
+ FragmentActivity mActivity;
+ @Mock
+ Lifecycle mLifecycle;
+ @Mock
+ TelephonyManager mTelephonyManager;
+ @Mock
+ NetworkPolicyManager mNetworkPolicyManager;
+ @Mock
+ DataUsageSummaryPreference mSummaryPreference;
+ @Mock
+ DataUsageController mDataUsageController;
+ @Mock
+ DataUsageController.DataUsageInfo mDataUsageInfo;
+
+ WifiDataUsageSummaryPreferenceController mController;
+ Set<String> mAllNetworkKeys = new HashSet<>();
+
+ @Before
+ public void setUp() {
+ doReturn(mContext.getResources()).when(mActivity).getResources();
+ doReturn(mTelephonyManager).when(mActivity).getSystemService(TelephonyManager.class);
+ doReturn(mNetworkPolicyManager).when(mActivity)
+ .getSystemService(NetworkPolicyManager.class);
+ doNothing().when(mSummaryPreference).setWifiMode(anyBoolean(), anyString(), anyBoolean());
+ doReturn(mDataUsageInfo).when(mDataUsageController).getDataUsageInfo(any());
+
+ mController = spy(new WifiDataUsageSummaryPreferenceController(mActivity, mLifecycle, null,
+ mAllNetworkKeys));
+ doReturn(mDataUsageController).when(mController).createDataUsageController(any());
+ }
+
+ @Test
+ public void updateState_nullOfDataUsageController_shouldNotCrash() {
+ mController.mDataUsageController = null;
+
+ mController.updateState(mSummaryPreference);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragmentTest.java b/tests/robotests/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragmentTest.java
index c6c6a66..c6e7a97 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragmentTest.java
@@ -20,7 +20,9 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -31,6 +33,7 @@
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.os.Bundle;
+import android.os.UserHandle;
import android.provider.SearchIndexableResource;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
@@ -43,6 +46,7 @@
import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
import com.android.settings.testutils.shadow.ShadowInputMethodManagerWithMethodList;
import com.android.settings.testutils.shadow.ShadowSecureSettings;
+import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settingslib.inputmethod.InputMethodPreference;
import com.android.settingslib.inputmethod.InputMethodSettingValuesWrapper;
@@ -62,7 +66,8 @@
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
ShadowSecureSettings.class,
- ShadowInputMethodManagerWithMethodList.class
+ ShadowInputMethodManagerWithMethodList.class,
+ ShadowUserManager.class
})
public class AvailableVirtualKeyboardFragmentTest {
@@ -170,6 +175,7 @@
when(mFragment.getPreferenceScreen()).thenReturn(mPreferenceScreen);
when(mPreferenceManager.getContext()).thenReturn(mContext);
when(mContext.getSystemService(InputMethodManager.class)).thenReturn(mInputMethodManager);
+ doReturn(mContext).when(mContext).createContextAsUser(any(UserHandle.class), anyInt());
}
private List<InputMethodInfo> createFakeInputMethodInfoList(final String name, int num) {
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
index dc42515..ea51370 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
@@ -44,6 +44,8 @@
private static boolean sIsSupportsMultipleUsers;
+ private static final int PRIMARY_USER_ID = 0;
+
private final List<String> mBaseRestrictions = new ArrayList<>();
private final List<String> mGuestRestrictions = new ArrayList<>();
private final Map<String, List<EnforcingUser>> mRestrictionSources = new HashMap<>();
@@ -218,4 +220,10 @@
mEnabledTypes.remove(type);
}
}
+
+ @Implementation
+ protected UserInfo getPrimaryUser() {
+ return new UserInfo(PRIMARY_USER_ID, null, null,
+ UserInfo.FLAG_INITIALIZED | UserInfo.FLAG_ADMIN | UserInfo.FLAG_PRIMARY);
+ }
}