Merge "Fix the action bar shows up problem" into main

This commit is contained in:
Treehugger Robot
2024-04-01 09:29:28 +00:00
committed by Android (Google) Code Review
5 changed files with 47 additions and 25 deletions

View File

@@ -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"

View File

@@ -1387,20 +1387,19 @@ 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());
// 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) {

View File

@@ -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);
}
}
}

View File

@@ -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;

View File

@@ -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(