Merge "Check whether the user is a sub profile before starting Settings homepage" into main
This commit is contained in:
@@ -20,6 +20,7 @@ import android.app.Activity
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.UserInfo
|
||||
import android.provider.Settings
|
||||
import android.util.Log
|
||||
import com.android.settings.SettingsActivity
|
||||
@@ -93,9 +94,17 @@ object EmbeddedDeepLinkUtils {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns whether the user is a sub profile.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun isSubProfile(userInfo: UserInfo): Boolean =
|
||||
userInfo.isManagedProfile || userInfo.isPrivateProfile
|
||||
|
||||
private fun Context.startTrampolineIntent(trampolineIntent: Intent): Boolean = try {
|
||||
val userInfo = userManager.getUserInfo(user.identifier)
|
||||
if (userInfo.isManagedProfile) {
|
||||
if (isSubProfile(userInfo)) {
|
||||
trampolineIntent.setClass(this, DeepLinkHomepageActivityInternal::class.java)
|
||||
.putExtra(SettingsActivity.EXTRA_USER_HANDLE, user)
|
||||
startActivityAsUser(
|
||||
|
@@ -70,6 +70,7 @@ import com.android.settings.SettingsApplication;
|
||||
import com.android.settings.accounts.AvatarViewMixin;
|
||||
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
|
||||
import com.android.settings.activityembedding.ActivityEmbeddingUtils;
|
||||
import com.android.settings.activityembedding.EmbeddedDeepLinkUtils;
|
||||
import com.android.settings.core.CategoryMixin;
|
||||
import com.android.settings.core.FeatureFlags;
|
||||
import com.android.settings.homepage.contextualcards.ContextualCardsFragment;
|
||||
@@ -204,7 +205,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements
|
||||
if (mIsEmbeddingActivityEnabled) {
|
||||
final UserManager um = getSystemService(UserManager.class);
|
||||
final UserInfo userInfo = um.getUserInfo(getUserId());
|
||||
if (userInfo.isManagedProfile()) {
|
||||
if (EmbeddedDeepLinkUtils.isSubProfile(userInfo)) {
|
||||
final Intent intent = new Intent(getIntent())
|
||||
.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT)
|
||||
.putExtra(EXTRA_USER_HANDLE, getUser())
|
||||
|
@@ -40,7 +40,9 @@ import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
import android.util.ArraySet;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
@@ -74,6 +76,8 @@ import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowActivityManager;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = {
|
||||
ShadowUserManager.class,
|
||||
@@ -249,7 +253,7 @@ public class SettingsHomepageActivityTest {
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
|
||||
doReturn(true).when(activity).isTaskRoot();
|
||||
|
||||
activity.onCreate(/* savedInstanceState */ null);
|
||||
activity.onCreate(/* savedInstanceState= */ null);
|
||||
|
||||
verify(activity, never()).finish();
|
||||
}
|
||||
@@ -260,7 +264,7 @@ public class SettingsHomepageActivityTest {
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
|
||||
doReturn(false).when(activity).isTaskRoot();
|
||||
|
||||
activity.onCreate(/* savedInstanceState */ null);
|
||||
activity.onCreate(/* savedInstanceState= */ null);
|
||||
|
||||
verify(activity).finish();
|
||||
verify(activity).startActivity(any(Intent.class));
|
||||
@@ -269,26 +273,75 @@ public class SettingsHomepageActivityTest {
|
||||
@Test
|
||||
public void onCreate_notTaskRoot_flagNewTask_shouldOnlyFinish() {
|
||||
SettingsHomepageActivity activity =
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class,
|
||||
new Intent().addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)).get());
|
||||
doReturn(false).when(activity).isTaskRoot();
|
||||
activity.setIntent(new Intent().addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||
|
||||
activity.onCreate(/* savedInstanceState */ null);
|
||||
activity.onCreate(/* savedInstanceState= */ null);
|
||||
|
||||
verify(activity).finish();
|
||||
verify(activity, never()).startActivity(any(Intent.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = ShadowActivityEmbeddingUtils.class)
|
||||
public void onCreate_eligibleProfile_shouldNotRestartActivity() {
|
||||
ShadowActivityEmbeddingUtils.setIsEmbeddingActivityEnabled(true);
|
||||
SettingsHomepageActivity activity =
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
|
||||
doReturn(0).when(activity).getUserId();
|
||||
doReturn(true).when(activity).isTaskRoot();
|
||||
|
||||
activity.onCreate(/* savedInstanceState= */ null);
|
||||
|
||||
verify(activity, never()).finish();
|
||||
verify(activity, never()).startActivityAsUser(any(Intent.class), any(UserHandle.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = ShadowActivityEmbeddingUtils.class)
|
||||
public void onCreate_managedProfile_shouldRestartActivity() {
|
||||
ShadowActivityEmbeddingUtils.setIsEmbeddingActivityEnabled(true);
|
||||
SettingsHomepageActivity activity =
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
|
||||
final Set<Integer> profileIds = new ArraySet<>();
|
||||
profileIds.add(10);
|
||||
ShadowUserManager.getShadow().setManagedProfiles(profileIds);
|
||||
doReturn(10).when(activity).getUserId();
|
||||
doReturn(true).when(activity).isTaskRoot();
|
||||
|
||||
activity.onCreate(/* savedInstanceState= */ null);
|
||||
|
||||
verify(activity).finish();
|
||||
verify(activity).startActivityAsUser(any(Intent.class), any(UserHandle.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = ShadowActivityEmbeddingUtils.class)
|
||||
public void onCreate_privateProfile_shouldRestartActivity() {
|
||||
ShadowActivityEmbeddingUtils.setIsEmbeddingActivityEnabled(true);
|
||||
SettingsHomepageActivity activity =
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
|
||||
ShadowUserManager.getShadow().setPrivateProfile(11, "private", 0);
|
||||
doReturn(11).when(activity).getUserId();
|
||||
doReturn(true).when(activity).isTaskRoot();
|
||||
|
||||
activity.onCreate(/* savedInstanceState= */ null);
|
||||
|
||||
verify(activity).finish();
|
||||
verify(activity).startActivityAsUser(any(Intent.class), any(UserHandle.class));
|
||||
}
|
||||
|
||||
/** This test is for large screen devices Activity embedding. */
|
||||
@Test
|
||||
@Config(shadows = ShadowActivityEmbeddingUtils.class)
|
||||
public void onCreate_flagClearTop_shouldInitRules() {
|
||||
ShadowActivityEmbeddingUtils.setIsEmbeddingActivityEnabled(true);
|
||||
SettingsHomepageActivity activity =
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
|
||||
doReturn(new Intent().setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).when(activity).getIntent();
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class,
|
||||
new Intent().setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).get());
|
||||
|
||||
activity.onCreate(/* savedInstanceState */ null);
|
||||
activity.onCreate(/* savedInstanceState= */ null);
|
||||
|
||||
verify(activity).initSplitPairRules();
|
||||
}
|
||||
@@ -315,12 +368,12 @@ public class SettingsHomepageActivityTest {
|
||||
|
||||
@Test
|
||||
public void getInitialReferrer_hasReferrerExtra_returnGivenReferrer() {
|
||||
SettingsHomepageActivity activity =
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
|
||||
doReturn(activity.getPackageName()).when(activity).getCurrentReferrer();
|
||||
String referrer = "com.abc";
|
||||
activity.setIntent(new Intent().putExtra(SettingsHomepageActivity.EXTRA_INITIAL_REFERRER,
|
||||
referrer));
|
||||
SettingsHomepageActivity activity =
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class,
|
||||
new Intent().putExtra(SettingsHomepageActivity.EXTRA_INITIAL_REFERRER,
|
||||
referrer)).get());
|
||||
doReturn(activity.getPackageName()).when(activity).getCurrentReferrer();
|
||||
|
||||
assertEquals(activity.getInitialReferrer(), referrer);
|
||||
}
|
||||
@@ -330,8 +383,8 @@ public class SettingsHomepageActivityTest {
|
||||
String referrer = "com.abc";
|
||||
Uri uri = new Uri.Builder().scheme("android-app").authority(referrer).build();
|
||||
SettingsHomepageActivity activity =
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
|
||||
activity.setIntent(new Intent().putExtra(Intent.EXTRA_REFERRER, uri));
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class,
|
||||
new Intent().putExtra(Intent.EXTRA_REFERRER, uri)).get());
|
||||
|
||||
assertNotEquals(activity.getCurrentReferrer(), referrer);
|
||||
}
|
||||
@@ -340,8 +393,8 @@ public class SettingsHomepageActivityTest {
|
||||
public void getCurrentReferrer_hasReferrerNameExtra_shouldNotEqual() {
|
||||
String referrer = "com.abc";
|
||||
SettingsHomepageActivity activity =
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
|
||||
activity.setIntent(new Intent().putExtra(Intent.EXTRA_REFERRER_NAME, referrer));
|
||||
spy(Robolectric.buildActivity(SettingsHomepageActivity.class,
|
||||
new Intent().putExtra(Intent.EXTRA_REFERRER_NAME, referrer)).get());
|
||||
|
||||
assertNotEquals(activity.getCurrentReferrer(), referrer);
|
||||
}
|
||||
|
@@ -17,6 +17,7 @@
|
||||
package com.android.settings.testutils.shadow;
|
||||
|
||||
import static android.os.Build.VERSION_CODES.LOLLIPOP;
|
||||
import static android.os.UserManager.USER_TYPE_PROFILE_MANAGED;
|
||||
import static android.os.UserManager.USER_TYPE_PROFILE_PRIVATE;
|
||||
|
||||
import android.annotation.UserIdInt;
|
||||
@@ -76,6 +77,7 @@ public class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager
|
||||
|
||||
public void addProfile(UserInfo userInfo) {
|
||||
mUserProfileInfos.add(userInfo);
|
||||
mUserInfoMap.put(userInfo.id, userInfo);
|
||||
}
|
||||
|
||||
@Resetter
|
||||
@@ -100,8 +102,7 @@ public class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager
|
||||
public void addProfile(
|
||||
int userHandle, int profileUserHandle, String profileName, int profileFlags) {
|
||||
UserInfo profileUserInfo = new UserInfo(profileUserHandle, profileName, profileFlags);
|
||||
mUserProfileInfos.add(profileUserInfo);
|
||||
mUserInfoMap.put(profileUserHandle, profileUserInfo);
|
||||
addProfile(profileUserInfo);
|
||||
mProfileToParent.put(profileUserHandle, userHandle);
|
||||
if (profileFlags == UserInfo.FLAG_MANAGED_PROFILE) {
|
||||
setManagedProfiles(new HashSet<>(Arrays.asList(profileUserHandle)));
|
||||
@@ -179,8 +180,7 @@ public class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager
|
||||
}
|
||||
|
||||
public static ShadowUserManager getShadow() {
|
||||
return (ShadowUserManager) Shadow.extract(
|
||||
RuntimeEnvironment.application.getSystemService(UserManager.class));
|
||||
return Shadow.extract(RuntimeEnvironment.application.getSystemService(UserManager.class));
|
||||
}
|
||||
|
||||
@Implementation
|
||||
@@ -229,10 +229,23 @@ public class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager
|
||||
public void setManagedProfiles(Set<Integer> profileIds) {
|
||||
mManagedProfiles.clear();
|
||||
mManagedProfiles.addAll(profileIds);
|
||||
profileIds.forEach(id -> {
|
||||
addProfile(new UserInfo(id, "managed" + id, null, 0, USER_TYPE_PROFILE_MANAGED));
|
||||
mProfileToParent.put(id, PRIMARY_USER_ID);
|
||||
});
|
||||
addPrimaryUser();
|
||||
}
|
||||
|
||||
public void setPrivateProfile(int id, String name, int flags) {
|
||||
mUserProfileInfos.add(new UserInfo(id, name, null, flags, USER_TYPE_PROFILE_PRIVATE));
|
||||
addProfile(new UserInfo(id, name, null, flags, USER_TYPE_PROFILE_PRIVATE));
|
||||
mProfileToParent.put(id, PRIMARY_USER_ID);
|
||||
addPrimaryUser();
|
||||
}
|
||||
|
||||
private void addPrimaryUser() {
|
||||
if (mUserInfoMap.get(PRIMARY_USER_ID) == null) {
|
||||
addProfile(getPrimaryUser());
|
||||
}
|
||||
}
|
||||
|
||||
public void setUserSwitcherEnabled(boolean userSwitchEnabled) {
|
||||
|
Reference in New Issue
Block a user