Fix rotate device at face unlock detailed page, device will display

redundant face unlock header.

1. Change the FaceSettings theme style to avoid an action bar
appearing.
2. In AndroidManifest.xml to apply configChanges attribute for
handling device orientation.

Bug: 262497152

Test: manually to do reproduced steps:
Pre-Condition:
1. enroll face
2. enable auto rotate

Procedure:
1.go to settings > security > face & fingerprint unlock
2.enter screen lock
3.click face unlock
4.rotate device into landscape mode and then back to portrait mode
5.check the UI

Test: make RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings
.biometrics.face.FaceSettingsActivityTest"

Change-Id: I4ee1bb4f061ea2d141043405213ba6e60bacd92f
This commit is contained in:
Jason Chang
2023-03-29 17:00:59 +00:00
parent 5c8d1332c7
commit 2ca753bd06
3 changed files with 91 additions and 2 deletions

View File

@@ -657,6 +657,7 @@
<activity android:name="Settings$FaceSettingsActivity"
android:label="@string/security_settings_face_preference_title"
android:exported="true"
android:configChanges="orientation|screenSize"
android:icon="@drawable/ic_face_header">
<intent-filter>
<action android:name="android.settings.FACE_SETTINGS" />
@@ -672,6 +673,7 @@
android:label="@string/security_settings_face_preference_title"
android:exported="false"
android:icon="@drawable/ic_face_header"
android:configChanges="orientation|screenSize"
android:taskAffinity="com.android.settings.root">
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.biometrics.face.FaceSettings" />

View File

@@ -52,9 +52,26 @@ public class Settings extends SettingsActivity {
public static class AssistGestureSettingsActivity extends SettingsActivity { /* empty */}
public static class BluetoothSettingsActivity extends SettingsActivity { /* empty */ }
public static class CreateShortcutActivity extends SettingsActivity { /* empty */ }
public static class FaceSettingsActivity extends SettingsActivity { /* empty */ }
public static class FaceSettingsActivity extends SettingsActivity {
@Override
protected void onCreate(Bundle savedState) {
setTheme(SetupWizardUtils.getTheme(this, getIntent()));
setTheme(R.style.SettingsPreferenceTheme_SetupWizard);
ThemeHelper.trySetDynamicColor(this);
super.onCreate(savedState);
}
}
/** Container for {@link FaceSettings} to use with a pre-defined task affinity. */
public static class FaceSettingsInternalActivity extends SettingsActivity { /* empty */ }
public static class FaceSettingsInternalActivity extends SettingsActivity {
@Override
protected void onCreate(Bundle savedState) {
setTheme(SetupWizardUtils.getTheme(this, getIntent()));
setTheme(R.style.SettingsPreferenceTheme_SetupWizard);
ThemeHelper.trySetDynamicColor(this);
super.onCreate(savedState);
}
}
public static class FingerprintSettingsActivity extends SettingsActivity { /* empty */ }
public static class CombinedBiometricSettingsActivity extends SettingsActivity { /* empty */ }
public static class CombinedBiometricProfileSettingsActivity extends SettingsActivity { /* empty */ }

View File

@@ -0,0 +1,70 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.settings.biometrics.face;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy;
import android.content.res.Resources;
import android.os.Bundle;
import com.android.settings.Settings;
import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.android.controller.ActivityController;
@RunWith(RobolectricTestRunner.class)
public class FaceSettingsActivityTest {
private static final String APPLIED_SETUP_WIZARD_THEME = "SettingsPreferenceTheme.SetupWizard";
private Settings.FaceSettingsActivity mActivity;
private Resources.Theme mTheme;
@Before
public void setUp() {
FakeFeatureFactory.setupForTest();
mActivity = spy(Settings.FaceSettingsActivity.class);
}
@Test
public void verifyFaceSettingsActivity_shouldAppliedSetupWizardTheme() {
createActivity();
assertThat(isThemeApplied(APPLIED_SETUP_WIZARD_THEME)).isTrue();
}
private boolean isThemeApplied(String themeName) {
final String [] appliedThemes = mTheme.getTheme();
for (String theme : appliedThemes) {
if (theme.contains(themeName)) {
return true;
}
}
return false;
}
private void createActivity() {
ActivityController.of(mActivity).create(new Bundle());
mTheme = mActivity.getTheme();
}
}