From a1355d5b57b4a6f896c7e76feea18e0fdf35f35e Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Sun, 9 Feb 2020 20:49:37 +0800 Subject: [PATCH] [Settings] Performance tuning for intent ACTION_ENHANCED_4G_LTE_CHANGED Adjust the ordering of accessing to avoid the rule checks isVoLteProvisioned() when not required. Bug: 140542283 Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=Enhanced4gLteSliceHelperTest Change-Id: I8604a27d211895a6b33e0f6d0d78f5772912ee01 --- .../telephony/Enhanced4gLteSliceHelper.java | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelper.java b/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelper.java index 31e8239a875..52fc99c1855 100644 --- a/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelper.java +++ b/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelper.java @@ -163,19 +163,30 @@ public class Enhanced4gLteSliceHelper { * @param intent action performed */ public void handleEnhanced4gLteChanged(Intent intent) { - final int subId = getDefaultVoiceSubId(); + // skip checking when no toggle state update contained within Intent + final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE, false); + if (newValue != intent.getBooleanExtra(EXTRA_TOGGLE_STATE, true)) { + notifyEnhanced4gLteUpdate(); + return; + } - if (SubscriptionManager.isValidSubscriptionId(subId)) { - final VolteQueryImsState queryState = queryImsState(subId); - if (queryState.isVoLteProvisioned()) { - final boolean currentValue = queryState.isEnabledByUser() - && queryState.isAllowUserControl(); - final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE, - currentValue); - if (newValue != currentValue) { - setEnhanced4gLteModeSetting(subId, newValue); - } - } + final int subId = getDefaultVoiceSubId(); + if (!SubscriptionManager.isValidSubscriptionId(subId)) { + notifyEnhanced4gLteUpdate(); + return; + } + + final VolteQueryImsState queryState = queryImsState(subId); + final boolean currentValue = queryState.isEnabledByUser() + && queryState.isAllowUserControl(); + if (newValue == currentValue) { + notifyEnhanced4gLteUpdate(); + return; + } + + // isVoLteProvisioned() is the last item to check since it might block the main thread + if (queryState.isVoLteProvisioned()) { + setEnhanced4gLteModeSetting(subId, newValue); } notifyEnhanced4gLteUpdate(); }