Merge "Fix the action bar shows up problem" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
b9c1632a5f
@@ -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"
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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(
|
||||||
|
Reference in New Issue
Block a user