From 4785c8a7ec9b53fab7a6b98196cce299eb7aa1b5 Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Fri, 6 Jan 2023 14:29:30 +0000 Subject: [PATCH 1/2] [Settings] Reduce CDMA API access when not required Avoid from accessing CDMA roaming API to reduce some latency on UI. Bug: 263294530 Bug: 264656126 Test: local Change-Id: I5c74636d8418a379724676e1f854c8adff5d4387 Merged-In: I5c74636d8418a379724676e1f854c8adff5d4387 --- .../CdmaSystemSelectPreferenceController.java | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java b/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java index 5dd445379b8..4f4c35d62c9 100644 --- a/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java +++ b/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java @@ -18,10 +18,12 @@ package com.android.settings.network.telephony.cdma; import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA; import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA; +import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_UNKNOWN; import android.content.Context; import android.provider.Settings; import android.telephony.TelephonyManager; +import android.util.Log; import androidx.preference.ListPreference; import androidx.preference.Preference; @@ -33,6 +35,7 @@ import com.android.settings.network.telephony.MobileNetworkUtils; */ public class CdmaSystemSelectPreferenceController extends CdmaBasePreferenceController implements ListPreference.OnPreferenceChangeListener { + private static final String TAG = "CdmaSystemSelectPreferenceController"; public CdmaSystemSelectPreferenceController(Context context, String key) { super(context, key); @@ -42,23 +45,36 @@ public class CdmaSystemSelectPreferenceController extends CdmaBasePreferenceCont public void updateState(Preference preference) { super.updateState(preference); final ListPreference listPreference = (ListPreference) preference; - listPreference.setVisible(getAvailabilityStatus() == AVAILABLE); - final int mode = mTelephonyManager.getCdmaRoamingMode(); - if (mode != TelephonyManager.CDMA_ROAMING_MODE_RADIO_DEFAULT) { - if (mode == TelephonyManager.CDMA_ROAMING_MODE_HOME - || mode == TelephonyManager.CDMA_ROAMING_MODE_ANY) { - listPreference.setValue(Integer.toString(mode)); - } else { - resetCdmaRoamingModeToDefault(); - } + boolean isVisible = (getAvailabilityStatus() == AVAILABLE); + listPreference.setVisible(isVisible); + if (!isVisible) { + return; } + boolean hasTelephonyMgr = mTelephonyManager != null; + try { + final int mode = + hasTelephonyMgr ? mTelephonyManager.getCdmaRoamingMode() + : TelephonyManager.CDMA_ROAMING_MODE_RADIO_DEFAULT; + if (mode != TelephonyManager.CDMA_ROAMING_MODE_RADIO_DEFAULT) { + if (mode == TelephonyManager.CDMA_ROAMING_MODE_HOME + || mode == TelephonyManager.CDMA_ROAMING_MODE_ANY) { + listPreference.setValue(Integer.toString(mode)); + } else { + resetCdmaRoamingModeToDefault(); + } + } - final int settingsNetworkMode = MobileNetworkUtils.getNetworkTypeFromRaf( - (int) mTelephonyManager.getAllowedNetworkTypesForReason( - TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER)); - final boolean enableList = settingsNetworkMode != NETWORK_MODE_LTE_GSM_WCDMA - && settingsNetworkMode != NETWORK_MODE_NR_LTE_GSM_WCDMA; - listPreference.setEnabled(enableList); + final int settingsNetworkMode = + hasTelephonyMgr ? MobileNetworkUtils.getNetworkTypeFromRaf( + (int) mTelephonyManager.getAllowedNetworkTypesForReason( + TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER)) + : NETWORK_MODE_UNKNOWN; + final boolean enableList = settingsNetworkMode != NETWORK_MODE_LTE_GSM_WCDMA + && settingsNetworkMode != NETWORK_MODE_NR_LTE_GSM_WCDMA; + listPreference.setEnabled(enableList); + } catch (Exception exception) { + Log.e(TAG, "Fail to access framework API", exception); + } } @Override From 83fce8a0aa2f22f2f75a9db29994340b9b23e816 Mon Sep 17 00:00:00 2001 From: Grace Cheng Date: Thu, 19 Jan 2023 00:31:26 +0000 Subject: [PATCH 2/2] Prevents retrying fingerprint after lockout reset if user exits FingerprintSettings Fingerprint auth is active on the enrolled fingerprints page to indicate to users which fingers are enrolled. Tapping 5x with unenrolled finger on this page sends FINGERPRINT_ERROR_LOCKOUT, which posts a mFingerprintLockoutReset runnable to retry fingerprint auth after LOCKOUT_DURATION. If a user turns off their device and unlocks via pin/pattern/password, this resets lockout, triggering the runnable and causing fingerprint auth to be retried upon device entry. This change prevents this by removing the runnable callback in FingerprintSettingsFragment#onPause. Test: Navigate to enrolled fingerprints page (Settings > Security > Face & Fingerprint Unlock > Fingerprint Unlock). Tap 5x with unenrolled finger, then turn off screen and unlock via pin/pattern/password. Ensure indicator does not appear upon device entry. Fixes: 261366312 Change-Id: I4190669286461e9ce884685a9929313da953476d --- .../settings/biometrics/fingerprint/FingerprintSettings.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java index 2721c773af2..a1d84da2176 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java @@ -641,6 +641,7 @@ public class FingerprintSettings extends SubSettings { if (mAuthenticateSidecar != null) { mAuthenticateSidecar.setListener(null); mAuthenticateSidecar.stopAuthentication(); + mHandler.removeCallbacks(mFingerprintLockoutReset); } }