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
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 194d017..923f5ae 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -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"
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 6a20d75..923c788 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -1385,20 +1385,19 @@
* @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());
- // Apply the insets paddings to the view.
- v.setPadding(insets.left, insets.top, insets.right, insets.bottom);
+ ViewCompat.setOnApplyWindowInsetsListener(activity.findViewById(android.R.id.content),
+ (v, windowInsets) -> {
+ Insets insets = windowInsets.getInsets(
+ 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, 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;
- });
- }
+ // 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) {
diff --git a/src/com/android/settings/core/SettingsBaseActivity.java b/src/com/android/settings/core/SettingsBaseActivity.java
index c282498..c9530ab 100644
--- a/src/com/android/settings/core/SettingsBaseActivity.java
+++ b/src/com/android/settings/core/SettingsBaseActivity.java
@@ -46,6 +46,7 @@
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 @@
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 @@
}
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);
+ }
+ }
}
diff --git a/tests/robotests/src/com/android/settings/SettingsActivityTest.java b/tests/robotests/src/com/android/settings/SettingsActivityTest.java
index a879695..89f8449 100644
--- a/tests/robotests/src/com/android/settings/SettingsActivityTest.java
+++ b/tests/robotests/src/com/android/settings/SettingsActivityTest.java
@@ -27,7 +27,6 @@
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 @@
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;
diff --git a/tests/robotests/src/com/android/settings/UtilsTest.java b/tests/robotests/src/com/android/settings/UtilsTest.java
index a4b0105..0c555da 100644
--- a/tests/robotests/src/com/android/settings/UtilsTest.java
+++ b/tests/robotests/src/com/android/settings/UtilsTest.java
@@ -30,6 +30,7 @@
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.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.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;
@@ -267,6 +271,17 @@
}
@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(
R.string.config_settingsintelligence_package_name);