diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java index 5c89fb34ea3..67390847dcb 100644 --- a/src/com/android/settings/homepage/SettingsHomepageActivity.java +++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java @@ -43,6 +43,7 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.Toolbar; +import androidx.annotation.VisibleForTesting; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowCompat; @@ -242,10 +243,21 @@ public class SettingsHomepageActivity extends FragmentActivity implements if (isFinishing()) { return; } + + if (ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this) + && (intent.getFlags() & Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) { + initSplitPairRules(); + } + // Launch the intent from deep link for large screen devices. launchDeepLinkIntentToRight(); } + @VisibleForTesting + void initSplitPairRules() { + new ActivityEmbeddingRulesController(getApplicationContext()).initRules(); + } + @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); @@ -502,7 +514,8 @@ public class SettingsHomepageActivity extends FragmentActivity implements return menuKey; } - private void reloadHighlightMenuKey() { + @VisibleForTesting + void reloadHighlightMenuKey() { mMainFragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, getHighlightMenuKey()); mMainFragment.reloadHighlightMenuKey(); diff --git a/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java b/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java index 4d203a8a6b0..86d6e129fdb 100644 --- a/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java +++ b/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java @@ -20,12 +20,15 @@ import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTE import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.ActivityManager; +import android.content.Intent; import android.os.Build; import android.view.View; import android.view.Window; @@ -37,6 +40,7 @@ import androidx.fragment.app.Fragment; import com.android.settings.R; import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl; import com.android.settings.homepage.contextualcards.slices.BatteryFixSliceTest; +import com.android.settings.testutils.shadow.ShadowActivityEmbeddingUtils; import com.android.settings.testutils.shadow.ShadowUserManager; import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin; @@ -195,6 +199,22 @@ public class SettingsHomepageActivityTest { & SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS).isEqualTo(0); } + /** This test is for large screen devices Activity embedding. */ + @Test + @Config(shadows = ShadowActivityEmbeddingUtils.class) + public void onNewIntent_flagClearTop_shouldInitRules() { + ShadowActivityEmbeddingUtils.setIsEmbeddingActivityEnabled(true); + SettingsHomepageActivity activity = + spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get()); + doNothing().when(activity).reloadHighlightMenuKey(); + TopLevelSettings topLevelSettings = mock(TopLevelSettings.class); + doReturn(topLevelSettings).when(activity).getMainFragment(); + + activity.onNewIntent(new Intent().setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); + + verify(activity).initSplitPairRules(); + } + @Implements(SuggestionFeatureProviderImpl.class) public static class ShadowSuggestionFeatureProviderImpl {