From 2583a7bffc5d53a5ae80df893dbda6b06410b168 Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Mon, 16 Apr 2018 13:09:03 +0900 Subject: [PATCH 01/22] Use the SSID of the network in the no internet dialog Bug: 77865258 Test: manual & roboelectric Change-Id: I72f1f74bf004f30a2c38b4c3af977ff09360d1e8 --- src/com/android/settings/wifi/WifiNoInternetDialog.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/wifi/WifiNoInternetDialog.java b/src/com/android/settings/wifi/WifiNoInternetDialog.java index 6b7b2db26be..b175665a943 100644 --- a/src/com/android/settings/wifi/WifiNoInternetDialog.java +++ b/src/com/android/settings/wifi/WifiNoInternetDialog.java @@ -25,6 +25,7 @@ import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.NetworkRequest; +import android.net.wifi.WifiInfo; import android.os.Bundle; import android.provider.Settings; import android.util.Log; @@ -107,14 +108,15 @@ public final class WifiNoInternetDialog extends AlertActivity implements mCM.registerNetworkCallback(request, mNetworkCallback); final NetworkInfo ni = mCM.getNetworkInfo(mNetwork); - if (ni == null || !ni.isConnectedOrConnecting()) { + final NetworkCapabilities nc = mCM.getNetworkCapabilities(mNetwork); + if (ni == null || !ni.isConnectedOrConnecting() || nc == null) { Log.d(TAG, "Network " + mNetwork + " is not connected: " + ni); finish(); return; } - mNetworkName = ni.getExtraInfo(); + mNetworkName = nc.getSSID(); if (mNetworkName != null) { - mNetworkName = mNetworkName.replaceAll("^\"|\"$", ""); // Remove double quotes + mNetworkName = WifiInfo.removeDoubleQuotes(mNetworkName); } createDialog(); From 35015741b28bf4fc8b47e10b4727301ae8f72454 Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Tue, 17 Jul 2018 15:05:26 -0700 Subject: [PATCH 02/22] Hook up anomaly active hour to BatteryTipPolicy So we can control it from server side. Bug: 80192137 Test: RunSettingsRoboTests Change-Id: Ic9a4db44029bdcd7e45f4f9fb6b7d71c8c07c429 --- .../fuelgauge/batterytip/BatteryTipPolicy.java | 11 +++++++++++ .../batterytip/detectors/RestrictAppDetector.java | 5 +++-- .../fuelgauge/batterytip/BatteryTipPolicyTest.java | 5 ++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java index 22c90e38845..4bd8cd73c9f 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java @@ -40,6 +40,7 @@ public class BatteryTipPolicy { private static final String KEY_HIGH_USAGE_PERIOD_MS = "high_usage_period_ms"; private static final String KEY_HIGH_USAGE_BATTERY_DRAINING = "high_usage_battery_draining"; private static final String KEY_APP_RESTRICTION_ENABLED = "app_restriction_enabled"; + private static final String KEY_APP_RESTRICTION_ACTIVE_HOUR = "app_restriction_active_hour"; private static final String KEY_REDUCED_BATTERY_ENABLED = "reduced_battery_enabled"; private static final String KEY_REDUCED_BATTERY_PERCENT = "reduced_battery_percent"; private static final String KEY_LOW_BATTERY_ENABLED = "low_battery_enabled"; @@ -118,6 +119,15 @@ public class BatteryTipPolicy { */ public final boolean appRestrictionEnabled; + /** + * Period(hour) to show anomaly apps. If it is 24 hours, it means only show anomaly apps + * happened in last 24 hours. + * + * @see Settings.Global#BATTERY_TIP_CONSTANTS + * @see #KEY_APP_RESTRICTION_ACTIVE_HOUR + */ + public final int appRestrictionActiveHour; + /** * {@code true} if reduced battery tip is enabled * @@ -228,6 +238,7 @@ public class BatteryTipPolicy { Duration.ofHours(2).toMillis()); highUsageBatteryDraining = mParser.getInt(KEY_HIGH_USAGE_BATTERY_DRAINING, 25); appRestrictionEnabled = mParser.getBoolean(KEY_APP_RESTRICTION_ENABLED, true); + appRestrictionActiveHour = mParser.getInt(KEY_APP_RESTRICTION_ACTIVE_HOUR, 24); reducedBatteryEnabled = mParser.getBoolean(KEY_REDUCED_BATTERY_ENABLED, false); reducedBatteryPercent = mParser.getInt(KEY_REDUCED_BATTERY_PERCENT, 50); lowBatteryEnabled = mParser.getBoolean(KEY_LOW_BATTERY_ENABLED, true); diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetector.java index bda0073ab85..7a0a2723bd4 100644 --- a/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetector.java +++ b/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetector.java @@ -31,6 +31,7 @@ import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; import androidx.annotation.VisibleForTesting; @@ -63,8 +64,8 @@ public class RestrictAppDetector implements BatteryTipDetector { return getFakeData(); } if (mPolicy.appRestrictionEnabled) { - // TODO(b/80192137): hook up the query timestamp to server side - final long oneDayBeforeMs = System.currentTimeMillis() - DateUtils.DAY_IN_MILLIS; + final long oneDayBeforeMs = System.currentTimeMillis() + - TimeUnit.HOURS.toMillis(mPolicy.appRestrictionActiveHour); final List highUsageApps = BatteryTipUtils.detectAnomalies(mContext, oneDayBeforeMs); if (!highUsageApps.isEmpty()) { diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java index 547e0eb455f..053a7164345 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java @@ -49,7 +49,8 @@ public class BatteryTipPolicyTest { + ",test_battery_saver_tip=true" + ",test_high_usage_tip=false" + ",test_smart_battery_tip=true" - + ",test_low_battery_tip=true"; + + ",test_low_battery_tip=true" + + ",app_restriction_active_hour=6"; private Context mContext; @Before @@ -72,6 +73,7 @@ public class BatteryTipPolicyTest { assertThat(batteryTipPolicy.highUsagePeriodMs).isEqualTo(2000); assertThat(batteryTipPolicy.highUsageBatteryDraining).isEqualTo(30); assertThat(batteryTipPolicy.appRestrictionEnabled).isTrue(); + assertThat(batteryTipPolicy.appRestrictionActiveHour).isEqualTo(6); assertThat(batteryTipPolicy.reducedBatteryEnabled).isTrue(); assertThat(batteryTipPolicy.reducedBatteryPercent).isEqualTo(30); assertThat(batteryTipPolicy.lowBatteryEnabled).isFalse(); @@ -99,6 +101,7 @@ public class BatteryTipPolicyTest { assertThat(batteryTipPolicy.highUsagePeriodMs).isEqualTo(2 * DateUtils.HOUR_IN_MILLIS); assertThat(batteryTipPolicy.highUsageBatteryDraining).isEqualTo(25); assertThat(batteryTipPolicy.appRestrictionEnabled).isTrue(); + assertThat(batteryTipPolicy.appRestrictionActiveHour).isEqualTo(24); assertThat(batteryTipPolicy.reducedBatteryEnabled).isFalse(); assertThat(batteryTipPolicy.reducedBatteryPercent).isEqualTo(50); assertThat(batteryTipPolicy.lowBatteryEnabled).isTrue(); From 9b5020c1d27ef959fe4a77254db4b21a855d3409 Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Wed, 18 Jul 2018 10:49:13 +0800 Subject: [PATCH 03/22] Fix a test broken by fragment migration. Change-Id: I68e4f9b53d3492817ea9416fd4127fbe15337ce6 Fixes: 111193572 Test: robotests --- .../android/settings/password/ConfirmCredentialTest.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java b/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java index 636248a07af..37c972a7fa5 100644 --- a/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java +++ b/tests/robotests/src/com/android/settings/password/ConfirmCredentialTest.java @@ -20,25 +20,20 @@ import static com.google.common.truth.Truth.assertThat; import com.android.settings.password.ConfirmDeviceCredentialBaseFragment.LastTryDialog; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.testutils.shadow.SettingsShadowResources; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; -import org.robolectric.annotation.Config; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; @RunWith(SettingsRobolectricTestRunner.class) -@Config(shadows = SettingsShadowResources.SettingsShadowTheme.class) public class ConfirmCredentialTest { @Test - @Ignore("b/111193572") public void testLastTryDialogShownExactlyOnce() { FragmentManager fm = Robolectric.buildActivity(FragmentActivity.class). - get().getSupportFragmentManager(); + setup().get().getSupportFragmentManager(); // Launch only one instance at a time. assertThat(LastTryDialog.show( From 0810afee9b9faaaa718856df68110577f34f47f2 Mon Sep 17 00:00:00 2001 From: Raff Tsai Date: Tue, 17 Jul 2018 09:59:58 +0800 Subject: [PATCH 04/22] Fix AlertDialog corner and color accent - Add some attributes in Theme.AlertDialog Change-Id: Ifb9ca98ee11f6c82cda4a576d10b5fde54f788be Fixes: 110917586 Test: mannual --- res/values/themes.xml | 8 +++- .../shadow/SettingsShadowTypedArray.java | 47 +++++++++++++++++++ .../settings/wifi/WifiDialogActivityTest.java | 11 +++-- 3 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowTypedArray.java diff --git a/res/values/themes.xml b/res/values/themes.xml index b3de0ae5a9b..d54f11113d1 100644 --- a/res/values/themes.xml +++ b/res/values/themes.xml @@ -46,7 +46,7 @@ @drawable/preference_background - @style/Theme.AppCompat.DayNight.Dialog.Alert + @style/Theme.AlertDialog @style/LockPatternStyle.Setup @@ -106,11 +106,15 @@ adjustResize - From 171e14eec9c38816777d9e7cf39b5e5b706455ba Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 20 Jul 2018 12:56:39 -0700 Subject: [PATCH 17/22] Remove ref to tile.remoteView, which is no longer used Bug: 77600770 Test: rebuild Change-Id: If0fdd67dd3098d063584acaf2b262a04c209a569 --- .../settings/core/SettingsBaseActivity.java | 7 +++---- .../settings/dashboard/DashboardData.java | 17 ++++------------- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/src/com/android/settings/core/SettingsBaseActivity.java b/src/com/android/settings/core/SettingsBaseActivity.java index 2cce467291b..967269476ad 100644 --- a/src/com/android/settings/core/SettingsBaseActivity.java +++ b/src/com/android/settings/core/SettingsBaseActivity.java @@ -35,15 +35,14 @@ import android.view.Window; import android.view.WindowManager.LayoutParams; import android.widget.Toolbar; +import androidx.fragment.app.FragmentActivity; + import com.android.settings.R; import com.android.settingslib.drawer.CategoryManager; -import com.android.settingslib.drawer.TileUtils; import java.util.ArrayList; import java.util.List; -import androidx.fragment.app.FragmentActivity; - public class SettingsBaseActivity extends FragmentActivity { protected static final boolean DEBUG_TIMING = false; @@ -174,7 +173,7 @@ public class SettingsBaseActivity extends FragmentActivity { } public String getSettingPkg() { - return TileUtils.SETTING_PKG; + return CategoryManager.SETTING_PKG; } public interface CategoryListener { diff --git a/src/com/android/settings/dashboard/DashboardData.java b/src/com/android/settings/dashboard/DashboardData.java index 9f66731e245..182d79b6227 100644 --- a/src/com/android/settings/dashboard/DashboardData.java +++ b/src/com/android/settings/dashboard/DashboardData.java @@ -20,6 +20,9 @@ import android.graphics.drawable.Drawable; import android.service.settings.suggestions.Suggestion; import android.text.TextUtils; +import androidx.annotation.VisibleForTesting; +import androidx.recyclerview.widget.DiffUtil; + import com.android.settings.R; import com.android.settings.dashboard.conditional.Condition; import com.android.settingslib.drawer.DashboardCategory; @@ -31,9 +34,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; -import androidx.annotation.VisibleForTesting; -import androidx.recyclerview.widget.DiffUtil; - /** * Description about data list used in the DashboardAdapter. In the data list each item can be * Condition, suggestion or category tile. @@ -411,16 +411,7 @@ public class DashboardData { && TextUtils.equals(localTile.summary, targetTile.summary); case TYPE_SUGGESTION_CONTAINER: case TYPE_CONDITION_CONTAINER: - // If entity is suggestion and contains remote view, force refresh - final List entities = (List) entity; - if (!entities.isEmpty()) { - Object firstEntity = entities.get(0); - if (firstEntity instanceof Tile - && ((Tile) firstEntity).remoteViews != null) { - return false; - } - } - // Otherwise Fall through to default + // Fall through to default default: return entity == null ? targetItem.entity == null : entity.equals(targetItem.entity); From 09f527d0539c7489224647263ea673d251db3750 Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Thu, 19 Jul 2018 13:53:27 -0700 Subject: [PATCH 18/22] Fix battery animation not being played. - VideoPreference now checks the view visible flag to see if it should start playing the video when the surface texture is being updated. Added a default controller for the VideoPreference to update the view visible flag of the VideoPrefernece when the setting page is paused/resumed accordingly. - add the default controller to the adaptive battery video and the adaptive brightness video. Change-Id: I1aae2148c27c7157c97541346790542c74377e5a Fixes: 111103815 Test: make RunSettingsRoboTests --- res/xml/auto_brightness_detail.xml | 4 +- res/xml/smart_battery_detail.xml | 4 +- .../widget/VideoPreferenceController.java | 64 ++++++++++++++++ .../widget/VideoPreferenceControllerTest.java | 76 +++++++++++++++++++ 4 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 src/com/android/settings/widget/VideoPreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/widget/VideoPreferenceControllerTest.java diff --git a/res/xml/auto_brightness_detail.xml b/res/xml/auto_brightness_detail.xml index 8b683f1bb16..b10f1ad04b0 100644 --- a/res/xml/auto_brightness_detail.xml +++ b/res/xml/auto_brightness_detail.xml @@ -23,8 +23,10 @@ + settings:preview="@drawable/aab_brightness" + settings:controller="com.android.settings.widget.VideoPreferenceController"/> + settings:preview="@drawable/auto_awesome_battery" + settings:controller="com.android.settings.widget.VideoPreferenceController"/> Date: Fri, 20 Jul 2018 14:40:54 -0700 Subject: [PATCH 19/22] Hide lock screen display in search if it's not in Settings Change-Id: Iacf16eb947a679e08a6c55e0764416cd53cac2e7 Fixes: 111641373 Test: robotests --- .../security/LockscreenDashboardFragment.java | 11 ++++++++-- .../LockscreenDashboardFragmentTest.java | 22 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java index e2147209eac..71130ea5350 100644 --- a/src/com/android/settings/security/LockscreenDashboardFragment.java +++ b/src/com/android/settings/security/LockscreenDashboardFragment.java @@ -19,6 +19,8 @@ package com.android.settings.security; import android.content.Context; import android.provider.SearchIndexableResource; +import androidx.annotation.VisibleForTesting; + import com.android.internal.hardware.AmbientDisplayConfiguration; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; @@ -29,6 +31,7 @@ import com.android.settings.gestures.DoubleTapScreenPreferenceController; import com.android.settings.gestures.PickupGesturePreferenceController; import com.android.settings.notification.LockScreenNotificationPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.security.screenlock.LockScreenPreferenceController; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.search.SearchIndexable; @@ -37,8 +40,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import androidx.annotation.VisibleForTesting; - /** * Settings screen for lock screen preference */ @@ -157,5 +158,11 @@ public class LockscreenDashboardFragment extends DashboardFragment niks.add(KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE_HEADER); return niks; } + + @Override + protected boolean isPageSearchEnabled(Context context) { + return new LockScreenPreferenceController(context, "anykey") + .isAvailable(); + } }; } diff --git a/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java index 173f56b01d8..7e8c0d52202 100644 --- a/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java @@ -17,17 +17,22 @@ package com.android.settings.security; import static com.google.common.truth.Truth.assertThat; + import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.content.Context; +import com.android.internal.widget.LockPatternUtils; import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController; import com.android.settings.display.AmbientDisplayNotificationsPreferenceController; import com.android.settings.gestures.DoubleTapScreenPreferenceController; import com.android.settings.gestures.PickupGesturePreferenceController; +import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.XmlTestUtils; import com.android.settings.testutils.shadow.ShadowLockPatternUtils; @@ -37,6 +42,7 @@ import com.android.settingslib.core.AbstractPreferenceController; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; @@ -49,12 +55,18 @@ import java.util.List; }) public class LockscreenDashboardFragmentTest { + @Mock + private LockPatternUtils mLockPatternUtils; + private FakeFeatureFactory mFeatureFactory; private TestFragment mTestFragment; private Context mContext; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); + mFeatureFactory = FakeFeatureFactory.setupForTest(); + when(mFeatureFactory.securityFeatureProvider.getLockPatternUtils(any(Context.class))) + .thenReturn(mLockPatternUtils); mContext = RuntimeEnvironment.application; mTestFragment = spy(new TestFragment()); } @@ -112,6 +124,16 @@ public class LockscreenDashboardFragmentTest { verify(controller).setConfig(any()); } + @Test + public void isPageSearchable_notLocked_shouldNotBeSearchable() { + when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false); + when(mLockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(true); + + assertThat(LockscreenDashboardFragment.SEARCH_INDEX_DATA_PROVIDER + .getNonIndexableKeys(mContext)) + .contains("security_lockscreen_settings_screen"); + } + public static class TestFragment extends LockscreenDashboardFragment { @Override protected T use(Class clazz) { From e7c3ca0e2ebde28b98847d1a21a6aa64fb4a973e Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 20 Jul 2018 15:34:13 -0700 Subject: [PATCH 20/22] Request lock screen message focus and limit character limit Change-Id: I78594d03ae5430f63e46cb97e2413c1c4bf60d8a Fixes: 111577594 Test: manual --- res/layout/ownerinfo.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/res/layout/ownerinfo.xml b/res/layout/ownerinfo.xml index 29e08402158..42d3e03e98b 100644 --- a/res/layout/ownerinfo.xml +++ b/res/layout/ownerinfo.xml @@ -29,7 +29,9 @@ android:gravity="top" android:hint="@string/owner_info_settings_edit_text_hint" android:inputType="textMultiLine|textCapSentences" - /> + android:maxLength="140"> + + From 836b777fa5a847e48adf807b54493e844c476e13 Mon Sep 17 00:00:00 2001 From: Ian Pedowitz Date: Fri, 20 Jul 2018 16:37:07 -0700 Subject: [PATCH 21/22] Remove the character limit This could cause existing messages to get clipped Effectively reverting part of e7c3ca0e2ebde28b98847d1a21a6aa64fb4a973e Bug: 111577594 Test: None, is a revert of this config Change-Id: Ifaa8c9674db3c6865b3b59fcd254bb3e2b20a5f5 --- res/layout/ownerinfo.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/res/layout/ownerinfo.xml b/res/layout/ownerinfo.xml index 42d3e03e98b..18ac461ee24 100644 --- a/res/layout/ownerinfo.xml +++ b/res/layout/ownerinfo.xml @@ -28,8 +28,7 @@ android:minHeight="@dimen/min_tap_target_size" android:gravity="top" android:hint="@string/owner_info_settings_edit_text_hint" - android:inputType="textMultiLine|textCapSentences" - android:maxLength="140"> + android:inputType="textMultiLine|textCapSentences"> From 074fe1e473f86d1a8e08017cb47aa3a056a3c85b Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Fri, 20 Jul 2018 17:19:39 -0700 Subject: [PATCH 22/22] Fix settings crash after androidx refactoring Fixes: 111701576 Change-Id: I095d4837e7a34fb9f240f2a302b5c6f7d1142db9 Fixes: 111701576 --- .../android/settings/biometrics/BiometricsEnrollEnrolling.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java b/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java index ec7d12084c6..f10103877da 100644 --- a/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java +++ b/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java @@ -109,7 +109,8 @@ public abstract class BiometricsEnrollEnrolling extends BiometricEnrollBase .findFragmentByTag(TAG_SIDECAR); if (mSidecar == null) { mSidecar = getSidecar(); - getSupportFragmentManager().beginTransaction().add(mSidecar, TAG_SIDECAR).commit(); + getSupportFragmentManager().beginTransaction().add(mSidecar, TAG_SIDECAR) + .commitAllowingStateLoss(); } mSidecar.setListener(this); }