diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java index d96ec39507a..6cf3061f380 100644 --- a/src/com/android/settings/homepage/SettingsHomepageActivity.java +++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java @@ -183,6 +183,12 @@ public class SettingsHomepageActivity extends FragmentActivity implements protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (!isTaskRoot() && !isSingleTask()) { + Log.i(TAG, "Not task root nor single task, finish"); + finish(); + return; + } + mIsEmbeddingActivityEnabled = ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this); if (mIsEmbeddingActivityEnabled) { final UserManager um = getSystemService(UserManager.class); @@ -308,6 +314,12 @@ public class SettingsHomepageActivity extends FragmentActivity implements updateHomepageUI(); } + private boolean isSingleTask() { + ActivityInfo info = getIntent().resolveActivityInfo(getPackageManager(), + PackageManager.MATCH_DEFAULT_ONLY); + return info.launchMode == ActivityInfo.LAUNCH_SINGLE_TASK; + } + private void updateSplitLayout() { if (!mIsEmbeddingActivityEnabled) { return; diff --git a/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java b/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java index c281dca8bc4..3857e645214 100644 --- a/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java +++ b/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java @@ -29,6 +29,7 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -210,6 +211,28 @@ public class SettingsHomepageActivityTest { & SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS).isEqualTo(0); } + @Test + public void onCreate_notTaskRoot_shouldFinishActivity() { + SettingsHomepageActivity activity = + spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get()); + doReturn(false).when(activity).isTaskRoot(); + + activity.onCreate(/* savedInstanceState */ null); + + verify(activity).finish(); + } + + @Test + public void onCreate_singleTaskActivity_shouldNotFinishActivity() { + SettingsHomepageActivity activity = + spy(Robolectric.buildActivity(DeepLinkHomepageActivity.class).get()); + doReturn(false).when(activity).isTaskRoot(); + + activity.onCreate(/* savedInstanceState */ null); + + verify(activity, never()).finish(); + } + /** This test is for large screen devices Activity embedding. */ @Test @Config(shadows = ShadowActivityEmbeddingUtils.class)