Merge "Fix wrong user in personal profile" into udc-dev am: ce7ad1f8a0

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/22307474

Change-Id: I5e430f44894d567d42f4c1901cc0550873958cae
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Wilson Wu
2023-03-31 10:33:24 +00:00
committed by Automerger Merge Worker
2 changed files with 41 additions and 8 deletions

View File

@@ -55,7 +55,10 @@ public class AvailableVirtualKeyboardFragment extends DashboardFragment
@VisibleForTesting @VisibleForTesting
InputMethodSettingValuesWrapper mInputMethodSettingValues; InputMethodSettingValuesWrapper mInputMethodSettingValues;
private Context mUserAwareContext;
@VisibleForTesting
Context mUserAwareContext;
private int mUserId; private int mUserId;
@Override @Override
@@ -82,9 +85,16 @@ public class AvailableVirtualKeyboardFragment extends DashboardFragment
break; break;
} }
case ProfileSelectFragment.ProfileType.PERSONAL: { case ProfileSelectFragment.ProfileType.PERSONAL: {
final UserHandle primaryUser = userManager.getPrimaryUser().getUserHandle(); // Use the parent user of the current user if the current user is profile.
newUserId = primaryUser.getIdentifier(); final UserHandle currentUser = UserHandle.of(currentUserId);
newUserAwareContext = context.createContextAsUser(primaryUser, 0); final UserHandle userProfileParent = userManager.getProfileParent(currentUser);
if (userProfileParent != null) {
newUserId = userProfileParent.getIdentifier();
newUserAwareContext = context.createContextAsUser(userProfileParent, 0);
} else {
newUserId = currentUserId;
newUserAwareContext = context;
}
break; break;
} }
default: default:

View File

@@ -27,6 +27,7 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.mockito.Mockito.mock;
import android.content.Context; import android.content.Context;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
@@ -34,6 +35,7 @@ import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo; import android.content.pm.ServiceInfo;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager;
import android.provider.SearchIndexableResource; import android.provider.SearchIndexableResource;
import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
@@ -46,7 +48,6 @@ import com.android.settings.R;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment; import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
import com.android.settings.testutils.shadow.ShadowInputMethodManagerWithMethodList; import com.android.settings.testutils.shadow.ShadowInputMethodManagerWithMethodList;
import com.android.settings.testutils.shadow.ShadowSecureSettings; 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.InputMethodPreference;
import com.android.settingslib.inputmethod.InputMethodSettingValuesWrapper; import com.android.settingslib.inputmethod.InputMethodSettingValuesWrapper;
@@ -66,14 +67,15 @@ import java.util.List;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = { @Config(shadows = {
ShadowSecureSettings.class, ShadowSecureSettings.class,
ShadowInputMethodManagerWithMethodList.class, ShadowInputMethodManagerWithMethodList.class
ShadowUserManager.class
}) })
public class AvailableVirtualKeyboardFragmentTest { public class AvailableVirtualKeyboardFragmentTest {
@Mock @Mock
private InputMethodManager mInputMethodManager; private InputMethodManager mInputMethodManager;
@Mock @Mock
private UserManager mUserManager;
@Mock
private InputMethodSettingValuesWrapper mValuesWrapper; private InputMethodSettingValuesWrapper mValuesWrapper;
@Mock @Mock
private PreferenceScreen mPreferenceScreen; private PreferenceScreen mPreferenceScreen;
@@ -92,6 +94,27 @@ public class AvailableVirtualKeyboardFragmentTest {
initMock(); initMock();
} }
@Test
public void onAttachPersonalProfile_noProfileParent() {
doReturn(null).when(mUserManager).getProfileParent(any(UserHandle.class));
mFragment.onAttach(mContext);
assertThat(mFragment.mUserAwareContext).isEqualTo(mContext);
}
@Test
public void onAttachPersonalProfile_hasProfileParent() {
final UserHandle profileParent = new UserHandle(0);
final Context mockContext = mock(Context.class);
doReturn(profileParent).when(mUserManager).getProfileParent(any(UserHandle.class));
doReturn(mockContext).when(mContext).createContextAsUser(any(UserHandle.class), anyInt());
mFragment.onAttach(mContext);
assertThat(mFragment.mUserAwareContext).isEqualTo(mockContext);
}
@Test @Test
public void onCreatePreferences_shouldAddResource() { public void onCreatePreferences_shouldAddResource() {
mFragment.onAttach(mContext); mFragment.onAttach(mContext);
@@ -175,7 +198,7 @@ public class AvailableVirtualKeyboardFragmentTest {
when(mFragment.getPreferenceScreen()).thenReturn(mPreferenceScreen); when(mFragment.getPreferenceScreen()).thenReturn(mPreferenceScreen);
when(mPreferenceManager.getContext()).thenReturn(mContext); when(mPreferenceManager.getContext()).thenReturn(mContext);
when(mContext.getSystemService(InputMethodManager.class)).thenReturn(mInputMethodManager); when(mContext.getSystemService(InputMethodManager.class)).thenReturn(mInputMethodManager);
doReturn(mContext).when(mContext).createContextAsUser(any(UserHandle.class), anyInt()); when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
} }
private List<InputMethodInfo> createFakeInputMethodInfoList(final String name, int num) { private List<InputMethodInfo> createFakeInputMethodInfoList(final String name, int num) {