Merge "[Activity embedding] Fix unexpected finished 2nd layer problem"
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index 8b6fde7..dc1c1f2 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -43,6 +43,7 @@
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;
@@ -223,10 +224,23 @@
if (shouldLaunchDeepLinkIntentToRight()) {
launchDeepLinkIntentToRight();
}
+
+ // Settings app may be launched on an existing task. Reset SplitPairRule of SubSettings here
+ // to prevent SplitPairRule of an existing task applied on a new started Settings app.
+ if (ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)
+ && (getIntent().getFlags() & Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) {
+ initSplitPairRules();
+ }
+
updateHomepagePaddings();
updateSplitLayout();
}
+ @VisibleForTesting
+ void initSplitPairRules() {
+ new ActivityEmbeddingRulesController(getApplicationContext()).initRules();
+ }
+
@Override
protected void onStart() {
((SettingsApplication) getApplication()).setHomeActivity(this);
diff --git a/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java b/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java
index 4d203a8..b3feef4 100644
--- a/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java
@@ -20,12 +20,14 @@
import static com.google.common.truth.Truth.assertThat;
+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 +39,7 @@
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 +198,20 @@
& 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 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();
+
+ activity.onCreate(/* savedInstanceState */ null);
+
+ verify(activity).initSplitPairRules();
+ }
+
@Implements(SuggestionFeatureProviderImpl.class)
public static class ShadowSuggestionFeatureProviderImpl {