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

Commit 09276c96 authored by lbill's avatar lbill
Browse files

Count isActivityEmbedded() state to show split screen warning dialog

According to Activity#isInMultiWindowMode() API design,
When the Task is in fullscreen windowing mode, and the app is in
ActivityEmbedding split (two activities split left and right),
Activity.isInMultiWindowMode() == true.

With the reason, we should consider additional condidion for
foldable device in unfolded mode, while settings activities
config to embedded activity, we can't only count on
isInMultiWindowMode() for split-screen mode

Bug: 278176550
Bug: 276938441
Test: atest CombinedBiometricProfileSettingsTest
Test: atest FingerprintSettingsFragmentTest
Test: manaul go to split screen mode and try to enroll face
Test: manual unfold device and enroll finger or face
Change-Id: I02bd223f27889e74e67b73051531a5b4554f3de1
parent f77643be
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settingslib.activityembedding.ActivityEmbeddingUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.transition.SettingsTransitionHelper;

@@ -169,8 +170,8 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
            //  If it's split mode and there is no enrolled face, show the dialog. (if there is
            //  enrolled face, FaceSettingsEnrollButtonPreferenceController#onClick will handle
            //  the dialog)
            if (getActivity().isInMultiWindowMode() && !mFaceManager.hasEnrolledTemplates(
                    mUserId)) {
            if (getActivity().isInMultiWindowMode() && !ActivityEmbeddingUtils.isActivityEmbedded(
                    getActivity()) && !mFaceManager.hasEnrolledTemplates(mUserId)) {
                BiometricsSplitScreenDialog.newInstance(TYPE_FACE).show(
                        getActivity().getSupportFragmentManager(),
                        BiometricsSplitScreenDialog.class.getName());
@@ -205,8 +206,8 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
            //  If it's split mode and there is no enrolled fingerprint, show the dialog. (if
            //  there is enrolled fingerprint, FingerprintSettingsFragment#onPreferenceTreeClick
            //  will handle the dialog)
            if (getActivity().isInMultiWindowMode() && !mFingerprintManager.hasEnrolledFingerprints(
                    mUserId)) {
            if (getActivity().isInMultiWindowMode() && !ActivityEmbeddingUtils.isActivityEmbedded(
                    getActivity()) && !mFingerprintManager.hasEnrolledFingerprints(mUserId)) {
                BiometricsSplitScreenDialog.newInstance(TYPE_FINGERPRINT).show(
                        getActivity().getSupportFragmentManager(),
                        BiometricsSplitScreenDialog.class.getName());
+10 −8
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.activityembedding.ActivityEmbeddingUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.LayoutPreference;
@@ -106,16 +107,17 @@ public class FaceSettings extends DashboardFragment {
    private final FaceSettingsEnrollButtonPreferenceController.Listener mEnrollListener =
            new FaceSettingsEnrollButtonPreferenceController.Listener() {
                @Override
                public boolean checkInMultiWindowMode() {
                    if (!getActivity().isInMultiWindowMode()) {
                        return false;
                    }
                public boolean onShowSplitScreenDialog() {
                    if (getActivity().isInMultiWindowMode()
                            && !ActivityEmbeddingUtils.isActivityEmbedded(getActivity())) {
                        // If it's in split mode, show the error dialog.
                        BiometricsSplitScreenDialog.newInstance(TYPE_FACE).show(
                                getActivity().getSupportFragmentManager(),
                                BiometricsSplitScreenDialog.class.getName());
                        return true;
                    }
                    return false;
                }

                @Override
                public void onStartEnrolling(Intent intent) {
+4 −4
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ public class FaceSettingsEnrollButtonPreferenceController extends BasePreference
    @Override
    public void onClick(View v) {
        // If it's in multi window mode, do not start the introduction intent.
        if (mListener != null && mListener.checkInMultiWindowMode()) {
        if (mListener != null && mListener.onShowSplitScreenDialog()) {
            return;
        }

@@ -121,10 +121,10 @@ public class FaceSettingsEnrollButtonPreferenceController extends BasePreference
     */
    public interface Listener {
        /**
         * Called to check whether it's in multi window mode
         * @return Whether it's in multi window mode.
         * Called to check whether to show dialog in split screen mode
         * @return Whether split screen warning dialog shown.
         */
        boolean checkInMultiWindowMode();
        boolean onShowSplitScreenDialog();

        /**
         * Called when the user has indicated an intent to begin enrolling a new face.
+4 −1
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.activityembedding.ActivityEmbeddingUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.transition.SettingsTransitionHelper;
import com.android.settingslib.widget.FooterPreference;
@@ -700,7 +701,9 @@ public class FingerprintSettings extends SubSettings {
            if (KEY_FINGERPRINT_ADD.equals(key)) {
                // If it's in split mode, show the error dialog and don't need to show adding
                // fingerprint intent.
                if (getActivity().isInMultiWindowMode()) {
                final boolean isActivityEmbedded = ActivityEmbeddingUtils.isActivityEmbedded(
                                getActivity());
                if (getActivity().isInMultiWindowMode() && !isActivityEmbedded) {
                    BiometricsSplitScreenDialog.newInstance(TYPE_FINGERPRINT).show(
                            getActivity().getSupportFragmentManager(),
                            BiometricsSplitScreenDialog.class.getName());
+2 −2
Original line number Diff line number Diff line
@@ -62,7 +62,7 @@ public class FaceSettingsEnrollButtonPreferenceControllerTest {

    @Test
    public void testOnClick_inFullScreen() {
        when(mListener.checkInMultiWindowMode()).thenReturn(false);
        when(mListener.onShowSplitScreenDialog()).thenReturn(false);
        mController.onClick(mButton);

        assertThat(mController.isClicked()).isTrue();
@@ -71,7 +71,7 @@ public class FaceSettingsEnrollButtonPreferenceControllerTest {

    @Test
    public void testOnClick_inMultiWindow() {
        when(mListener.checkInMultiWindowMode()).thenReturn(true);
        when(mListener.onShowSplitScreenDialog()).thenReturn(true);
        mController.onClick(mButton);

        assertThat(mController.isClicked()).isFalse();