Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd8c705a authored by Jason Chiu's avatar Jason Chiu Committed by Android (Google) Code Review
Browse files

Merge "Restart or finish HomepageActivity when it's launched unexpectedly" into main

parents d1894bd8 b0c011e0
Loading
Loading
Loading
Loading
+26 −1
Original line number Diff line number Diff line
@@ -194,8 +194,12 @@ public class SettingsHomepageActivity extends FragmentActivity implements
        if (unprovisioned) {
            Log.e(TAG, "Device is not provisioned, exiting Settings");
            finish();
            return;
        }

        // Settings homepage should be the task root, otherwise there will be UI issues.
        boolean isTaskRoot = isTaskRoot();

        mIsEmbeddingActivityEnabled = ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this);
        if (mIsEmbeddingActivityEnabled) {
            final UserManager um = getSystemService(UserManager.class);
@@ -211,13 +215,34 @@ public class SettingsHomepageActivity extends FragmentActivity implements
                } else {
                    intent.setPackage(getPackageName());
                }
                if (!isTaskRoot) {
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                } else {
                    intent.removeFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                }
                startActivityAsUser(intent, um.getProfileParent(userInfo.id).getUserHandle());
                finish();
                return;
            }
        }

        if (!isTaskRoot) {
            if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
                Log.i(TAG, "Activity has been started, finishing");
            } else {
                Log.i(TAG, "Homepage should be started with FLAG_ACTIVITY_NEW_TASK, restarting");
                Intent intent = new Intent(getIntent())
                        .setPackage(getPackageName())
                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                                | Intent.FLAG_ACTIVITY_FORWARD_RESULT)
                        .putExtra(EXTRA_USER_HANDLE, getUser())
                        .putExtra(EXTRA_INITIAL_REFERRER, getCurrentReferrer());
                startActivity(intent);
            }
            finish();
            return;
        }

        setupEdgeToEdge();
        setContentView(R.layout.settings_homepage_container);

+38 −0
Original line number Diff line number Diff line
@@ -24,11 +24,13 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
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;
@@ -241,6 +243,42 @@ public class SettingsHomepageActivityTest {
                & SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS).isEqualTo(0);
    }

    @Test
    public void onCreate_TaskRoot_shouldNotFinish() {
        SettingsHomepageActivity activity =
                spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
        doReturn(true).when(activity).isTaskRoot();

        activity.onCreate(/* savedInstanceState */ null);

        verify(activity, never()).finish();
    }

    @Test
    public void onCreate_notTaskRoot_shouldRestartActivity() {
        SettingsHomepageActivity activity =
                spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
        doReturn(false).when(activity).isTaskRoot();

        activity.onCreate(/* savedInstanceState */ null);

        verify(activity).finish();
        verify(activity).startActivity(any(Intent.class));
    }

    @Test
    public void onCreate_notTaskRoot_flagNewTask_shouldOnlyFinish() {
        SettingsHomepageActivity activity =
                spy(Robolectric.buildActivity(SettingsHomepageActivity.class).get());
        doReturn(false).when(activity).isTaskRoot();
        activity.setIntent(new Intent().addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));

        activity.onCreate(/* savedInstanceState */ null);

        verify(activity).finish();
        verify(activity, never()).startActivity(any(Intent.class));
    }

    /** This test is for large screen devices Activity embedding. */
    @Test
    @Config(shadows = ShadowActivityEmbeddingUtils.class)