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:name=".SettingsApplication"
android:label="@string/settings_label" android:label="@string/settings_label"
android:icon="@drawable/ic_launcher_settings" android:icon="@drawable/ic_launcher_settings"
android:theme="@style/Theme.Settings.NoActionBar" android:theme="@style/Theme.Settings"
android:hardwareAccelerated="true" android:hardwareAccelerated="true"
android:requiredForAllUsers="true" android:requiredForAllUsers="true"
android:supportsRtl="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. * @param activity the Activity need to setup the edge to edge feature.
*/ */
public static void setupEdgeToEdge(@NonNull FragmentActivity activity) { public static void setupEdgeToEdge(@NonNull FragmentActivity activity) {
if (com.android.window.flags.Flags.enforceEdgeToEdge()) { ViewCompat.setOnApplyWindowInsetsListener(activity.findViewById(android.R.id.content),
ViewCompat.setOnApplyWindowInsetsListener(activity.findViewById(android.R.id.content), (v, windowInsets) -> {
(v, windowInsets) -> { Insets insets = windowInsets.getInsets(
Insets insets = windowInsets.getInsets( WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime());
WindowInsetsCompat.Type.systemBars() int statusBarHeight = activity.getWindow().getDecorView().getRootWindowInsets()
| WindowInsetsCompat.Type.ime()); .getInsets(WindowInsetsCompat.Type.statusBars()).top;
// Apply the insets paddings to the view. // 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 // Return CONSUMED if you don't want the window insets to keep being
// passed down to descendant views. // passed down to descendant views.
return WindowInsetsCompat.CONSUMED; return WindowInsetsCompat.CONSUMED;
}); });
}
} }
private static FaceManager.RemovalCallback faceManagerRemovalCallback(int userId) { 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.settings.core.CategoryMixin.CategoryHandler;
import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin; import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType; 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.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout; 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."); Log.w(TAG, "Devices lock task mode pinned.");
finish(); finish();
} }
Utils.setupEdgeToEdge(this);
final long startTime = System.currentTimeMillis(); final long startTime = System.currentTimeMillis();
if (Flags.enforceEdgeToEdge()) {
Utils.setupEdgeToEdge(this);
hideInternalActionBar();
}
getLifecycle().addObserver(new HideNonSystemOverlayMixin(this)); getLifecycle().addObserver(new HideNonSystemOverlayMixin(this));
TextAppearanceConfig.setShouldLoadFontSynchronously(true); TextAppearanceConfig.setShouldLoadFontSynchronously(true);
@@ -291,4 +295,18 @@ public class SettingsBaseActivity extends FragmentActivity implements CategoryHa
} }
return intent.getIntExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_NONE); 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.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.ActionBar;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@@ -115,15 +114,6 @@ public class SettingsActivityTest {
assertThat(((ListenerFragment) fragments.get(1)).mOnActivityResultCalled).isTrue(); 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 { public static class ListenerFragment extends Fragment implements OnActivityResultListener {
private boolean mOnActivityResultCalled; 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.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.ActionBar;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyResourcesManager; import android.app.admin.DevicePolicyResourcesManager;
import android.content.ComponentName; import android.content.ComponentName;
@@ -55,9 +56,11 @@ import android.os.storage.StorageManager;
import android.os.storage.VolumeInfo; import android.os.storage.VolumeInfo;
import android.util.IconDrawableFactory; import android.util.IconDrawableFactory;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView; import android.widget.TextView;
import androidx.core.graphics.drawable.IconCompat; import androidx.core.graphics.drawable.IconCompat;
import androidx.fragment.app.FragmentActivity;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.settings.testutils.shadow.ShadowLockPatternUtils; import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
@@ -68,6 +71,7 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
@@ -266,6 +270,17 @@ public class UtilsTest {
Utils.setActionBarShadowAnimation(null, null, null); 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 @Test
public void isSettingsIntelligence_IsSI_returnTrue() { public void isSettingsIntelligence_IsSI_returnTrue() {
final String siPackageName = mContext.getString( final String siPackageName = mContext.getString(