From 706907b7b2541a6cf5b6850dbd0df527c5e41639 Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Mon, 18 Dec 2023 17:05:24 +0800 Subject: [PATCH] Finish HomepageActivity when it's not the root of a task and not singleTask. HomepageActivity should be the first activity in a task, or be launched in singleTask mode. Finishing it will bring up the previous activity in the task. Fix: 297857732 Fix: 309045575 Test: robotest Change-Id: Iddcba1652060d755693dd20d0e350e3d6c1ae138 Merged-In: Iddcba1652060d755693dd20d0e350e3d6c1ae138 --- .../homepage/SettingsHomepageActivity.java | 12 ++++++++++ .../SettingsHomepageActivityTest.java | 23 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java index 829a89c6f03..bf8c9a3c9f5 100644 --- a/src/com/android/settings/homepage/SettingsHomepageActivity.java +++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java @@ -175,6 +175,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); @@ -291,6 +297,12 @@ public class SettingsHomepageActivity extends FragmentActivity implements updateSplitLayout(); } + 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 2c16db5bb4d..c2c6bdf871d 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; @@ -209,6 +210,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)