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

Commit 8803ae78 authored by Sunny Shao's avatar Sunny Shao
Browse files

Fix the action bar shows up problem

- Hide the internal action bar.
- Refine the Utils.setupEdgeToEdge API.
- Rollback the testcases.

Bug: 328622648
Fixes: 331308440
Test: atest com.android.settings.UtilsTest SettingsActivityTest
Change-Id: I7dfbc93def3e772b57bf06b8276315cee7402a9c
parent c35fc38b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -152,7 +152,7 @@
            android:name=".SettingsApplication"
            android:label="@string/settings_label"
            android:icon="@drawable/ic_launcher_settings"
            android:theme="@style/Theme.Settings.NoActionBar"
            android:theme="@style/Theme.Settings"
            android:hardwareAccelerated="true"
            android:requiredForAllUsers="true"
            android:supportsRtl="true"
+13 −14
Original line number Diff line number Diff line
@@ -1385,21 +1385,20 @@ public final class Utils extends com.android.settingslib.Utils {
     * @param activity the Activity need to setup the edge to edge feature.
     */
    public static void setupEdgeToEdge(@NonNull FragmentActivity activity) {
        if (com.android.window.flags.Flags.enforceEdgeToEdge()) {
        ViewCompat.setOnApplyWindowInsetsListener(activity.findViewById(android.R.id.content),
                (v, windowInsets) -> {
                    Insets insets = windowInsets.getInsets(
                                WindowInsetsCompat.Type.systemBars()
                                        | WindowInsetsCompat.Type.ime());
                            WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime());
                    int statusBarHeight = activity.getWindow().getDecorView().getRootWindowInsets()
                            .getInsets(WindowInsetsCompat.Type.statusBars()).top;
                    // Apply the insets paddings to the view.
                        v.setPadding(insets.left, insets.top, insets.right, insets.bottom);
                    v.setPadding(insets.left, statusBarHeight, insets.right, insets.bottom);

                    // Return CONSUMED if you don't want the window insets to keep being
                    // passed down to descendant views.
                    return WindowInsetsCompat.CONSUMED;
                });
    }
    }

    private static FaceManager.RemovalCallback faceManagerRemovalCallback(int userId) {
        return new FaceManager.RemovalCallback() {
+19 −1
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import com.android.settings.Utils;
import com.android.settings.core.CategoryMixin.CategoryHandler;
import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType;
import com.android.window.flags.Flags;

import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
@@ -92,8 +93,11 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa
            Log.w(TAG, "Devices lock task mode pinned.");
            finish();
        }
        Utils.setupEdgeToEdge(this);
        final long startTime = System.currentTimeMillis();
        if (Flags.enforceEdgeToEdge()) {
            Utils.setupEdgeToEdge(this);
            hideInternalActionBar();
        }
        getLifecycle().addObserver(new HideNonSystemOverlayMixin(this));
        TextAppearanceConfig.setShouldLoadFontSynchronously(true);

@@ -291,4 +295,18 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa
        }
        return intent.getIntExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_NONE);
    }

    /**
     * This internal ActionBar will be appeared automatically when the
     * Utils.setupEdgeToEdge is invoked.
     *
     * @see Utils.setupEdgeToEdge
     */
    private void hideInternalActionBar() {
        final View actionBarContainer =
                findViewById(com.android.internal.R.id.action_bar_container);
        if (actionBarContainer != null) {
            actionBarContainer.setVisibility(View.GONE);
        }
    }
}
+0 −10
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.ActionBar;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
@@ -115,15 +114,6 @@ public class SettingsActivityTest {
        assertThat(((ListenerFragment) fragments.get(1)).mOnActivityResultCalled).isTrue();
    }

    @Test
    public void getActionBar_hasNoActionBar() {
        final SettingsActivity activity = Robolectric.buildActivity(SettingsActivity.class).get();

        final ActionBar actionBar = activity.getActionBar();

        assertThat(actionBar).isNull();
    }

    public static class ListenerFragment extends Fragment implements OnActivityResultListener {

        private boolean mOnActivityResultCalled;
+15 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.ActionBar;
import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyResourcesManager;
import android.content.ComponentName;
@@ -55,9 +56,11 @@ import android.os.storage.StorageManager;
import android.os.storage.VolumeInfo;
import android.util.IconDrawableFactory;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView;

import androidx.core.graphics.drawable.IconCompat;
import androidx.fragment.app.FragmentActivity;

import com.android.internal.widget.LockPatternUtils;
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
@@ -68,6 +71,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@@ -266,6 +270,17 @@ public class UtilsTest {
        Utils.setActionBarShadowAnimation(null, null, null);
    }

    @Test
    public void setActionBarShadowAnimation_shouldSetElevationToZero() {
        final FragmentActivity activity = Robolectric.setupActivity(FragmentActivity.class);
        final ActionBar actionBar = activity.getActionBar();

        Utils.setActionBarShadowAnimation(activity, activity.getLifecycle(),
                new ScrollView(mContext));

        assertThat(actionBar.getElevation()).isEqualTo(0.f);
    }

    @Test
    public void isSettingsIntelligence_IsSI_returnTrue() {
        final String siPackageName = mContext.getString(