From a26381aa85cf16b56b0cff181771aa3812ca6611 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wilczy=C5=84ski?= Date: Fri, 22 Apr 2022 09:41:37 +0000 Subject: [PATCH 1/7] Notify about brightness change when screen turns on Bug: 216419091 Test: ROBOTEST_FILTER=BrightnessLevelPreferenceControllerTest m -j RunSettingsRoboTests Change-Id: I35f4b81b325a7275ad7391aa631d183ddcbd8fe3 --- .../BrightnessLevelPreferenceController.java | 1 + .../BrightnessLevelPreferenceControllerTest.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/com/android/settings/display/BrightnessLevelPreferenceController.java b/src/com/android/settings/display/BrightnessLevelPreferenceController.java index 171f4261561..2d549fcd2a9 100644 --- a/src/com/android/settings/display/BrightnessLevelPreferenceController.java +++ b/src/com/android/settings/display/BrightnessLevelPreferenceController.java @@ -141,6 +141,7 @@ public class BrightnessLevelPreferenceController extends AbstractPreferenceContr mContentResolver.registerContentObserver(BRIGHTNESS_ADJ_URI, false, mBrightnessObserver); mDisplayManager.registerDisplayListener(mDisplayListener, mHandler, DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS); + updatedSummary(mPreference); } @Override diff --git a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java index c2a8611ec02..82c6b709076 100644 --- a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java @@ -135,6 +135,21 @@ public class BrightnessLevelPreferenceControllerTest { System.getUriFor(System.SCREEN_AUTO_BRIGHTNESS_ADJ))).isEmpty(); } + @Test + public void onStart_shouldSetSummary() { + BrightnessLevelPreferenceController controller = + new BrightnessLevelPreferenceController(mContext, null); + controller.displayPreference(mScreen); + + controller.onStop(); + when(mDisplay.getBrightnessInfo()).thenReturn( + new BrightnessInfo(0.5f, 0.0f, 1.0f, BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF, + 0.5f, BrightnessInfo.BRIGHTNESS_MAX_REASON_NONE)); + controller.onStart(); + + verify(mPreference).setSummary("87%"); + } + @Test public void updateState_inVrMode_shouldSetSummaryToVrBrightness() { doReturn(true).when(mController).isInVrMode(); From 28c0d90491d58af05535d39aa7ac6515954d2a94 Mon Sep 17 00:00:00 2001 From: Joshua McCloskey Date: Thu, 2 Jun 2022 22:55:53 +0000 Subject: [PATCH 2/7] Clear FP error only on progress. Test: Manually verified progress is cleared only when the user makes progress on fp enrollment. Fixes: 234094887 Change-Id: I173d2edb94132a4f68e0ef90aa9fa8008a25236f --- .../biometrics/fingerprint/FingerprintEnrollEnrolling.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java index 98210b3babb..df65a69c7c6 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java @@ -508,7 +508,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { public void onEnrollmentProgressChange(int steps, int remaining) { updateProgress(true /* animate */); updateTitleAndDescription(); - clearError(); animateFlash(); if (!mCanAssumeUdfps) { mErrorText.removeCallbacks(mTouchAgainRunnable); @@ -537,6 +536,11 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { int progress = getProgress( mSidecar.getEnrollmentSteps(), mSidecar.getEnrollmentRemaining()); + // Only clear the error when progress has been made. + // TODO (b/234772728) Add tests. + if (mProgressBar != null && mProgressBar.getProgress() < progress) { + clearError(); + } if (animate) { animateProgress(progress); } else { From 64430ba2d2267d106c685ed3222dde12f8632911 Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Thu, 2 Jun 2022 19:02:12 +0800 Subject: [PATCH 3/7] Unable to enable the removable esim When the user enable the removable esim, the settings select wrong slot(esim slot). The slot shold be the removable + esim slot and the UiccCardInfo's cardId is the same as the removable esim's cardId. Bug: 233170453 Bug: 233338345 Test: atest UiccSlotUtilTest Change-Id: Ibd324b781c84318c994e3742bb82e1d1393b94e4 --- .../settings/network/SubscriptionUtil.java | 2 +- .../SwitchToEuiccSubscriptionSidecar.java | 85 +++++++++++++++---- .../settings/network/UiccSlotUtil.java | 23 ++++- .../settings/network/UiccSlotUtilTest.java | 77 +++++++++++++++-- 4 files changed, 159 insertions(+), 28 deletions(-) diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java index 1ba05025778..0bba86fafed 100644 --- a/src/com/android/settings/network/SubscriptionUtil.java +++ b/src/com/android/settings/network/SubscriptionUtil.java @@ -479,7 +479,7 @@ public class SubscriptionUtil { .stream() .filter(subInfo -> subInfo.getSubscriptionId() == subId) .findFirst() - .get(); + .orElse(null); } /** diff --git a/src/com/android/settings/network/SwitchToEuiccSubscriptionSidecar.java b/src/com/android/settings/network/SwitchToEuiccSubscriptionSidecar.java index 935e235aeaf..4eee6053da8 100644 --- a/src/com/android/settings/network/SwitchToEuiccSubscriptionSidecar.java +++ b/src/com/android/settings/network/SwitchToEuiccSubscriptionSidecar.java @@ -21,6 +21,8 @@ import android.app.PendingIntent; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.UiccCardInfo; +import android.telephony.UiccPortInfo; +import android.telephony.UiccSlotInfo; import android.telephony.UiccSlotMapping; import android.telephony.euicc.EuiccManager; import android.util.Log; @@ -28,6 +30,8 @@ import android.util.Log; import com.android.settings.SidecarFragment; import com.android.settings.network.telephony.EuiccOperationSidecar; +import com.google.common.collect.ImmutableList; + import java.util.Collection; import java.util.Comparator; import java.util.List; @@ -44,6 +48,7 @@ public class SwitchToEuiccSubscriptionSidecar extends EuiccOperationSidecar { private int mPort; private SubscriptionInfo mRemovedSubInfo; private boolean mIsDuringSimSlotMapping; + private List mActiveSubInfos; /** Returns a SwitchToEuiccSubscriptionSidecar sidecar instance. */ public static SwitchToEuiccSubscriptionSidecar get(FragmentManager fm) { @@ -87,6 +92,10 @@ public class SwitchToEuiccSubscriptionSidecar extends EuiccOperationSidecar { setState(State.RUNNING, Substate.UNUSED); mCallbackIntent = createCallbackIntent(); mSubId = subscriptionId; + SubscriptionManager subscriptionManager = getContext().getSystemService( + SubscriptionManager.class); + mActiveSubInfos = SubscriptionUtil.getActiveSubscriptions(subscriptionManager); + int targetSlot = getTargetSlot(); if (targetSlot < 0) { Log.d(TAG, "There is no esim, the TargetSlot is " + targetSlot); @@ -99,15 +108,29 @@ public class SwitchToEuiccSubscriptionSidecar extends EuiccOperationSidecar { mPort = (port < 0) ? getTargetPortId(targetSlot, removedSubInfo) : port; mRemovedSubInfo = removedSubInfo; Log.d(TAG, - String.format("set esim into the SubId%d Slot%d:Port%d", + String.format("set esim into the SubId%d Physical Slot%d:Port%d", mSubId, targetSlot, mPort)); - - if (mTelephonyManager.isMultiSimEnabled() && removedSubInfo != null - && removedSubInfo.isEmbedded()) { - // In DSDS mode+MEP, if the replaced esim is active, then it should be disabled esim - // profile before changing SimSlotMapping process. - // Use INVALID_SUBSCRIPTION_ID to disable the esim profile. - // The SimSlotMapping is ready, then to execute activate/inactivate esim. + if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + // If the subId is INVALID_SUBSCRIPTION_ID, disable the esim (the default esim slot + // which is selected by the framework). + switchToSubscription(); + } else if ((mTelephonyManager.isMultiSimEnabled() && removedSubInfo != null + && removedSubInfo.isEmbedded()) + || isEsimEnabledAtTargetSlotPort(targetSlot, mPort)) { + // Case1: In DSDS mode+MEP, if the replaced esim is active, then the replaced esim + // should be disabled before changing SimSlotMapping process. + // + // Case2: If the user enables the esimA on the target slot:port and the target + // slot:port is active and there is an active esimB on target slot:port, then the + // settings disables the esimB before the settings enables the esimA on the + // target slot:port. + // + // Step: + // 1. disables the replaced esim. + // 2. switches the SimSlotMapping if the target slot port is not active. + // 3. enables the target esim. + // Note: Use INVALID_SUBSCRIPTION_ID to disable the esim profile. + Log.d(TAG, "disable the enabled esim before the settings enables the target esim"); mIsDuringSimSlotMapping = true; mEuiccManager.switchToSubscription(SubscriptionManager.INVALID_SUBSCRIPTION_ID, mPort, mCallbackIntent); @@ -117,8 +140,8 @@ public class SwitchToEuiccSubscriptionSidecar extends EuiccOperationSidecar { } private int getTargetPortId(int physicalEsimSlotIndex, SubscriptionInfo removedSubInfo) { - if (!isMultipleEnabledProfilesSupported()) { - Log.d(TAG, "The device is no MEP, port is 0"); + if (!isMultipleEnabledProfilesSupported(physicalEsimSlotIndex)) { + Log.d(TAG, "The slotId" + physicalEsimSlotIndex + " is no MEP, port is 0"); return 0; } @@ -150,11 +173,12 @@ public class SwitchToEuiccSubscriptionSidecar extends EuiccOperationSidecar { // port is 0. int port = 0; - SubscriptionManager subscriptionManager = getContext().getSystemService( - SubscriptionManager.class); + if(mActiveSubInfos == null){ + Log.d(TAG, "mActiveSubInfos is null."); + return port; + } List activeEsimSubInfos = - SubscriptionUtil.getActiveSubscriptions(subscriptionManager) - .stream() + mActiveSubInfos.stream() .filter(i -> i.isEmbedded()) .sorted(Comparator.comparingInt(SubscriptionInfo::getPortIndex)) .collect(Collectors.toList()); @@ -167,7 +191,31 @@ public class SwitchToEuiccSubscriptionSidecar extends EuiccOperationSidecar { } private int getTargetSlot() { - return UiccSlotUtil.getEsimSlotId(getContext()); + return UiccSlotUtil.getEsimSlotId(getContext(), mSubId); + } + + private boolean isEsimEnabledAtTargetSlotPort(int physicalSlotIndex, int portIndex) { + int logicalSlotId = getLogicalSlotIndex(physicalSlotIndex, portIndex); + if (logicalSlotId == SubscriptionManager.INVALID_SIM_SLOT_INDEX) { + return false; + } + return mActiveSubInfos != null + && mActiveSubInfos.stream() + .anyMatch(i -> i.isEmbedded() && i.getSimSlotIndex() == logicalSlotId); + } + + private int getLogicalSlotIndex(int physicalSlotIndex, int portIndex) { + ImmutableList slotInfos = UiccSlotUtil.getSlotInfos(mTelephonyManager); + if (slotInfos != null && physicalSlotIndex >= 0 && physicalSlotIndex < slotInfos.size() + && slotInfos.get(physicalSlotIndex) != null) { + for (UiccPortInfo portInfo : slotInfos.get(physicalSlotIndex).getPorts()) { + if (portInfo.getPortIndex() == portIndex) { + return portInfo.getLogicalSlotIndex(); + } + } + } + + return SubscriptionManager.INVALID_SIM_SLOT_INDEX; } private void onSwitchSlotSidecarStateChange() { @@ -185,14 +233,15 @@ public class SwitchToEuiccSubscriptionSidecar extends EuiccOperationSidecar { } } - private boolean isMultipleEnabledProfilesSupported() { + private boolean isMultipleEnabledProfilesSupported(int physicalEsimSlotIndex) { List cardInfos = mTelephonyManager.getUiccCardsInfo(); if (cardInfos == null) { Log.w(TAG, "UICC cards info list is empty."); return false; } - return cardInfos.stream().anyMatch( - cardInfo -> cardInfo.isMultipleEnabledProfilesSupported()); + return cardInfos.stream() + .anyMatch(cardInfo -> cardInfo.getPhysicalSlotIndex() == physicalEsimSlotIndex + && cardInfo.isMultipleEnabledProfilesSupported()); } private void switchToSubscription() { diff --git a/src/com/android/settings/network/UiccSlotUtil.java b/src/com/android/settings/network/UiccSlotUtil.java index c9c52cb5c99..7ba2e0f8ed0 100644 --- a/src/com/android/settings/network/UiccSlotUtil.java +++ b/src/com/android/settings/network/UiccSlotUtil.java @@ -22,11 +22,13 @@ import android.provider.Settings; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; +import android.telephony.UiccCardInfo; import android.telephony.UiccSlotInfo; import android.telephony.UiccSlotMapping; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.telephony.uicc.UiccController; import com.android.settingslib.utils.ThreadUtils; import com.google.common.collect.ImmutableList; @@ -36,6 +38,7 @@ import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; +import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -183,9 +186,27 @@ public class UiccSlotUtil { * @param context the application context. * @return the esim slot. If the value is -1, there is not the esim. */ - public static int getEsimSlotId(Context context) { + public static int getEsimSlotId(Context context, int subId) { TelephonyManager telMgr = context.getSystemService(TelephonyManager.class); + List uiccCardInfos = telMgr.getUiccCardsInfo(); ImmutableList slotInfos = UiccSlotUtil.getSlotInfos(telMgr); + SubscriptionManager subscriptionManager = context.getSystemService( + SubscriptionManager.class); + SubscriptionInfo subInfo = SubscriptionUtil.getSubById(subscriptionManager, subId); + + // checking whether this is the removable esim. If it is, then return the removable slot id. + if (subInfo != null && subInfo.isEmbedded()) { + for (UiccCardInfo uiccCardInfo : uiccCardInfos) { + if (uiccCardInfo.getCardId() == subInfo.getCardId() + && uiccCardInfo.getCardId() > TelephonyManager.UNSUPPORTED_CARD_ID + && uiccCardInfo.isEuicc() + && uiccCardInfo.isRemovable()) { + Log.d(TAG, "getEsimSlotId: This subInfo is removable esim."); + return uiccCardInfo.getPhysicalSlotIndex(); + } + } + } + int firstEsimSlot = IntStream.range(0, slotInfos.size()) .filter( index -> { diff --git a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java index 5aa73eaa308..526fc0c8d18 100644 --- a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java +++ b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java @@ -25,7 +25,9 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; +import android.telephony.UiccCardInfo; import android.telephony.UiccPortInfo; import android.telephony.UiccSlotInfo; import android.telephony.UiccSlotMapping; @@ -53,16 +55,24 @@ public class UiccSlotUtilTest { private Context mContext; @Mock private TelephonyManager mTelephonyManager; + @Mock + private SubscriptionManager mSubscriptionManager; private static final int ESIM_PHYSICAL_SLOT = 0; private static final int PSIM_PHYSICAL_SLOT = 1; + private List mSubscriptionInfoList = new ArrayList<>(); + private List mUiccCardInfo = new ArrayList<>(); @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(ApplicationProvider.getApplicationContext()); when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); + when(mTelephonyManager.getUiccCardsInfo()).thenReturn(mUiccCardInfo); + + when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager); + when(mSubscriptionManager.getAllSubscriptionInfoList()).thenReturn(mSubscriptionInfoList); } @Test @@ -88,15 +98,35 @@ public class UiccSlotUtilTest { public void getEsimSlotId_twoSimSlotsDeviceAndEsimIsSlot0_returnTheCorrectEsimSlot() { when(mTelephonyManager.getUiccSlotsInfo()).thenReturn( twoSimSlotsDeviceActiveEsimActivePsim()); - int testSlot = UiccSlotUtil.getEsimSlotId(mContext); + int testSlot = UiccSlotUtil.getEsimSlotId(mContext,0); assertThat(testSlot).isEqualTo(0); } + @Test - public void getEsimSlotId_twoSimSlotsDeviceAndRemovableEsimIsSlot1_returnTheCorrectEsimSlot() { + public void getEsimSlotId_simIsRemovableEsimAndRemovableEsimIsSlot1_returnRemovableEsimSlot1() { + int subId = 0; + int cardId = 0; + mSubscriptionInfoList.add(createSubscriptionInfo(subId,-1, -1, true, cardId)); + mUiccCardInfo.add(createUiccCardInfo(true, 3, 0, false, -1, -1)); + mUiccCardInfo.add(createUiccCardInfo(true, cardId, 1, true, -1, -1)); + when(mTelephonyManager.getUiccSlotsInfo()).thenReturn( + twoSimSlotsDeviceActiveEsimActiveRemovableEsim()); + int testSlot = UiccSlotUtil.getEsimSlotId(mContext, subId); + + assertThat(testSlot).isEqualTo(1); + } + + @Test + public void getEsimSlotId_simIsRemovableEsimAndTwoRemovableSlots_returnRemovableEsimSlot1() { + int subId = 0; + int cardId = 0; + mSubscriptionInfoList.add(createSubscriptionInfo(subId,-1, -1, true, cardId)); + mUiccCardInfo.add(createUiccCardInfo(false, 4, 0, true, -1, -1)); + mUiccCardInfo.add(createUiccCardInfo(true, cardId, 1, true, -1, -1)); when(mTelephonyManager.getUiccSlotsInfo()).thenReturn( twoSimSlotsDeviceActivePsimActiveRemovableEsim()); - int testSlot = UiccSlotUtil.getEsimSlotId(mContext); + int testSlot = UiccSlotUtil.getEsimSlotId(mContext, subId); assertThat(testSlot).isEqualTo(1); } @@ -105,7 +135,7 @@ public class UiccSlotUtilTest { public void getEsimSlotId_twoSimSlotsDeviceAndEsimIsSlot1_returnTheCorrectEsimSlot() { when(mTelephonyManager.getUiccSlotsInfo()).thenReturn( twoSimSlotsDeviceActivePsimActiveEsim()); - int testSlot = UiccSlotUtil.getEsimSlotId(mContext); + int testSlot = UiccSlotUtil.getEsimSlotId(mContext,0); assertThat(testSlot).isEqualTo(1); } @@ -114,7 +144,7 @@ public class UiccSlotUtilTest { public void getEsimSlotId_noEimSlotDevice_returnTheCorrectEsimSlot() { when(mTelephonyManager.getUiccSlotsInfo()).thenReturn( oneSimSlotDeviceActivePsim()); - int testSlot = UiccSlotUtil.getEsimSlotId(mContext); + int testSlot = UiccSlotUtil.getEsimSlotId(mContext,0); assertThat(testSlot).isEqualTo(-1); } @@ -620,13 +650,38 @@ public class UiccSlotUtilTest { } private SubscriptionInfo createSubscriptionInfo(int logicalSlotIndex, int portIndex) { + return createSubscriptionInfo(0, logicalSlotIndex, portIndex, true, 25); + } + + private SubscriptionInfo createSubscriptionInfo(int subId, int logicalSlotIndex, int portIndex, + boolean isEmbedded, int cardId) { return new SubscriptionInfo( - 0, "", logicalSlotIndex, "", "", 0, 0, "", 0, null, "", "", "", - true /* isEmbedded */, - null, "", 25, + subId, "", + logicalSlotIndex, "", "", 0, 0, "", 0, null, "", "", "", + isEmbedded /* isEmbedded */, + null, "", + cardId, false, null, false, 0, 0, 0, null, null, true, portIndex); } + private UiccCardInfo createUiccCardInfo(boolean isEuicc, int cardId, int physicalSlotIndex, + boolean isRemovable, int logicalSlotIndex, int portIndex) { + return new UiccCardInfo( + isEuicc /* isEuicc */, + cardId /* cardId */, + null /* eid */, + physicalSlotIndex /* physicalSlotIndex */, + isRemovable /* isRemovable */, + false /* isMultipleEnabledProfileSupported */, + Collections.singletonList( + new UiccPortInfo( + "123451234567890" /* iccId */, + portIndex /* portIdx */, + logicalSlotIndex /* logicalSlotIdx */, + true /* isActive */) + )); + } + private List createActiveSubscriptionInfoListOneSim(int logicalSlotIndex, int portIndex) { List subscriptionInfoList = new ArrayList<>(); @@ -737,6 +792,12 @@ public class UiccSlotUtilTest { createUiccSlotInfo(true, false, 1, true)}; } + private UiccSlotInfo[] twoSimSlotsDeviceActiveEsimActiveRemovableEsim() { + return new UiccSlotInfo[]{ + createUiccSlotInfo(true, false, 0, true), + createUiccSlotInfo(true, true, 1, true)}; + } + private UiccSlotInfo[] twoSimSlotsDeviceActivePsimActiveRemovableEsim() { return new UiccSlotInfo[]{ createUiccSlotInfo(false, true, 0, true), From 8514ff65eb32accd6f96ab4253007b2ce1ee7348 Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Wed, 8 Jun 2022 16:24:25 +0800 Subject: [PATCH 4/7] [Setting crash] The dialog is null Add the null protection. Bug: 235267673 Test: build pass Change-Id: Ib9308d152ddc233354d89166b8d79fcec81d8c19 --- src/com/android/settings/sim/PreferredSimDialogFragment.java | 5 +++++ .../settings/sim/SelectSpecificDataSimDialogFragment.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/com/android/settings/sim/PreferredSimDialogFragment.java b/src/com/android/settings/sim/PreferredSimDialogFragment.java index 6b5e2b50f73..806e04b35bb 100644 --- a/src/com/android/settings/sim/PreferredSimDialogFragment.java +++ b/src/com/android/settings/sim/PreferredSimDialogFragment.java @@ -88,6 +88,11 @@ public class PreferredSimDialogFragment extends SimDialogFragment implements return; } + if (dialog == null) { + Log.d(TAG, "Dialog is null."); + dismiss(); + } + final SubscriptionInfo info = getPreferredSubscription(); if (info == null) { dismiss(); diff --git a/src/com/android/settings/sim/SelectSpecificDataSimDialogFragment.java b/src/com/android/settings/sim/SelectSpecificDataSimDialogFragment.java index 1f8417737fb..a989d520c20 100644 --- a/src/com/android/settings/sim/SelectSpecificDataSimDialogFragment.java +++ b/src/com/android/settings/sim/SelectSpecificDataSimDialogFragment.java @@ -100,6 +100,11 @@ public class SelectSpecificDataSimDialogFragment extends SimDialogFragment imple return; } + if (dialog == null) { + Log.d(TAG, "Dialog is null."); + dismiss(); + } + SubscriptionInfo currentDataSubInfo = getDefaultDataSubInfo(); SubscriptionInfo newSubInfo = getNonDefaultDataSubscriptionInfo(currentDataSubInfo); From 548f6f36c1b3a6558a3dbb99ec451f602fd98238 Mon Sep 17 00:00:00 2001 From: Joshua McCloskey Date: Wed, 8 Jun 2022 01:06:12 +0000 Subject: [PATCH 5/7] Add functionality to restart fp enrollment. Test: Tested manually via SUW that restarting enrollment works as expected. Test: Tested manually via settings that restarting enrollment works as expected. Fixes: 234887288 Change-Id: I815392269da786d2dfd157267919a09281af6277 --- res/values/strings.xml | 6 +- .../fingerprint/FingerprintErrorDialog.java | 82 +++++++++++++++---- 2 files changed, 69 insertions(+), 19 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 1ac6437720d..343705fe232 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1121,6 +1121,8 @@ Name OK + + Try again Delete @@ -1277,9 +1279,9 @@ Touch the sensor on the back of your phone. Use your index finger. - Enrollment was not completed + Fingerprint setup timed out - Fingerprint enrollment time limit reached. Try again. + Try again now or set up your fingerprint later in Settings Fingerprint enrollment didn\'t work. Try again or use a different finger. diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java index a238119de87..cea44ba9720 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java @@ -16,20 +16,78 @@ package com.android.settings.biometrics.fingerprint; +import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED; +import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT; + +import android.app.Activity; +import android.app.Dialog; import android.app.settings.SettingsEnums; +import android.content.DialogInterface; +import android.hardware.biometrics.BiometricConstants; import android.hardware.fingerprint.FingerprintManager; import android.os.Bundle; +import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.FragmentManager; import com.android.settings.R; import com.android.settings.biometrics.BiometricEnrollBase; -import com.android.settings.biometrics.BiometricErrorDialog; +import com.android.settings.core.instrumentation.InstrumentedDialogFragment; + +/** Fingerprint error dialog, will be shown when an error occurs during fingerprint enrollment. */ +public class FingerprintErrorDialog extends InstrumentedDialogFragment { + + public static final String KEY_ERROR_MSG = "error_msg"; + public static final String KEY_ERROR_ID = "error_id"; + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + CharSequence errorString = getArguments().getCharSequence(KEY_ERROR_MSG); + final int errMsgId = getArguments().getInt(KEY_ERROR_ID); + boolean wasTimeout = errMsgId == BiometricConstants.BIOMETRIC_ERROR_TIMEOUT; + + builder.setTitle(R.string.security_settings_fingerprint_enroll_error_dialog_title) + .setMessage(errorString) + .setCancelable(false) + .setPositiveButton( + R.string.security_settings_fingerprint_enroll_dialog_ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + Activity activity = getActivity(); + activity.setResult(RESULT_FINISHED); + activity.finish(); + } + }); + if (wasTimeout) { + builder.setPositiveButton( + R.string.security_settings_fingerprint_enroll_dialog_try_again, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + getActivity().recreate(); + } + }) + .setNegativeButton( + R.string.security_settings_fingerprint_enroll_dialog_ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + Activity activity = getActivity(); + activity.setResult(RESULT_TIMEOUT); + activity.finish(); + } + }); + } + AlertDialog dialog = builder.create(); + dialog.setCanceledOnTouchOutside(false); + return dialog; + } -/** - * Fingerprint error dialog, will be shown when an error occurs during fingerprint enrollment. - */ -public class FingerprintErrorDialog extends BiometricErrorDialog { public static void showErrorDialog(BiometricEnrollBase host, int errMsgId) { if (host.isFinishing()) { return; @@ -48,8 +106,8 @@ public class FingerprintErrorDialog extends BiometricErrorDialog { private static int getErrorMessage(int errMsgId) { switch (errMsgId) { case FingerprintManager.FINGERPRINT_ERROR_TIMEOUT: - // This message happens when the underlying crypto layer decides to revoke the - // enrollment auth token. + // This message happens when the underlying crypto layer decides to revoke + // the enrollment auth token. return R.string.security_settings_fingerprint_enroll_error_timeout_dialog_message; case FingerprintManager.FINGERPRINT_ERROR_BAD_CALIBRATION: return R.string.security_settings_fingerprint_bad_calibration; @@ -68,16 +126,6 @@ public class FingerprintErrorDialog extends BiometricErrorDialog { return dialog; } - @Override - public int getTitleResId() { - return R.string.security_settings_fingerprint_enroll_error_dialog_title; - } - - @Override - public int getOkButtonTextResId() { - return R.string.security_settings_fingerprint_enroll_dialog_ok; - } - @Override public int getMetricsCategory() { return SettingsEnums.DIALOG_FINGERPINT_ERROR; From fe71b2e76c22349eaf732958d0193c60cee47ff7 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 8 Jun 2022 14:08:50 -0700 Subject: [PATCH 6/7] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I4111bd9a5feee6d6a8b5db7861d622ea893515e2 --- res/values-pa/arrays.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values-pa/arrays.xml b/res/values-pa/arrays.xml index 48f001a5aa7..55a86d1044f 100644 --- a/res/values-pa/arrays.xml +++ b/res/values-pa/arrays.xml @@ -372,7 +372,7 @@ "ਘੱਟ ਸਮੇਂ ਲਈ" - "ਔਸਤ" + "ਦਰਮਿਆਨੇ ਸਮੇਂ ਲਈ" "ਲੰਬੇ ਸਮੇਂ ਲਈ" From d98e53686392c5feb793798f61bd41e2586fd445 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 8 Jun 2022 14:12:47 -0700 Subject: [PATCH 7/7] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I650e4197e0aff594a172c01f04cffd4092b7467d --- res/values-af/strings.xml | 2 +- res/values-ar/strings.xml | 2 +- res/values-de/strings.xml | 4 ++-- res/values-es-rUS/strings.xml | 2 +- res/values-fa/strings.xml | 12 ++++++------ res/values-fr-rCA/strings.xml | 4 ++-- res/values-hi/strings.xml | 2 +- res/values-hr/strings.xml | 4 ++-- res/values-hy/strings.xml | 2 +- res/values-is/strings.xml | 4 ++-- res/values-kk/strings.xml | 4 ++-- res/values-ms/strings.xml | 2 +- res/values-pt-rPT/strings.xml | 2 +- res/values-ta/strings.xml | 2 +- 14 files changed, 24 insertions(+), 24 deletions(-) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 13cfeddf20e..2d7f6b71f94 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -852,7 +852,7 @@ "Geen toestelle beskikbaar nie" "Koppel" "Ontkoppel" - "Saambind en koppel" + "Bind saam en koppel" "Ontsaambind" "Ontkoppel en ontsaambind" "Opsies…" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index a1cbab9fbc7..e06d56b01d3 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -6106,7 +6106,7 @@ "معاينة" "اختيار شاشة استراحة" "إظهار معلومات إضافية" - "‏يمكنك من خلال شاشة التوقف عرض تفاصيل حول الوقت والتاريخ وحالة الطقس وجودة الهواء وCast." + "‏يمكنك من خلال شاشة الاستراحة عرض تفاصيل حول الوقت والتاريخ وحالة الطقس وجودة الهواء وCast." "إعدادات إضافية" "اختيار شاشة التوقف" "اختَر ما يظهر لك على شاشتك عندما يكون جهازك اللوحي في حالة إرساء. قد يستهلك جهازك قدرًا أكبر من الطاقة عند استخدام شاشة توقّف." diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 1feaecd1a16..e4a8e25132b 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -2535,7 +2535,7 @@ "Aus" "Fehler. Tippen, um weitere Informationen zu erhalten." "Dieser Dienst funktioniert nicht." - "Bedienungshilfen­verknüpfungen" + "Kurzbefehle für Bedienungshilfen" "In Schnelleinstellungen anzeigen" "Rot-Grün-Sehschwäche" "Rot-Grün-Sehschwäche" @@ -4121,7 +4121,7 @@ "Benachrichtigungen anzeigen" "Benachrichtigungen nie in der Leiste oder auf Peripheriegeräten anzeigen" "App-Benach­rich­ti­gungs­punkt erlauben" - "App-Benach­richtigungs00AD­punkt anzeigen" + "App-Benach­richtigungs­punkt anzeigen" "„Bitte nicht stören“ ignorieren" "Diese Benachrichtigungen dürfen auch dann gemeldet werden, wenn „Bitte nicht stören“ aktiviert ist" "Sperrbildschirm" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 2ee0a1ae27a..7e65be2c741 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -3580,7 +3580,7 @@ "Bluetooth, Android Auto, modo en automóvil" "Bluetooth, Android Auto, NFC" "Bluetooth, Android Auto" - "No disponible porque la NFC está desactivada" + "No disponible porque NFC está desactivada" "Para usar esta opción, debes instalar una app de pagos" "Apps y notificaciones" "Apps recientes y predeterminadas" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 3f21960f7a7..46f39a5d393 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -635,9 +635,9 @@ "با فعال کردن قابلیت‌های حفاظتی دستگاه، نگذارید دیگران بدون اجازه شما از این دستگاه استفاده کنند. قفل صفحه موردنظر برای استفاده را انتخاب کنید." "با فعال کردن قابلیت‌های حفاظتی دستگاه، نگذارید دیگران بدون اجازه شما از این تلفن استفاده کنند. قفل صفحه موردنظر برای استفاده را انتخاب کنید." "روش پشتیبان قفل صفحه را انتخاب کنید" - "اگر قفل صفحه را فراموش کنید، سرپرست سیستم نمی‌تواند آن را بازنشانی کند." + "اگر قفل صفحه را فراموش کنید، سرپرست فناوری اطلاعات نمی‌تواند آن را بازنشانی کند." "قفل کاری مجزایی تنظیم کنید" - "اگر این قفل را فراموش کردید، از سرپرست سیستم بخواهید آن را بازنشانی کند" + "اگر این قفل را فراموش کردید، از سرپرست فناوری اطلاعات بخواهید آن را بازنشانی کند" "گزینه‌های قفل صفحه" "گزینه‌های قفل صفحه" "قفل صفحه" @@ -4070,7 +4070,7 @@ "متصل" "متصل کردن این برنامه‌ها" "برنامه‌های متصل از اجازه‌های مشترکی استفاده می‌کنند و می‌توانند به داده‌های یکدیگر دسترسی پیدا کنند." - "برای اینکه داده‌های شخصی با مدیر فناوری اطلاعات هم‌رسانی نشود، تنها درصورتی برنامه‌ها را متصل کنید که به آن‌ها اعتماد داشته باشید." + "برای اینکه داده‌های شخصی با سرپرست فناوری اطلاعات هم‌رسانی نشود، تنها درصورتی برنامه‌ها را متصل کنید که به آن‌ها اعتماد داشته باشید." "هرزمان خواستید می‌توانید اتصال برنامه‌ها را در تنظیمات حریم‌خصوصی دستگاه قطع کنید." "به برنامه کاری %1$s برای دسترسی به داده‌های شخصی‌تان اعتماد دارید؟" "تنها درصورتی برنامه‌ها را متصل کنید که به آن‌ها اعتماد دارید که داده‌های شخصی را با سرپرست فناوری اطلاعاتتان هم‌رسانی نمی‌کنند." @@ -4513,7 +4513,7 @@ "گزارش اشکال به اشتراک گذاشته شود؟" "سرپرست فناوری اطلاعات شما برای کمک به عیب‌یابی این دستگاه، گزارش اشکال درخواست کرده است. ممکن است برنامه‌ها و داده‌ها به اشتراک گذاشته شوند." "سرپرست فناوری اطلاعات شما برای کمک به عیب‌یابی این دستگاه، درخواست گزارش اشکال کرده است. ممکن است برنامه‌ها و داده‌ها به اشتراک گذاشته شوند و سرعت دستگاهتان به‌طور موقت کاهش یابد." - "این گزارش اشکال با سرپرست فناوری شما هم‌رسانی می‌شود. برای جزئیات بیشتر با او تماس بگیرید." + "این گزارش اشکال با سرپرست فناوری اطلاعات هم‌رسانی می‌شود. برای جزئیات بیشتر با او تماس بگیرید." "اشتراک‌گذاری" "نپذیرفتن" "بدون انتقال داده" @@ -4669,7 +4669,7 @@ "پشتیبان‌گیری غیرفعال است" "‏به‌روزرسانی‌شده به Android نسخه %1$s" "به‌روزرسانی در دسترس است" - "سرپرست سیستم آن را مسدود کرده است" + "سرپرست فناوری اطلاعات آن را مسدود کرده است" "نمی‌توان بلندی صدا را تغییر داد" "امکان برقراری تماس وجود ندارد" "امکان ارسال پیامک وجود ندارد" @@ -4885,7 +4885,7 @@ "حسگرها خاموش است" "تنظیمات نمایه کاری" "جستجوی مخاطبین فهرست کار در برنامه‌های شخصی" - "ممکن است سرپرست سیستم بتواند جستجوها و تماس‌های ورودی‌تان را ببیند" + "ممکن است سرپرست فناوری اطلاعات بتواند جستجوها و تماس‌های ورودی‌تان را ببیند" "تقویم بین‌‌نمایه‌ای" "نمایش رویدادهای کاری در تقویم شخصی" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 844f44e17dd..e8b25536a83 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -2571,8 +2571,8 @@ %1$s secondes "Paramètres" - "Activé" - "Désactivé" + "Activée" + "Désactivée" "Aperçu" "Options standards" "Langue" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 0fb84bc0cb6..e3ae2fc976d 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -494,7 +494,7 @@ "हां छोड़ें" "वापस जाएं" "सेट अप न करें" - "अभी नहीं" + "रद्द करें" "सेंसर को छुएं" "फ़िंगरप्रिंट सेट अप करने का तरीका" "यह आपके फ़ोन के पीछे दिया गया है. अपने अंगूठे के पास की उंगली का उपयोग करें." diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index b96d684c1f0..fe79f9da9a3 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -578,7 +578,7 @@ "Preskočiti postavljanje zaporke?" "Preskočiti postavljanje zaporke i lica?" "Preskočiti postavljanje zaporke i otiska prsta?" - "Preskočiti postav. zaporke, lica i otiska prsta?" + "Preskočiti postavljanje zaporke, lica i otiska prsta?" "Preskočiti postavljanje uzorka?" "Preskočiti postavljanje uzorka i lica?" "Preskočiti postavljanje uzorka i otiska prsta?" @@ -5058,7 +5058,7 @@ "Upravlja aplikacija %1$s" "Najmanje pet puta brzo pritisnite tipku za uključivanje/isključivanje da biste pokrenuli radnje u nastavku" "Reprodukcija alarma odbrojavanja" - "Reproduciraj glasni zvuk pri pokretanju SOS poziva" + "Reproduciraj glasan zvuk pri pokretanju SOS poziva" "Traženje pomoći" "Poziv upomoć" "Telefonski broj za pomoć" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index f861f077a79..a62bbdefaa6 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -601,7 +601,7 @@ "Դուք ավելացրել եք մատնահետքերի առավելագույն թույլատրելի քանակը" "Հնարավոր չէ ավելացնել այլ մատնահետքեր" "Հեռացնե՞լ բոլոր մատնահետքերը" - "Ջնջել «%1$s»-ը" + "Հեռացնե՞լ %1$s մատնահետքը" "Ջնջե՞լ այս մատնահետքը։" %1$s» մատնահետքի հետ կապված պատկերներն ու նմուշը, որոնք պահված են ձեր սարքում, կջնջվեն" "Դուք չեք կարողանա օգտագործել ձեր մատնահետքը՝ հեռախոսն ապակողպելու կամ հավելվածներում ձեր ինքնությունը հաստատելու համար։" diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 4ed979fa35e..abc3d908742 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -2337,7 +2337,7 @@ "Stækka með flýtilykli og með því að ýta þrisvar" "Um þjónustuna „%1$s“" "Skjástærð og texti" - "Breyta því hvernig texti birtist á skjánum" + "Breyta hvernig texti birtist" "Efni: Hönnun loftbelgja" "Frá: Bjarna" "Góðan daginn!\n\nÉg vildi bara athuga hvernig gengur með hönnunina. Verður allt tilbúið áður en við byrjum að búa til nýju blöðrurnar?" @@ -4979,7 +4979,7 @@ "Nota neyðartilkynningu" "Stýrt af %1$s" "Ýttu hratt á aflrofann 5 sinnum eða oftar til að virkja aðgerðirnar hér að neðan" - "Spila niðurtalningarviðvörun" + "Spila niðurtalningar­viðvörun" "Spila hátt hljóð þegar neyðartilkynning hefst" "Biðja um hjálp" "Hringja á hjálp" diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index df1c04fde28..ac0aa4df38e 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -933,7 +933,7 @@ "Телефонды NFC құрылғысына жақындатқанда, дерек алмасуға рұқсат беру" "NFC желісін қосу" "NFC арқылы бұл құрылғы басқа маңайдағы құрылғылармен не нысандармен, соның ішінде төлем терминалдарымен, кіру деректерін оқу құралдармен және интеративті жарнамалармен немесе тэгтермен деректер алмасады." - "NFC үшін құрылғы құлпын ашуды сұрау" + "NFC үшін құрылғы құлпын ашуды талап ету" "Экранның құлпы ашылғанда ғана NFC пайдалануға рұқсат беру" "Android Beam" "Қолданба мазмұнын NFC арқылы жіберуге әзір" @@ -5666,7 +5666,7 @@ "Қазір өшіру" "Қазір қосу" "Түнгі жарықты пайдалану" - "NFC-ді пайдалану" + "NFC функциясын пайдалану" "Батарея шығынын бейімдеу функциясын пайдалану" "Жарықтықты бейімдеу функциясын пайдалану" "Wi-Fi қоңырауларын пайдалану" diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 88ae5b6963e..5a6cbdfd01b 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -4943,7 +4943,7 @@ "Bahagian tepi sebelah kiri" "Bahagian tepi sebelah kanan" "Kepekaan yang lebih tinggi mungkin mempengaruhi fungsi gerak isyarat apl di tepi skrin." - "Kepekaan Belakang" + "Kepekaan Navigasi Kembali" "Kepekaan Navigasi Gerak Isyarat" "Navigasi butang" "navigasi gerak isyarat, kepekaan ke belakang, gerak isyarat ke belakang" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 8f5a7169371..317d1ee45f2 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -5219,7 +5219,7 @@ "Permitir controlar o Wi-Fi" "Permitir a esta aplicação ativar ou desativar o Wi-Fi, procurar e estabelecer ligação a redes Wi-Fi, adicionar ou remover redes, assim como iniciar uma zona Wi-Fi apenas local." "Reproduzir multimédia:" - "Reproduzir %s em" + "Abrir %s em" "Este dispositivo" "Telemóvel" "Tablet" diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index d4e7e7d5b1c..a421e1c9f3c 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -5572,7 +5572,7 @@ "அமைப்புகளில் திரை மேலடுக்கை அனுமதித்தல்" "அமைப்புகள் திரைகளுக்கு மேலாகக் காட்டுவதற்கு மற்ற ஆப்ஸில் டிஸ்ப்ளே செய்யப்படக்கூடிய ஆப்ஸை அனுமதிக்கும்" "மாதிரி மோடத்தை அனுமதித்தல்" - "கருவியியல் பரிசோதனைக்காக மாதிரி மோடம் சேவையை இயக்க இந்தச் சாதனத்தை அனுமதிக்கவும். மொபைலைச் சாதாரணமாகப் பயன்படுத்தும்போது இதை இயக்க வேண்டாம்" + "கருவியியல் பரிசோதனைக்காக மாதிரி மோடம் சேவையை இயக்க இந்தச் சாதனத்தை அனுமதிக்கும். மொபைலைச் சாதாரணமாகப் பயன்படுத்தும்போது இதை இயக்க வேண்டாம்" "மீடியா" "மீடியா பிளேயரைப் பின் செய்தல்" "வீடியோவின் இயக்கத்தை விரைவாகத் தொடங்க, விரைவு அமைப்புகளில் மீடியா பிளேயரைத் திறந்து வைத்திருக்கும்"